/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.common.model; import java.util.List; import java.util.Locale; import net.sf.freecol.client.gui.i18n.Messages; import net.sf.freecol.common.model.FreeColObject; import net.sf.freecol.common.networking.DOMMessage; import net.sf.freecol.server.model.ServerUnit; import net.sf.freecol.util.test.FreeColTestCase; import org.w3c.dom.Document; import org.w3c.dom.Element; public class GoodsTest extends FreeColTestCase { public static GoodsType cottonType = spec().getGoodsType("model.goods.cotton"); public static TileType plainsType = spec().getTileType("model.tile.plains"); public static UnitType privateerType = spec().getUnitType("model.unit.privateer"); public static UnitType wagonTrainType = spec().getUnitType("model.unit.wagonTrain"); public static UnitType veteranSoldierType = spec().getUnitType("model.unit.veteranSoldier"); public void testGoodsGameLocationIntInt() { Map map = getTestMap(plainsType); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods g = new Goods(getGame(), wagon, cottonType, 75); assertEquals(wagon, g.getLocation()); assertEquals(cottonType, g.getType()); assertEquals(75, g.getAmount()); } public void testSetOwner() { try { Map map = getTestMap(plainsType); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods g = new Goods(getGame(), wagon, cottonType, 75); g.setOwner(getGame().getCurrentPlayer()); fail("Should not allow setOwner"); } catch (UnsupportedOperationException e) { // Okay to throw exception. } } public void testToString() { Messages.setMessageBundle(Locale.ENGLISH); Map map = getTestMap(plainsType); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods g = new Goods(getGame(), wagon, cottonType, 75); assertEquals("75 model.goods.cotton", g.toString()); } public void testGetName() { Locale.setDefault(Locale.ENGLISH); Goods g = new Goods(getGame(), null, cottonType, 75); assertEquals("75 Cotton", Messages.message(g.getLabel(true))); assertEquals("75 Cotton (boycotted)", Messages.message(g.getLabel(false))); // Same as getName(int, boolean) //assertEquals(g.getName(), Goods.getName(cottonType)); //assertEquals(g.getName(false), Goods.getName(cottonType, false)); //assertEquals(g.getName(true), Goods.getName(cottonType, true)); } public void testGetRawMaterial() { GoodsType cotton = spec().getGoodsType("model.goods.cotton"); GoodsType cloth = spec().getGoodsType("model.goods.cloth"); assertEquals(null, cotton.getRawMaterial()); assertEquals(cotton, cloth.getRawMaterial()); } public void testGetManufactoredGoods() { GoodsType cotton = spec().getGoodsType("model.goods.cotton"); GoodsType cloth = spec().getGoodsType("model.goods.cloth"); assertEquals(null, cloth.getProducedMaterial()); assertEquals(cloth, cotton.getProducedMaterial()); } public void testIsFarmedGoods() { GoodsType bells = spec().getGoodsType("model.goods.bells"); GoodsType cloth = spec().getGoodsType("model.goods.cloth"); GoodsType cotton = spec().getGoodsType("model.goods.cotton"); assertFalse(bells.isFarmed()); assertTrue(cotton.isFarmed()); assertFalse(cloth.isFarmed()); } public void testMilitaryGoods() { GoodsType bells = spec().getGoodsType("model.goods.bells"); GoodsType crosses = spec().getGoodsType("model.goods.crosses"); GoodsType cloth = spec().getGoodsType("model.goods.cloth"); GoodsType cotton = spec().getGoodsType("model.goods.cotton"); GoodsType muskets = spec().getGoodsType("model.goods.muskets"); GoodsType horses = spec().getGoodsType("model.goods.horses"); assertFalse(bells.isMilitaryGoods()); assertFalse(crosses.isMilitaryGoods()); assertFalse(cloth.isMilitaryGoods()); assertFalse(cotton.isMilitaryGoods()); assertTrue(horses.isMilitaryGoods()); assertTrue(muskets.isMilitaryGoods()); } public void testBuildingMaterials() { GoodsType bells = spec().getGoodsType("model.goods.bells"); GoodsType crosses = spec().getGoodsType("model.goods.crosses"); GoodsType cloth = spec().getGoodsType("model.goods.cloth"); GoodsType cotton = spec().getGoodsType("model.goods.cotton"); GoodsType muskets = spec().getGoodsType("model.goods.muskets"); GoodsType horses = spec().getGoodsType("model.goods.horses"); GoodsType hammers = spec().getGoodsType("model.goods.hammers"); GoodsType tools = spec().getGoodsType("model.goods.tools"); GoodsType fish = spec().getGoodsType("model.goods.fish"); GoodsType food = spec().getPrimaryFoodType(); GoodsType ore = spec().getGoodsType("model.goods.ore"); GoodsType lumber = spec().getGoodsType("model.goods.lumber"); // for EquipmentType horses assertTrue(horses.isBuildingMaterial()); // for EquipmentType muskets assertTrue(muskets.isBuildingMaterial()); // for buildings and units assertTrue(hammers.isBuildingMaterial()); assertTrue(tools.isBuildingMaterial()); // other goods not involved in construction, or not directly involved assertFalse(bells.isBuildingMaterial()); assertFalse(crosses.isBuildingMaterial()); assertFalse(cloth.isBuildingMaterial()); assertFalse(cotton.isBuildingMaterial()); assertFalse(fish.isBuildingMaterial()); //assertFalse(food.isBuildingMaterial()); assertFalse(ore.isBuildingMaterial()); assertFalse(lumber.isBuildingMaterial()); // checking raw materials assertTrue(ore.isRawBuildingMaterial()); assertTrue(lumber.isRawBuildingMaterial()); assertFalse(tools.isRawBuildingMaterial()); assertTrue(food.isRawBuildingMaterial()); assertFalse(fish.isRawBuildingMaterial()); assertFalse(horses.isRawBuildingMaterial()); assertFalse(muskets.isRawBuildingMaterial()); assertFalse(hammers.isRawBuildingMaterial()); assertFalse(bells.isRawBuildingMaterial()); assertFalse(crosses.isRawBuildingMaterial()); assertFalse(cloth.isRawBuildingMaterial()); assertFalse(cotton.isRawBuildingMaterial()); } public void testTradeGoods() { GoodsType tradeGoods = spec().getGoodsType("model.goods.tradeGoods"); assertTrue(tradeGoods.isTradeGoods()); } public void testGetTakeSpace() { Map map = getTestMap(plainsType, true); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods cotton = new Goods(getGame(), wagon, cottonType, 75); assertEquals(1, cotton.getSpaceTaken()); } public void testSetGetAmount() { Map map = getTestMap(plainsType, true); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods cotton = new Goods(getGame(), wagon, cottonType, 75); assertEquals(75, cotton.getAmount()); cotton.setAmount(-10); assertEquals(-10, cotton.getAmount()); cotton.setAmount(100000); assertEquals(100000, cotton.getAmount()); } public Player dutch(){ return getGame().getPlayer("model.nation.dutch"); } public void testAdjustAmount() { Map map = getTestMap(plainsType, true); Unit wagon = new ServerUnit(getGame(), map.getTile(9, 10), dutch(), wagonTrainType); Goods cotton = new Goods(getGame(), wagon, cottonType, 75); assertEquals(75, cotton.getAmount()); cotton.adjustAmount(); cotton.setAmount(-10); assertEquals(-10, cotton.getAmount()); cotton.setAmount(100000); assertEquals(100000, cotton.getAmount()); } public void testSerialize() { Game game = getGame(); game.setMap(getTestMap(plainsType,true)); Colony colony = getStandardColony(); Goods goods1 = new Goods(game, colony, cottonType, 75); Document document = DOMMessage.createNewDocument(); Element element = goods1.toXMLElement(null, document, true, true); element.setAttribute(FreeColObject.ID_ATTRIBUTE, "newID"); Goods goods2 = new Goods(colony.getGame(), element); assertEquals(goods1.getGame(), goods2.getGame()); assertEquals(goods1.getLocation(), goods2.getLocation()); assertEquals(goods1.getType(), goods2.getType()); assertEquals(goods1.getAmount(), goods2.getAmount()); } public void testProductionChain() { GoodsType hammers = spec().getGoodsType("model.goods.hammers"); GoodsType lumber = spec().getGoodsType("model.goods.lumber"); GoodsType muskets = spec().getGoodsType("model.goods.muskets"); GoodsType tools = spec().getGoodsType("model.goods.tools"); GoodsType ore = spec().getGoodsType("model.goods.ore"); List<GoodsType> chain = hammers.getProductionChain(); assertEquals(lumber, chain.get(0)); assertEquals(hammers, chain.get(1)); chain = muskets.getProductionChain(); assertEquals(ore, chain.get(0)); assertEquals(tools, chain.get(1)); assertEquals(muskets, chain.get(2)); } }