/**
* 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.EquipmentType;
import net.sf.freecol.common.model.Game;
import net.sf.freecol.common.model.GoodsType;
import net.sf.freecol.common.model.IndianSettlement;
import net.sf.freecol.common.model.Unit;
import net.sf.freecol.server.ServerTestHelper;
import net.sf.freecol.util.test.FreeColTestCase;
public class StandardAIPlayerTest extends FreeColTestCase {
private static final EquipmentType horsesEqType
= spec().getEquipmentType("model.equipment.horses");
private static final EquipmentType musketsEqType
= spec().getEquipmentType("model.equipment.muskets");
private static final EquipmentType indianHorsesEqType
= spec().getEquipmentType("model.equipment.indian.horses");
private static final EquipmentType indianMusketsEqType
= spec().getEquipmentType("model.equipment.indian.muskets");
private static final GoodsType horsesType
= spec().getGoodsType("model.goods.horses");
private static final GoodsType musketsType
= spec().getGoodsType("model.goods.muskets");
@Override
public void tearDown() throws Exception {
ServerTestHelper.stopServerGame();
super.tearDown();
}
public void testEquipBraves() {
Game game = ServerTestHelper.startServerGame(getTestMap());
AIMain aiMain = ServerTestHelper.getServer().getAIMain();
FreeColTestCase.IndianSettlementBuilder builder
= new FreeColTestCase.IndianSettlementBuilder(game);
IndianSettlement camp = builder.initialBravesInCamp(3).build();
NativeAIPlayer player = (NativeAIPlayer) aiMain.getAIPlayer(camp.getOwner());
game.setCurrentPlayer(camp.getOwner());
int bravesToEquip = camp.getUnitCount();
int horsesReqPerUnit = indianHorsesEqType.getAmountRequiredOf(horsesType);
int musketsReqPerUnit = indianMusketsEqType.getAmountRequiredOf(musketsType);
int totalHorsesReq = bravesToEquip * horsesReqPerUnit;
int totalMusketsReq = bravesToEquip * musketsReqPerUnit;
int totalHorsesAvail = totalHorsesReq*2;
int totalMusketsAvail = totalMusketsReq*2;
// Verify initial conditions
assertEquals("No horses should exist in camp", 0,
camp.getGoodsCount(horsesType));
assertEquals("No muskets should exist in camp", 0,
camp.getGoodsCount(musketsType));
for (Unit unit : camp.getUnitList()) {
if (unit.isMounted()) fail("Indian should not have mounted braves");
if (unit.isArmed()) fail("Indian should not have armed braves");
}
// Setup
camp.addGoods(horsesType, totalHorsesAvail);
camp.addGoods(musketsType, totalMusketsAvail);
assertEquals("Wrong initial number of horses in Indian camp",
totalHorsesAvail, camp.getGoodsCount(horsesType));
assertEquals("Wrong initial number of muskets in Indian camp",
totalMusketsAvail, camp.getGoodsCount(musketsType));
// Exercise SUT
player.equipBraves(camp);
// Verify results
int mounted = 0;
int armed = 0;
for (Unit unit : camp.getUnitList()) {
if (unit.isMounted()) mounted++;
if (unit.isArmed()) armed++;
}
assertEquals("Wrong number of units armed", bravesToEquip, armed);
assertEquals("Wrong number of units mounted", bravesToEquip, mounted);
assertEquals("Wrong final number of muskets in Indian camp",
totalMusketsReq, camp.getGoodsCount(musketsType));
assertEquals("Wrong final number of horses in Indian camp",
totalHorsesReq, camp.getGoodsCount(horsesType));
}
public void testEquipBravesNotEnoughReqGoods() {
Game game = ServerTestHelper.startServerGame(getTestMap());
AIMain aiMain = ServerTestHelper.getServer().getAIMain();
FreeColTestCase.IndianSettlementBuilder builder
= new FreeColTestCase.IndianSettlementBuilder(game);
IndianSettlement camp = builder.initialBravesInCamp(3).build();
NativeAIPlayer player = (NativeAIPlayer) aiMain.getAIPlayer(camp.getOwner());
game.setCurrentPlayer(camp.getOwner());
int bravesToEquip = camp.getUnitCount() - 1;
int horsesReqPerUnit = indianHorsesEqType.getAmountRequiredOf(horsesType);
int musketsReqPerUnit = indianMusketsEqType.getAmountRequiredOf(musketsType);
int totalHorsesAvail = bravesToEquip * horsesReqPerUnit
+ horsesType.getBreedingNumber();
int totalMusketsAvail = bravesToEquip * musketsReqPerUnit;
// Verify initial conditions
assertEquals("No horses should exist in camp", 0,
camp.getGoodsCount(horsesType));
assertEquals("No muskets should exist in camp", 0,
camp.getGoodsCount(musketsType));
for (Unit unit : camp.getUnitList()) {
if (unit.isMounted()) {
fail("Indian should not have mounted braves");
}
if (unit.isArmed()) {
fail("Indian should not have armed braves");
}
}
// Setup
camp.addGoods(horsesType, totalHorsesAvail);
camp.addGoods(musketsType, totalMusketsAvail);
assertEquals("Wrong initial number of horses in Indian camp",
totalHorsesAvail, camp.getGoodsCount(horsesType));
assertEquals("Wrong initial number of muskets in Indian camp",
totalMusketsAvail, camp.getGoodsCount(musketsType));
// Exercise SUT
player.equipBraves(camp);
// Verify results
int mounted = 0;
int armed = 0;
for (Unit unit : camp.getUnitList()) {
if (unit.isMounted()) mounted++;
if (unit.isArmed()) armed++;
}
assertEquals("Wrong number of units armed", bravesToEquip, armed);
assertEquals("Wrong number of units mounted", bravesToEquip, mounted);
assertEquals("Wrong final number of muskets in Indian camp",
0, camp.getGoodsCount(musketsType));
assertEquals("Wrong final number of horses in Indian camp",
horsesType.getBreedingNumber(), camp.getGoodsCount(horsesType));
}
}