use of games.strategy.engine.data.ITestDelegateBridge in project triplea by triplea-game.
the class RevisedTest method testUnloadMultipleTerritories.
@Test
public void testUnloadMultipleTerritories() {
// in revised a transport may only unload to 1 territory.
final Territory sz5 = gameData.getMap().getTerritory("5 Sea Zone");
final Territory eastEurope = gameData.getMap().getTerritory("Eastern Europe");
final UnitType infantryType = GameDataTestUtil.infantry(gameData);
final PlayerID germans = GameDataTestUtil.germans(gameData);
final MoveDelegate moveDelegate = (MoveDelegate) gameData.getDelegateList().getDelegate("move");
final ITestDelegateBridge bridge = getDelegateBridge(germans);
bridge.setStepName("CombatMove");
moveDelegate.setDelegateBridgeAndPlayer(bridge);
moveDelegate.start();
final Route eeToSz5 = new Route();
eeToSz5.setStart(eastEurope);
eeToSz5.add(sz5);
// load the transport in the baltic
final List<Unit> infantry = eastEurope.getUnits().getMatches(Matches.unitIsOfType(infantryType));
assertEquals(2, infantry.size());
final TripleAUnit transport = (TripleAUnit) sz5.getUnits().getMatches(Matches.unitIsTransport()).get(0);
String error = moveDelegate.move(infantry, eeToSz5, Collections.singletonList(transport));
assertNull(error, error);
// unload one infantry to Norway
final Territory norway = gameData.getMap().getTerritory("Norway");
final Route sz5ToNorway = new Route();
sz5ToNorway.setStart(sz5);
sz5ToNorway.add(norway);
error = moveDelegate.move(infantry.subList(0, 1), sz5ToNorway);
assertNull(error, error);
// make sure the transport was unloaded
assertTrue(moveDelegate.getMovesMade().get(1).wasTransportUnloaded(transport));
// try to unload the other infantry somewhere else, an error occurs
final Route sz5ToEastEurope = new Route();
sz5ToEastEurope.setStart(sz5);
sz5ToEastEurope.add(eastEurope);
error = moveDelegate.move(infantry.subList(1, 2), sz5ToEastEurope);
assertNotNull(error, error);
assertTrue(error.startsWith(MoveValidator.TRANSPORT_HAS_ALREADY_UNLOADED_UNITS_TO));
// end the round
moveDelegate.end();
bridge.setStepName("NonCombatMove");
moveDelegate.setDelegateBridgeAndPlayer(bridge);
moveDelegate.start();
moveDelegate.end();
bridge.setStepName("CombatMove");
moveDelegate.setDelegateBridgeAndPlayer(bridge);
moveDelegate.start();
// a new round, the move should work
moveDelegate.setDelegateBridgeAndPlayer(bridge);
moveDelegate.start();
error = moveDelegate.move(infantry.subList(1, 2), sz5ToEastEurope);
assertNull(error);
}
use of games.strategy.engine.data.ITestDelegateBridge in project triplea by triplea-game.
the class WW2V3Year41Test method testFactoryPlace.
@Test
public void testFactoryPlace() {
// Set up game
final PlayerID british = GameDataTestUtil.british(gameData);
final ITestDelegateBridge delegateBridge = getDelegateBridge(british(gameData));
// Set up the territories
final Territory egypt = territory("Union of South Africa", gameData);
// Set up the unit types
final UnitType factoryType = GameDataTestUtil.factory(gameData);
// Set up the move delegate
final PlaceDelegate placeDelegate = placeDelegate(gameData);
delegateBridge.setStepName("Place");
delegateBridge.setPlayerId(british);
placeDelegate.setDelegateBridgeAndPlayer(delegateBridge);
placeDelegate.start();
// Add the factory
final IntegerMap<UnitType> map = new IntegerMap<>();
map.add(factoryType, 1);
addTo(british(gameData), factory(gameData).create(1, british(gameData)), gameData);
// Place the factory
final String response = placeDelegate.placeUnits(GameDataTestUtil.getUnits(map, british), egypt);
assertValid(response);
// placeUnits performPlace
// get production and unit production values
final TerritoryAttachment ta = TerritoryAttachment.get(egypt);
assertEquals(ta.getUnitProduction(), ta.getProduction());
}
use of games.strategy.engine.data.ITestDelegateBridge in project triplea by triplea-game.
the class WW2V3Year41Test method testAttackUndoAndAttackAgain.
@Test
public void testAttackUndoAndAttackAgain() {
final MoveDelegate move = moveDelegate(gameData);
final ITestDelegateBridge bridge = getDelegateBridge(italians(gameData));
bridge.setStepName("CombatMove");
move.setDelegateBridgeAndPlayer(bridge);
move.start();
final Territory sz14 = territory("14 Sea Zone", gameData);
final Territory sz13 = territory("13 Sea Zone", gameData);
final Territory sz12 = territory("12 Sea Zone", gameData);
final Route r = new Route(sz14, sz13, sz12);
// move the battleship
move(sz14.getUnits().getMatches(Matches.unitHasMoreThanOneHitPointTotal()), r);
// move everything
move(sz14.getUnits().getMatches(Matches.unitIsNotTransport()), r);
// undo it
move.undoMove(1);
// move again
move(sz14.getUnits().getMatches(Matches.unitIsNotTransport()), r);
final MustFightBattle mfb = (MustFightBattle) AbstractMoveDelegate.getBattleTracker(gameData).getPendingBattle(sz12, false, null);
// only 3 attacking units
// the battleship and the two cruisers
assertEquals(3, mfb.getAttackingUnits().size());
}
use of games.strategy.engine.data.ITestDelegateBridge in project triplea by triplea-game.
the class WW2V3Year41Test method testAaCasualtiesLowLuckMixedWithRollingMissRadar.
@Test
public void testAaCasualtiesLowLuckMixedWithRollingMissRadar() {
// moved from BattleCalculatorTest because "revised" does not have "radar"
final PlayerID british = GameDataTestUtil.british(gameData);
final ITestDelegateBridge bridge = getDelegateBridge(british);
makeGameLowLuck(gameData);
// setSelectAACasualties(data, false);
givePlayerRadar(germans(gameData));
// 4 bombers and 4 fighters
final Collection<Unit> planes = bomber(gameData).create(4, british(gameData));
planes.addAll(fighter(gameData).create(4, british(gameData)));
final Collection<Unit> defendingAa = territory("Germany", gameData).getUnits().getMatches(Matches.unitIsAaForAnything());
// 1 roll, a miss
// then a dice to select the casualty
final ScriptedRandomSource randomSource = new ScriptedRandomSource(new int[] { 5, 0, 0, 0, ScriptedRandomSource.ERROR });
bridge.setRandomSource(randomSource);
final DiceRoll roll = DiceRoll.rollAa(CollectionUtils.getMatches(planes, Matches.unitIsOfTypes(UnitAttachment.get(defendingAa.iterator().next().getType()).getTargetsAa(gameData))), defendingAa, bridge, territory("Germany", gameData), true);
assertEquals(2, roll.getHits());
// make sure we rolled once
assertEquals(1, randomSource.getTotalRolled());
final Collection<Unit> casualties = BattleCalculator.getAaCasualties(false, planes, planes, defendingAa, defendingAa, roll, bridge, null, null, null, territory("Germany", gameData), null, false, null).getKilled();
assertEquals(2, casualties.size());
assertEquals(4, randomSource.getTotalRolled());
// should be 1 fighter and 2 bombers
assertEquals(1, CollectionUtils.countMatches(casualties, Matches.unitIsStrategicBomber()));
assertEquals(1, CollectionUtils.countMatches(casualties, Matches.unitIsStrategicBomber().negate()));
}
use of games.strategy.engine.data.ITestDelegateBridge in project triplea by triplea-game.
the class WW2V3Year41Test method testAmphAttackUndoAndAttackAgainBombard.
@Test
public void testAmphAttackUndoAndAttackAgainBombard() {
final MoveDelegate move = moveDelegate(gameData);
final ITestDelegateBridge bridge = getDelegateBridge(italians(gameData));
when(dummyPlayer.selectShoreBombard(any())).thenReturn(true);
bridge.setRemote(dummyPlayer);
bridge.setStepName("CombatMove");
move.setDelegateBridgeAndPlayer(bridge);
move.start();
final Territory sz14 = territory("14 Sea Zone", gameData);
final Territory sz15 = territory("15 Sea Zone", gameData);
final Territory eg = territory("Egypt", gameData);
final Territory li = territory("Libya", gameData);
final Territory balkans = territory("Balkans", gameData);
// load the transports
load(balkans.getUnits().getMatches(Matches.unitIsLandTransportable()), new Route(balkans, sz14));
// move the fleet
move(sz14.getUnits().getUnits(), new Route(sz14, sz15));
// move troops from Libya
move(li.getUnits().getMatches(Matches.unitOwnedBy(italians(gameData))), new Route(li, eg));
// unload the transports
move(sz15.getUnits().getMatches(Matches.unitIsLand()), new Route(sz15, eg));
// undo amphibious landing
move.undoMove(move.getMovesMade().size() - 1);
// move again
move(sz15.getUnits().getMatches(Matches.unitIsLand()), new Route(sz15, eg));
move.end();
// start the battle phase, this will ask the user to bombard
battleDelegate(gameData).setDelegateBridgeAndPlayer(bridge);
BattleDelegate.doInitialize(battleDelegate(gameData).getBattleTracker(), bridge);
battleDelegate(gameData).addBombardmentSources();
final MustFightBattle mfb = (MustFightBattle) AbstractMoveDelegate.getBattleTracker(gameData).getPendingBattle(eg, false, null);
// only 2 battleships are allowed to bombard
assertEquals(2, mfb.getBombardingUnits().size());
}
Aggregations