/** * 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.Set; import net.sf.freecol.common.model.FoundingFather.FoundingFatherType; import net.sf.freecol.util.test.FreeColTestCase; /** * Test cases that apply to all Founding Fathers, or to the * FoundingFather class in general. */ public class FoundingFatherTest extends FreeColTestCase { private static GoodsType musketsType = spec().getGoodsType("model.goods.muskets"); private static UnitType servantType = spec().getUnitType("model.unit.indenturedServant"); private static UnitType colonistType = spec().getUnitType("model.unit.freeColonist"); private static UnitType statesmanType = spec().getUnitType("model.unit.elderStatesman"); public void testFeatures() { Game game = getStandardGame(); Player dutch = game.getPlayer("model.nation.dutch"); FoundingFather father1 = new FoundingFather("father1", spec()); father1.setType(FoundingFatherType.TRADE); Ability ability = new Ability("some.new.ability"); spec().addAbility(ability); father1.addAbility(ability); dutch.addFather(father1); assertTrue(dutch.hasAbility("some.new.ability")); FoundingFather father2 = new FoundingFather("father2", spec()); father2.setType(FoundingFatherType.TRADE); Modifier modifier = new Modifier("some.new.modifier", father2, 2f, Modifier.Type.ADDITIVE); father2.addModifier(modifier); spec().addModifier(modifier); dutch.addFather(father2); Set<Modifier> modifierSet = dutch.getModifierSet("some.new.modifier"); assertEquals(1, modifierSet.size()); assertEquals(2f, modifierSet.iterator().next().getValue()); assertEquals(4f, FeatureContainer.applyModifierSet(2, null, modifierSet)); FoundingFather father3 = new FoundingFather("father3", spec()); father3.setType(FoundingFatherType.TRADE); father3.addModifier(new Modifier("some.new.modifier", father3, 2f, Modifier.Type.ADDITIVE)); dutch.addFather(father3); assertFalse(dutch.getModifierSet("some.new.modifier").isEmpty()); assertEquals(6f, dutch.applyModifier(2, "some.new.modifier")); FoundingFather father4 = new FoundingFather("father4", spec()); father4.setType(FoundingFatherType.TRADE); Ability ability2 = new Ability("some.new.ability", false); assertFalse(ability.equals(ability2)); assertFalse(ability.hashCode() == ability2.hashCode()); father4.addAbility(ability2); dutch.addFather(father4); assertFalse(dutch.hasAbility("some.new.ability")); } public void testAddAllFathers() { // check that all fathers can be added Game game = getGame(); game.setMap(getTestMap(true)); Colony colony = getStandardColony(4); Player player = colony.getOwner(); for (FoundingFather father : spec().getFoundingFathers()) { player.addFather(father); } } public void testBellsRequired() { int[] expectedValues = new int[] { 40, 201, 442, 763, 1164, 1645 , 2206, 2847, 3568, 4369, 5250, 6211, 7252, 8373, 9574, 10855, 12216, 13657, 15178, 16779, 18460, 20221, 22062, 23983, 25984 }; Game game = getGame(); Player dutch = game.getPlayer("model.nation.dutch"); //assertEquals(2, getGame().getGameOptions().getInteger(GameOptions.DIFFICULTY)); assertEquals(40, spec().getInteger("model.option.foundingFatherFactor")); for (int index = 0; index < expectedValues.length; index++) { assertEquals(index, dutch.getFatherCount()); assertEquals(expectedValues[index], dutch.getTotalFoundingFatherCost()); FoundingFather father = new FoundingFather("father" + index, spec()); dutch.addFather(father); } } public void testAvailableTo() { // this feature is not used at the moment Game game = getGame(); for (FoundingFather father : spec().getFoundingFathers()) { for (Player player : game.getPlayers()) { assertEquals(player.getNationID(), player.isEuropean(), father.isAvailableTo(player)); } } Player dutch = game.getPlayer("model.nation.dutch"); Player french = game.getPlayer("model.nation.french"); FoundingFather newFather = new FoundingFather("father", spec()); newFather.setType(FoundingFatherType.TRADE); Scope dutchScope = new Scope(); dutchScope.setMethodName("getNationID"); dutchScope.setMethodValue("model.nation.dutch"); assertTrue(dutchScope.appliesTo(dutch)); newFather.getScopes().add(dutchScope); Scope frenchScope = new Scope(); frenchScope.setMethodName("getNationType"); frenchScope.setMethodValue("model.nationType.cooperation"); assertTrue(frenchScope.appliesTo(french)); newFather.getScopes().add(frenchScope); for (Player player : game.getPlayers()) { assertEquals(player.getNationID(), (player == french || player == dutch), newFather.isAvailableTo(player)); } } }