freecol/test/src/net/sf/freecol/common/model/GoodsTest.java

262 lines
8.8 KiB
Java

/**
* Copyright (C) 2002-2022 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.common.i18n.Messages;
import net.sf.freecol.common.model.FreeColObject;
import net.sf.freecol.server.model.ServerUnit;
import net.sf.freecol.util.test.FreeColTestCase;
public class GoodsTest extends FreeColTestCase {
private static final GoodsType bellsType
= spec().getGoodsType("model.goods.bells");
private static final GoodsType clothType
= spec().getGoodsType("model.goods.cloth");
private static final GoodsType cottonType
= spec().getGoodsType("model.goods.cotton");
private static final GoodsType crossesType
= spec().getGoodsType("model.goods.crosses");
private static final GoodsType fishType
= spec().getGoodsType("model.goods.fish");
private static final GoodsType foodType
= spec().getPrimaryFoodType();
private static final GoodsType grainType
= spec().getGoodsType("model.goods.grain");
private static final GoodsType hammersType
= spec().getGoodsType("model.goods.hammers");
private static final GoodsType horsesType
= spec().getGoodsType("model.goods.horses");
private static final GoodsType lumberType
= spec().getGoodsType("model.goods.lumber");
private static final GoodsType musketsType
= spec().getGoodsType("model.goods.muskets");
private static final GoodsType oreType
= spec().getGoodsType("model.goods.ore");
private static final GoodsType toolsType
= spec().getGoodsType("model.goods.tools");
private static final GoodsType tradeGoodsType
= spec().getGoodsType("model.goods.tradeGoods");
private static final TileType plainsType
= spec().getTileType("model.tile.plains");
private static final UnitType privateerType
= spec().getUnitType("model.unit.privateer");
private static final UnitType veteranSoldierType
= spec().getUnitType("model.unit.veteranSoldier");
private static final UnitType wagonTrainType
= spec().getUnitType("model.unit.wagonTrain");
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.loadMessageBundle(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 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 testGetInputType() {
assertEquals(null, cottonType.getInputType());
assertEquals(cottonType, clothType.getInputType());
}
public void testGetOutputType() {
assertEquals(null, clothType.getOutputType());
assertEquals(clothType, cottonType.getOutputType());
}
public void testIsFarmedGoods() {
assertFalse(bellsType.isFarmed());
assertTrue(cottonType.isFarmed());
assertFalse(clothType.isFarmed());
}
public void testMilitaryGoods() {
assertFalse(bellsType.getMilitary());
assertFalse(crossesType.getMilitary());
assertFalse(clothType.getMilitary());
assertFalse(cottonType.getMilitary());
assertTrue(horsesType.getMilitary());
assertTrue(musketsType.getMilitary());
}
public void testBuildingMaterials() {
// for dragoon role
assertTrue(horsesType.isBuildingMaterial());
assertTrue(musketsType.isBuildingMaterial());
// for buildings and units
assertTrue(hammersType.isBuildingMaterial());
assertTrue(toolsType.isBuildingMaterial());
// other goods not involved in construction, or not directly involved
assertFalse(bellsType.isBuildingMaterial());
assertFalse(crossesType.isBuildingMaterial());
assertFalse(clothType.isBuildingMaterial());
assertFalse(cottonType.isBuildingMaterial());
assertFalse(fishType.isBuildingMaterial());
//assertFalse(foodType.isBuildingMaterial());
assertFalse(oreType.isBuildingMaterial());
assertFalse(lumberType.isBuildingMaterial());
// checking raw materials
assertTrue(oreType.isRawBuildingMaterial());
assertTrue(lumberType.isRawBuildingMaterial());
assertFalse(toolsType.isRawBuildingMaterial());
assertFalse(foodType.isRawBuildingMaterial());// freecol-ruleset!
assertTrue(grainType.isRawBuildingMaterial());// freecol-ruleset!
assertFalse(fishType.isRawBuildingMaterial());
assertFalse(horsesType.isRawBuildingMaterial());
assertFalse(musketsType.isRawBuildingMaterial());
assertFalse(hammersType.isRawBuildingMaterial());
assertFalse(bellsType.isRawBuildingMaterial());
assertFalse(crossesType.isRawBuildingMaterial());
assertFalse(clothType.isRawBuildingMaterial());
assertFalse(cottonType.isRawBuildingMaterial());
}
public void testTradeGoods() {
assertTrue(tradeGoodsType.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().getPlayerByNationId("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 testProductionChain() {
List<GoodsType> chain = hammersType.getProductionChain();
assertEquals(lumberType, chain.get(0));
assertEquals(hammersType, chain.get(1));
chain = musketsType.getProductionChain();
assertEquals(oreType, chain.get(0));
assertEquals(toolsType, chain.get(1));
assertEquals(musketsType, chain.get(2));
}
}