/**
* 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.server.ai;
import net.sf.freecol.common.model.Colony;
import net.sf.freecol.common.model.Game;
import net.sf.freecol.common.model.IndianSettlement;
import net.sf.freecol.common.model.Map;
import net.sf.freecol.common.model.Player.Stance;
import net.sf.freecol.common.model.Tile;
import net.sf.freecol.common.model.TileType;
import net.sf.freecol.common.model.Unit;
import net.sf.freecol.common.model.UnitType;
import net.sf.freecol.server.ServerTestHelper;
import net.sf.freecol.server.control.InGameController;
import net.sf.freecol.server.model.ServerPlayer;
import net.sf.freecol.server.model.ServerUnit;
import net.sf.freecol.util.test.FreeColTestCase;
public class ContactTest extends FreeColTestCase {
private static final TileType plains
= spec().getTileType("model.tile.plains");
private static final TileType ocean
= spec().getTileType("model.tile.ocean");
private static final UnitType galleonType
= spec().getUnitType("model.unit.galleon");
private static final UnitType braveType
= spec().getUnitType("model.unit.brave");
private static final UnitType colonistType
= spec().getUnitType("model.unit.freeColonist");
@Override
public void tearDown() throws Exception {
ServerTestHelper.stopServerGame();
super.tearDown();
}
public void testEuropeanMeetsEuropean() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
ServerPlayer french = (ServerPlayer) game.getPlayer("model.nation.french");
Tile tile1 = map.getTile(6, 8);
tile1.setExploredBy(dutch, true);
tile1.setExploredBy(french, false);
Tile tile2 = map.getTile(5, 8);
tile2.setExploredBy(dutch, true);
tile2.setExploredBy(french, true);
Tile tile3 = map.getTile(4, 8);
tile3.setExploredBy(dutch, false);
tile3.setExploredBy(french, true);
assertFalse(french.hasContacted(dutch));
assertFalse(dutch.hasContacted(french));
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
colonist.setState(Unit.UnitState.FORTIFYING);
colonist.setState(Unit.UnitState.FORTIFIED);
Unit soldier = new ServerUnit(game, tile3, french, colonistType);
igc.move(french, soldier, tile2);
assertTrue(french.hasContacted(dutch));
assertTrue(dutch.hasContacted(french));
assertEquals(Stance.PEACE, french.getStance(dutch));
assertEquals(Stance.PEACE, dutch.getStance(french));
}
public void testEuropeanMeetsNative() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
ServerPlayer iroquois = (ServerPlayer) game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(6, 8);
tile1.setExploredBy(dutch, true);
tile1.setExploredBy(iroquois, false);
Tile tile2 = map.getTile(5, 8);
tile2.setExploredBy(dutch, true);
tile2.setExploredBy(iroquois, true);
Tile tile3 = map.getTile(4, 8);
tile3.setExploredBy(dutch, false);
tile3.setExploredBy(iroquois, true);
assertFalse(iroquois.hasContacted(dutch));
assertFalse(dutch.hasContacted(iroquois));
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
colonist.setState(Unit.UnitState.FORTIFYING);
colonist.setState(Unit.UnitState.FORTIFIED);
@SuppressWarnings("unused")
Unit soldier = new ServerUnit(game, tile3, iroquois, braveType);
igc.move(dutch, colonist, tile2);
assertTrue(iroquois.hasContacted(dutch));
assertTrue(dutch.hasContacted(iroquois));
assertEquals(Stance.PEACE, iroquois.getStance(dutch));
assertEquals(Stance.PEACE, dutch.getStance(iroquois));
assertNotNull(iroquois.getTension(dutch));
}
public void testEuropeanMeetsColony() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
ServerPlayer french = (ServerPlayer) game.getPlayer("model.nation.french");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(dutch, true);
tile1.setExploredBy(french, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(dutch, true);
tile2.setExploredBy(french, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(dutch, false);
tile3.setExploredBy(french, true);
assertFalse(french.hasContacted(dutch));
assertFalse(dutch.hasContacted(french));
@SuppressWarnings("unused")
Colony colony = getStandardColony(1, 5, 8);
Unit soldier = new ServerUnit(game, tile3, french, colonistType);
igc.move(french, soldier, tile2);
assertTrue(french.hasContacted(dutch));
assertTrue(dutch.hasContacted(french));
assertEquals(Stance.PEACE, french.getStance(dutch));
assertEquals(Stance.PEACE, dutch.getStance(french));
}
public void testEuropeanMeetsIndianSettlement() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
ServerPlayer iroquois = (ServerPlayer) game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(dutch, true);
tile1.setExploredBy(iroquois, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(dutch, true);
tile2.setExploredBy(iroquois, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(dutch, false);
tile3.setExploredBy(iroquois, true);
assertFalse(iroquois.hasContacted(dutch));
assertFalse(dutch.hasContacted(iroquois));
FreeColTestCase.IndianSettlementBuilder builder = new FreeColTestCase.IndianSettlementBuilder(game);
IndianSettlement settlement = builder.player(iroquois).settlementTile(tile3).skillToTeach(null).build();
Unit colonist = new ServerUnit(game, tile1, dutch, colonistType);
colonist.setState(Unit.UnitState.FORTIFYING);
colonist.setState(Unit.UnitState.FORTIFIED);
igc.move(dutch, colonist, tile2);
assertTrue(iroquois.hasContacted(dutch));
assertTrue(dutch.hasContacted(iroquois));
assertEquals(Stance.PEACE, iroquois.getStance(dutch));
assertEquals(Stance.PEACE, dutch.getStance(iroquois));
assertNotNull(iroquois.getTension(dutch));
assertNotNull(settlement.getAlarm(dutch));
}
public void testNativeMeetsEuropean() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer apache = (ServerPlayer) game.getPlayer("model.nation.apache");
ServerPlayer french = (ServerPlayer) game.getPlayer("model.nation.french");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(apache, true);
tile1.setExploredBy(french, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(apache, true);
tile2.setExploredBy(french, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(apache, false);
tile3.setExploredBy(french, true);
assertFalse(french.hasContacted(apache));
assertFalse(apache.hasContacted(french));
Unit brave = new ServerUnit(game, tile1, apache, braveType);
brave.setState(Unit.UnitState.FORTIFYING);
brave.setState(Unit.UnitState.FORTIFIED);
@SuppressWarnings("unused")
Unit colonist = new ServerUnit(game, tile3, french, colonistType);
igc.move(apache, brave, tile2);
assertTrue(french.hasContacted(apache));
assertTrue(apache.hasContacted(french));
assertEquals(Stance.PEACE, french.getStance(apache));
assertEquals(Stance.PEACE, apache.getStance(french));
}
public void testNativeMeetsNative() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer apache = (ServerPlayer) game.getPlayer("model.nation.apache");
ServerPlayer iroquois = (ServerPlayer) game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(apache, true);
tile1.setExploredBy(iroquois, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(apache, true);
tile2.setExploredBy(iroquois, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(apache, false);
tile3.setExploredBy(iroquois, true);
assertTrue(iroquois.hasContacted(apache));
assertTrue(apache.hasContacted(iroquois));
Unit brave1 = new ServerUnit(game, tile1, apache, braveType);
brave1.setState(Unit.UnitState.FORTIFYING);
brave1.setState(Unit.UnitState.FORTIFIED);
@SuppressWarnings("unused")
Unit brave2 = new ServerUnit(game, tile3, iroquois, braveType);
igc.move(apache, brave1, tile2);
assertTrue(iroquois.hasContacted(apache));
assertTrue(apache.hasContacted(iroquois));
assertEquals(Stance.PEACE, iroquois.getStance(apache));
assertEquals(Stance.PEACE, apache.getStance(iroquois));
}
public void testNativeMeetsColony() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer apache = (ServerPlayer) game.getPlayer("model.nation.apache");
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(apache, false);
tile1.setExploredBy(dutch, true);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(apache, true);
tile2.setExploredBy(dutch, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(apache, true);
tile3.setExploredBy(dutch, false);
assertFalse(dutch.hasContacted(apache));
assertFalse(apache.hasContacted(dutch));
@SuppressWarnings("unused")
Colony colony = getStandardColony(1, 5, 8);
Unit brave = new ServerUnit(game, tile3, apache, braveType);
igc.move(apache, brave, tile2);
assertTrue(dutch.hasContacted(apache));
assertTrue(apache.hasContacted(dutch));
assertEquals(Stance.PEACE, dutch.getStance(apache));
assertEquals(Stance.PEACE, apache.getStance(dutch));
}
public void testNativeMeetsIndianSettlement() throws Exception {
Map map = getTestMap(plains);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer apache = (ServerPlayer) game.getPlayer("model.nation.apache");
ServerPlayer iroquois = (ServerPlayer) game.getPlayer("model.nation.iroquois");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(apache, true);
tile1.setExploredBy(iroquois, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(apache, true);
tile2.setExploredBy(iroquois, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(apache, false);
tile3.setExploredBy(iroquois, true);
assertTrue(iroquois.hasContacted(apache));
assertTrue(apache.hasContacted(iroquois));
// build settlement
FreeColTestCase.IndianSettlementBuilder builder = new FreeColTestCase.IndianSettlementBuilder(game);
builder.player(iroquois).settlementTile(tile3).skillToTeach(null).build();
Unit brave = new ServerUnit(game, tile1, apache, braveType);
brave.setState(Unit.UnitState.FORTIFYING);
brave.setState(Unit.UnitState.FORTIFIED);
igc.move(apache, brave, tile2);
assertTrue(iroquois.hasContacted(apache));
assertTrue(apache.hasContacted(iroquois));
assertEquals(Stance.PEACE, iroquois.getStance(apache));
assertEquals(Stance.PEACE, apache.getStance(iroquois));
}
public void testShipMeetsShip() throws Exception {
Map map = getTestMap(ocean);
Game game = ServerTestHelper.startServerGame(map);
InGameController igc = ServerTestHelper.getInGameController();
ServerPlayer dutch = (ServerPlayer) game.getPlayer("model.nation.dutch");
ServerPlayer french = (ServerPlayer) game.getPlayer("model.nation.french");
Tile tile1 = map.getTile(5, 8);
tile1.setExploredBy(dutch, true);
tile1.setExploredBy(french, false);
Tile tile2 = map.getTile(4, 8);
tile2.setExploredBy(dutch, true);
tile2.setExploredBy(french, true);
Tile tile3 = map.getTile(3, 8);
tile3.setExploredBy(dutch, false);
tile3.setExploredBy(french, true);
assertFalse(french.hasContacted(dutch));
assertFalse(dutch.hasContacted(french));
Unit ship1 = new ServerUnit(game, tile1, dutch, galleonType);
ship1.setState(Unit.UnitState.FORTIFYING);
ship1.setState(Unit.UnitState.FORTIFIED);
@SuppressWarnings("unused")
Unit ship2 = new ServerUnit(game, tile3, french, galleonType);
igc.move(dutch, ship1, tile2);
assertFalse(french.hasContacted(dutch));
assertFalse(dutch.hasContacted(french));
assertEquals(Stance.UNCONTACTED, french.getStance(dutch));
assertEquals(Stance.UNCONTACTED, dutch.getStance(french));
}
}