/** * 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.Game; import net.sf.freecol.common.model.IndianSettlement; import net.sf.freecol.common.model.Map; import net.sf.freecol.common.model.Player; import net.sf.freecol.common.model.Player.Stance; import net.sf.freecol.common.model.Tension; 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.common.networking.NetworkConstants; 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 TensionTest extends FreeColTestCase { private static final TileType plainsType = spec().getTileType("model.tile.plains"); @Override public void tearDown() throws Exception { ServerTestHelper.stopServerGame(); super.tearDown(); } public void testTension() { Map map = getTestMap(plainsType); Game game = ServerTestHelper.startServerGame(map); InGameController igc = ServerTestHelper.getInGameController(); AIMain aiMain = ServerTestHelper.getServer().getAIMain(); ServerPlayer european = (ServerPlayer) game.getPlayer("model.nation.dutch"); ServerPlayer indian = (ServerPlayer) game.getPlayer("model.nation.tupi"); NativeAIPlayer indianAI = (NativeAIPlayer)aiMain.getAIPlayer(indian); // initially, the players are unknown to each other Tension tension = indian.getTension(european); Stance stance = indian.getStance(european); assertTrue(tension != null && tension.getValue() == 0); assertEquals(Stance.UNCONTACTED, stance); assertFalse(indian.hasContacted(european)); // create an Indian settlement Tile tile = map.getTile(6, 9); FreeColTestCase.IndianSettlementBuilder builder = new FreeColTestCase.IndianSettlementBuilder(game); IndianSettlement settlement = builder.player(indian).settlementTile(tile).skillToTeach(null).capital(true).build(); int unitCount = settlement.getType().getMaximumSize(); for (int i = 0; i < unitCount; i++) { UnitType unitType = spec().getUnitType("model.unit.brave"); Unit unit = new ServerUnit(game, settlement, indian, unitType); unit.setIndianSettlement(settlement); if (i == 0) { unit.setLocation(tile); } else { unit.setLocation(settlement); } } Player.makeContact(indian, european); tension = indian.getTension(european); stance = indian.getStance(european); assertNotNull(tension); assertEquals(Stance.PEACE, stance); // create 2 unarmed european units next to the indianSettlement Tile tile2 = map.getTile(6,8); UnitType unitType = spec().getUnitType("model.unit.hardyPioneer"); Unit unit1 = new ServerUnit(game, tile2, european, unitType); @SuppressWarnings("unused") Unit unit2 = new ServerUnit(game, map.getTile(5, 9), european, unitType); // the european player steals 1 tile from the indians assertEquals(indian, tile2.getOwner()); igc.claimLand(european, tile2, null, NetworkConstants.STEAL_LAND); assertEquals(european, tile2.getOwner()); // check the tension and stance have expected values tension = indian.getTension(european); stance = indian.getStance(european); assertNotNull(tension); assertEquals(Tension.TENSION_ADD_LAND_TAKEN, tension.getValue()); assertEquals(Stance.PEACE, stance); // ask the AI to secure the settlement indianAI.secureIndianSettlement(settlement); // the tension and stance have not changed tension = indian.getTension(european); stance = indian.getStance(european); assertNotNull(tension); assertEquals(Tension.TENSION_ADD_LAND_TAKEN, tension.getValue()); assertEquals(Stance.PEACE, stance); } }