/**
* 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 net.sf.freecol.server.model.ServerUnit;
import net.sf.freecol.util.test.FreeColTestCase;
public class MovementTest extends FreeColTestCase {
TileType plains = spec().getTileType("model.tile.plains");
TileType hills = spec().getTileType("model.tile.hills");
TileType ocean = spec().getTileType("model.tile.ocean");
UnitType galleonType = spec().getUnitType("model.unit.galleon");
UnitType colonistType = spec().getUnitType("model.unit.freeColonist");
UnitType braveType = spec().getUnitType("model.unit.brave");
EquipmentType horses = spec().getEquipmentType("model.equipment.horses");
EquipmentType muskets = spec().getEquipmentType("model.equipment.muskets");
EquipmentType indianHorses = spec().getEquipmentType("model.equipment.indian.horses");
EquipmentType indianMuskets = spec().getEquipmentType("model.equipment.indian.muskets");
public void testMoveFromPlainsToPlains() throws Exception {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Map map = getTestMap(plains);
game.setMap(map);
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
tile1.setExploredBy(dutch, true);
tile2.setExploredBy(dutch, true);
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
int moveCost = plains.getBasicMoveCost();
assertEquals(moveCost, colonist.getMoveCost(tile2));
assertEquals(Math.min(moveCost, colonistType.getMovement()),
colonist.getMoveCost(tile2));
// Plowing should not change result
assertTrue("No improvements", tile2.getTileImprovements().isEmpty());
TileImprovement ti = new TileImprovement(game, tile2, spec().getTileImprovementType("model.improvement.plow"));
ti.setTurnsToComplete(0);
tile2.setTileItemContainer(new TileItemContainer(game, tile2));
tile2.getTileItemContainer().addTileItem(ti);
assertTrue("Plowed", tile2.getCompletedTileImprovements().size() == 1);
assertEquals(moveCost, colonist.getMoveCost(tile2));
assertEquals(Math.min(moveCost, colonistType.getMovement()),
colonist.getMoveCost(tile2));
}
public void testMoveFromPlainsToHills() throws Exception {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Map map = getTestMap(plains);
game.setMap(map);
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
tile2.setType(hills);
tile1.setExploredBy(dutch, true);
tile2.setExploredBy(dutch, true);
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
int moveCost = hills.getBasicMoveCost();
assertTrue(moveCost > colonist.getMovesLeft());
assertEquals(Math.min(moveCost, colonistType.getMovement()),
colonist.getMoveCost(tile2));
}
public void testMoveAlongRoad() throws Exception {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Map map = getTestMap(plains);
game.setMap(map);
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
tile1.setExploredBy(dutch, true);
tile2.setExploredBy(dutch, true);
TileImprovementType roadType = spec().getTileImprovementType("model.improvement.road");
TileImprovement road1 = new TileImprovement(game, tile1, roadType);
assertTrue(road1.isRoad());
assertFalse(road1.isComplete());
road1.setTurnsToComplete(0);
assertTrue(road1.isComplete());
tile1.setTileItemContainer(new TileItemContainer(game, tile1));
tile1.getTileItemContainer().addTileItem(road1);
assertTrue(tile1.hasRoad());
TileImprovement road2 = new TileImprovement(game, tile2, roadType);
road2.setTurnsToComplete(0);
tile2.setTileItemContainer(new TileItemContainer(game, tile2));
tile2.getTileItemContainer().addTileItem(road2);
assertTrue(road2.isComplete());
assertTrue(tile2.hasRoad());
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
int moveCost = 1;
assertEquals(moveCost, colonist.getMoveCost(tile2));
assertEquals(Math.min(moveCost, colonistType.getMovement()),
colonist.getMoveCost(tile2));
}
public void testMoveAlongRiver() throws Exception {
Game game = getStandardGame();
Player dutch = game.getPlayer("model.nation.dutch");
Map map = getTestMap(plains);
game.setMap(map);
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
tile1.setExploredBy(dutch, true);
tile2.setExploredBy(dutch, true);
TileImprovementType riverType = spec().getTileImprovementType("model.improvement.river");
TileImprovement river1 = new TileImprovement(game, tile1, riverType);
assertTrue(river1.isRiver());
assertTrue(river1.isComplete());
tile1.setTileItemContainer(new TileItemContainer(game, tile1));
tile1.getTileItemContainer().addTileItem(river1);
assertTrue(tile1.hasRiver());
TileImprovement river2 = new TileImprovement(game, tile2, riverType);
river2.setTurnsToComplete(0);
tile2.setTileItemContainer(new TileItemContainer(game, tile2));
tile2.getTileItemContainer().addTileItem(river2);
assertTrue(river2.isComplete());
assertTrue(tile2.hasRiver());
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
int moveCost = 1;
assertEquals(moveCost, colonist.getMoveCost(tile2));
assertEquals(Math.min(moveCost, colonistType.getMovement()),
colonist.getMoveCost(tile2));
}
public void testScoutColony() {
Game game = getGame();
Map map = getTestMap(true);
game.setMap(map);
Player french = game.getPlayer("model.nation.french");
Player dutch = game.getPlayer("model.nation.dutch");
Player iroquois = game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
Tile tile3 = map.getTile(6, 8);
tile1.setExploredBy(french, true);
tile2.setExploredBy(french, true);
tile3.setExploredBy(french, true);
tile1.setExploredBy(dutch, true);
tile2.setExploredBy(dutch, true);
tile3.setExploredBy(dutch, true);
tile1.setExploredBy(iroquois, true);
tile3.setExploredBy(iroquois, true);
Colony colony = getStandardColony();
assertEquals(tile1.getColony(), colony);
Unit colonist = new ServerUnit(game, tile2, french, colonistType);
assertEquals(Unit.MoveType.MOVE_NO_ACCESS_SETTLEMENT,
colonist.getMoveType(tile1));
colonist.changeEquipment(horses, 1);
assertEquals(Unit.MoveType.ENTER_FOREIGN_COLONY_WITH_SCOUT,
colonist.getMoveType(tile1));
colonist.changeEquipment(muskets, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT,
colonist.getMoveType(tile1));
Unit brave = new ServerUnit(game, tile3, iroquois, braveType);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
brave.changeEquipment(indianHorses, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
brave.changeEquipment(indianMuskets, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
}
public void testScoutIndianSettlement() {
Game game = getStandardGame();
Map map = getTestMap(plains);
game.setMap(map);
Player french = game.getPlayer("model.nation.french");
Player inca = game.getPlayer("model.nation.inca");
Player iroquois = game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(5, 8);
Tile tile2 = map.getTile(4, 8);
Tile tile3 = map.getTile(6, 8);
tile1.setExploredBy(french, true);
tile2.setExploredBy(french, true);
tile3.setExploredBy(french, true);
tile1.setExploredBy(iroquois, true);
tile3.setExploredBy(iroquois, true);
// Build settlement
FreeColTestCase.IndianSettlementBuilder builder
= new FreeColTestCase.IndianSettlementBuilder(game);
builder.player(inca).settlementTile(tile1).skillToTeach(null).build();
Unit colonist = new ServerUnit(game, tile2, french, colonistType);
assertEquals(Unit.MoveType.MOVE_NO_ACCESS_CONTACT,
colonist.getMoveType(tile1));
Player.makeContact(french, inca);
assertEquals(Unit.MoveType.ENTER_INDIAN_SETTLEMENT_WITH_FREE_COLONIST,
colonist.getMoveType(tile1));
colonist.changeEquipment(horses, 1);
assertEquals(Unit.MoveType.ENTER_INDIAN_SETTLEMENT_WITH_SCOUT,
colonist.getMoveType(tile1));
colonist.changeEquipment(muskets, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT,
colonist.getMoveType(tile1));
Unit brave = new ServerUnit(game, tile3, iroquois, braveType);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
brave.changeEquipment(indianHorses, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
brave.changeEquipment(indianMuskets, 1);
assertEquals(Unit.MoveType.ATTACK_SETTLEMENT, brave.getMoveType(tile1));
}
}