/**
* 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.Iterator;
import net.sf.freecol.server.model.ServerGame;
import net.sf.freecol.server.model.ServerPlayer;
import net.sf.freecol.server.model.ServerUnit;
import net.sf.freecol.util.test.FreeColTestCase;
public class PlayerTest extends FreeColTestCase {
UnitType freeColonist = spec().getUnitType("model.unit.freeColonist");
UnitType galleonType = spec().getUnitType("model.unit.galleon");
public void testUnits() {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Player french = game.getPlayer("model.nation.french");
Map map = getTestMap(spec().getTileType("model.tile.plains"));
game.setMap(map);
map.getTile(4, 7).setExploredBy(dutch, true);
map.getTile(4, 8).setExploredBy(dutch, true);
map.getTile(5, 7).setExploredBy(dutch, true);
map.getTile(5, 8).setExploredBy(dutch, true);
UnitType freeColonist = spec().getUnitType("model.unit.freeColonist");
Unit unit1 = new ServerUnit(game, map.getTile(4, 7), dutch,
freeColonist);
Unit unit2 = new ServerUnit(game, map.getTile(4, 8), dutch,
freeColonist);
Unit unit3 = new ServerUnit(game, map.getTile(5, 7), dutch,
freeColonist);
Unit unit4 = new ServerUnit(game, map.getTile(5, 8), dutch,
freeColonist);
int count = 0;
Iterator<Unit> unitIterator = dutch.getUnitIterator();
while (unitIterator.hasNext()) {
unitIterator.next();
count++;
}
assertTrue(count == 4);
assertTrue(dutch.getUnit(unit1.getId()) == unit1);
assertTrue(dutch.getUnit(unit2.getId()) == unit2);
assertTrue(dutch.getUnit(unit3.getId()) == unit3);
assertTrue(dutch.getUnit(unit4.getId()) == unit4);
String id = unit1.getId();
unit1.dispose();
assertTrue(dutch.getUnit(id) == null);
unit2.setOwner(french);
assertTrue(dutch.getUnit(unit2.getId()) == null);
assertTrue(french.getUnit(unit2.getId()) == unit2);
}
public void testEuropeanPlayer(Player player) {
assertTrue(player.canBuildColonies());
assertTrue(player.canHaveFoundingFathers());
assertTrue(player.canMoveToEurope());
assertTrue(player.canRecruitUnits());
assertEquals(player.getPlayerType(), Player.PlayerType.COLONIAL);
assertFalse(player.isDead());
assertTrue(player.isEuropean());
assertFalse(player.isIndian());
assertFalse(player.isREF());
assertEquals(2, player.getMaximumFoodConsumption());
}
public void testIndianPlayer(Player player) {
assertFalse(player.canBuildColonies());
assertFalse(player.canHaveFoundingFathers());
assertFalse(player.canMoveToEurope());
assertFalse(player.canRecruitUnits());
assertEquals(player.getPlayerType(), Player.PlayerType.NATIVE);
assertFalse(player.isDead());
assertFalse(player.isEuropean());
assertTrue(player.isIndian());
assertFalse(player.isREF());
assertEquals(2, player.getMaximumFoodConsumption());
}
public void testRoyalPlayer(Player player) {
assertFalse(player.canBuildColonies());
assertFalse(player.canHaveFoundingFathers());
assertTrue(player.canMoveToEurope());
assertFalse(player.canRecruitUnits());
assertEquals(player.getPlayerType(), Player.PlayerType.ROYAL);
assertFalse(player.isDead());
assertTrue(player.isEuropean());
assertFalse(player.isIndian());
assertTrue(player.isREF());
assertEquals(2, player.getMaximumFoodConsumption());
}
public void testClassicPlayers() {
Game game = getStandardGame("classic");
// europeans
Player dutch = game.getPlayer("model.nation.dutch");
Player french = game.getPlayer("model.nation.french");
Player english = game.getPlayer("model.nation.english");
Player spanish = game.getPlayer("model.nation.spanish");
testEuropeanPlayer(dutch);
testEuropeanPlayer(french);
testEuropeanPlayer(english);
testEuropeanPlayer(spanish);
// indians
Player inca = game.getPlayer("model.nation.inca");
Player aztec = game.getPlayer("model.nation.aztec");
Player arawak = game.getPlayer("model.nation.arawak");
Player cherokee = game.getPlayer("model.nation.cherokee");
Player iroquois = game.getPlayer("model.nation.iroquois");
Player sioux = game.getPlayer("model.nation.sioux");
Player apache = game.getPlayer("model.nation.apache");
Player tupi = game.getPlayer("model.nation.tupi");
testIndianPlayer(inca);
testIndianPlayer(aztec);
testIndianPlayer(arawak);
testIndianPlayer(cherokee);
testIndianPlayer(iroquois);
testIndianPlayer(sioux);
testIndianPlayer(apache);
testIndianPlayer(tupi);
// royal
Player dutchREF = game.getPlayer("model.nation.dutchREF");
Player frenchREF = game.getPlayer("model.nation.frenchREF");
Player englishREF = game.getPlayer("model.nation.englishREF");
Player spanishREF = game.getPlayer("model.nation.spanishREF");
testRoyalPlayer(dutchREF);
testRoyalPlayer(frenchREF);
testRoyalPlayer(englishREF);
testRoyalPlayer(spanishREF);
assertEquals(dutchREF, dutch.getREFPlayer());
assertEquals(frenchREF, french.getREFPlayer());
assertEquals(englishREF, english.getREFPlayer());
assertEquals(spanishREF, spanish.getREFPlayer());
}
public void testFreecolPlayers() {
// the initialization code is basically the same as in
// getStandardGame(), except that all European nations are
// available
Specification specification = getSpecification("freecol");
Game game = new ServerGame(specification);
NationOptions nationOptions = new NationOptions(specification, NationOptions.Advantages.SELECTABLE);
for (Nation nation : specification.getEuropeanNations()) {
nationOptions.setNationState(nation, NationOptions.NationState.AVAILABLE);
}
game.setNationOptions(nationOptions);
specification.applyDifficultyLevel("model.difficulty.medium");
for (Nation n : specification.getNations()) {
Player p = new ServerPlayer(game, n.getRulerNameKey(), false, n,
null, null);
p.setAI(!n.getType().isEuropean() || n.getType().isREF());
game.addPlayer(p);
}
// europeans
Player dutch = game.getPlayer("model.nation.dutch");
Player french = game.getPlayer("model.nation.french");
Player english = game.getPlayer("model.nation.english");
Player spanish = game.getPlayer("model.nation.spanish");
Player portuguese = game.getPlayer("model.nation.portuguese");
Player swedish = game.getPlayer("model.nation.swedish");
Player danish = game.getPlayer("model.nation.danish");
Player russian = game.getPlayer("model.nation.russian");
testEuropeanPlayer(dutch);
testEuropeanPlayer(french);
testEuropeanPlayer(english);
testEuropeanPlayer(spanish);
testEuropeanPlayer(portuguese);
testEuropeanPlayer(swedish);
testEuropeanPlayer(danish);
testEuropeanPlayer(russian);
// indians
Player inca = game.getPlayer("model.nation.inca");
Player aztec = game.getPlayer("model.nation.aztec");
Player arawak = game.getPlayer("model.nation.arawak");
Player cherokee = game.getPlayer("model.nation.cherokee");
Player iroquois = game.getPlayer("model.nation.iroquois");
Player sioux = game.getPlayer("model.nation.sioux");
Player apache = game.getPlayer("model.nation.apache");
Player tupi = game.getPlayer("model.nation.tupi");
testIndianPlayer(inca);
testIndianPlayer(aztec);
testIndianPlayer(arawak);
testIndianPlayer(cherokee);
testIndianPlayer(iroquois);
testIndianPlayer(sioux);
testIndianPlayer(apache);
testIndianPlayer(tupi);
// royal
Player dutchREF = game.getPlayer("model.nation.dutchREF");
Player frenchREF = game.getPlayer("model.nation.frenchREF");
Player englishREF = game.getPlayer("model.nation.englishREF");
Player spanishREF = game.getPlayer("model.nation.spanishREF");
Player portugueseREF = game.getPlayer("model.nation.portugueseREF");
Player swedishREF = game.getPlayer("model.nation.swedishREF");
Player danishREF = game.getPlayer("model.nation.danishREF");
Player russianREF = game.getPlayer("model.nation.russianREF");
testRoyalPlayer(dutchREF);
testRoyalPlayer(frenchREF);
testRoyalPlayer(englishREF);
testRoyalPlayer(spanishREF);
testRoyalPlayer(portugueseREF);
testRoyalPlayer(swedishREF);
testRoyalPlayer(danishREF);
testRoyalPlayer(russianREF);
assertEquals(dutchREF, dutch.getREFPlayer());
assertEquals(frenchREF, french.getREFPlayer());
assertEquals(englishREF, english.getREFPlayer());
assertEquals(spanishREF, spanish.getREFPlayer());
assertEquals(portugueseREF, portuguese.getREFPlayer());
assertEquals(swedishREF, swedish.getREFPlayer());
assertEquals(danishREF, danish.getREFPlayer());
assertEquals(russianREF, russian.getREFPlayer());
}
public void testTension(){
String errMsg = "";
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Player french = game.getPlayer("model.nation.french");
int initialTension = 500;
int change = 250;
dutch.setTension(french, new Tension(initialTension));
french.setTension(dutch, new Tension(initialTension));
dutch.modifyTension(french, change);
int expectedDutchTension = initialTension + change;
int expectedFrenchTension = initialTension;
errMsg = "Dutch tension value should have changed";
assertEquals(errMsg, expectedDutchTension, dutch.getTension(french).getValue());
errMsg = "French tension value should have remained the same";
assertEquals(errMsg, expectedFrenchTension ,french.getTension(dutch).getValue());
}
public void testAddAnotherPlayersUnit(){
Game game = getStandardGame();
Map map = getTestMap();
game.setMap(map);
Player dutch = game.getPlayer("model.nation.dutch");
Player french = game.getPlayer("model.nation.french");
assertEquals("Wrong number of units for dutch player",0,dutch.getUnits().size());
assertEquals("Wrong number of units for french player",0,french.getUnits().size());
Unit colonist = new ServerUnit(game, map.getTile(6, 8), dutch,
freeColonist);
assertTrue("Colonist should be dutch", colonist.getOwner() == dutch);
assertEquals("Wrong number of units for dutch player",1,dutch.getUnits().size());
try{
french.setUnit(colonist);
fail("An IllegalStateException should have been raised");
}
catch(IllegalStateException e){
assertTrue("Colonist owner should not have been changed", colonist.getOwner() == dutch);
assertEquals("Wrong number of units for dutch player",1,dutch.getUnits().size());
assertEquals("Wrong number of units for french player",0,french.getUnits().size());
}
}
}