package games.strategy.triplea.delegate; import static org.mockito.Mockito.mock; import java.util.Collection; import java.util.List; import org.junit.Assert; import games.strategy.engine.data.GameData; import games.strategy.engine.data.ITestDelegateBridge; import games.strategy.engine.data.PlayerID; import games.strategy.engine.data.Route; import games.strategy.engine.data.Territory; import games.strategy.engine.data.TestDelegateBridge; import games.strategy.engine.data.Unit; import games.strategy.engine.data.UnitType; import games.strategy.engine.data.changefactory.ChangeFactory; import games.strategy.engine.data.properties.BooleanProperty; import games.strategy.engine.data.properties.IEditableProperty; import games.strategy.triplea.Constants; import games.strategy.triplea.attachments.TechAttachment; import games.strategy.triplea.ui.display.ITripleADisplay; import junit.framework.AssertionFailedError; public class GameDataTestUtil { public static PlayerID germans(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_GERMANS); } public static PlayerID italians(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_ITALIANS); } public static PlayerID russians(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_RUSSIANS); } public static PlayerID americans(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_AMERICANS); } public static PlayerID british(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_BRITISH); } public static PlayerID japanese(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_JAPANESE); } public static PlayerID chinese(final GameData data) { return data.getPlayerList().getPlayerID(Constants.PLAYER_NAME_CHINESE); } public static Territory territory(final String name, final GameData data) { final Territory t = data.getMap().getTerritory(name); if (t == null) { throw new IllegalStateException("no territory:" + name); } return t; } public static UnitType armour(final GameData data) { return unitType(Constants.UNIT_TYPE_ARMOUR, data); } public static UnitType aaGun(final GameData data) { return unitType(Constants.UNIT_TYPE_AAGUN, data); } public static UnitType transport(final GameData data) { return unitType(Constants.UNIT_TYPE_TRANSPORT, data); } public static UnitType battleship(final GameData data) { return unitType(Constants.UNIT_TYPE_BATTLESHIP, data); } public static UnitType carrier(final GameData data) { return unitType(Constants.UNIT_TYPE_CARRIER, data); } // Some units hard coded here rather than placed in Constants at the request of community members Ref: Pull Request // 1074 public static UnitType tacBomber(final GameData data) { return unitType("tactical_bomber", data); } public static UnitType airbase(final GameData data) { return unitType("airbase", data); } public static UnitType harbour(final GameData data) { return unitType("harbour", data); } public static UnitType factoryMajor(final GameData data) { return unitType("factory_major", data); } public static UnitType factoryMinor(final GameData data) { return unitType("factory_minor", data); } public static UnitType fighter(final GameData data) { return unitType(Constants.UNIT_TYPE_FIGHTER, data); } public static UnitType destroyer(final GameData data) { return unitType(Constants.UNIT_TYPE_DESTROYER, data); } public static UnitType submarine(final GameData data) { return unitType(Constants.UNIT_TYPE_SUBMARINE, data); } public static UnitType infantry(final GameData data) { return unitType(Constants.UNIT_TYPE_INFANTRY, data); } public static UnitType bomber(final GameData data) { return unitType(Constants.UNIT_TYPE_BOMBER, data); } public static UnitType factory(final GameData data) { return unitType(Constants.UNIT_TYPE_FACTORY, data); } private static UnitType unitType(final String name, final GameData data) { return data.getUnitTypeList().getUnitType(name); } public static void removeFrom(final Territory t, final Collection<Unit> units) { t.getData().performChange(ChangeFactory.removeUnits(t, units)); } public static void addTo(final Territory t, final Collection<Unit> units) { t.getData().performChange(ChangeFactory.addUnits(t, units)); } public static void addTo(final PlayerID t, final Collection<Unit> units, final GameData data) { data.performChange(ChangeFactory.addUnits(t, units)); } public static PlaceDelegate placeDelegate(final GameData data) { return (PlaceDelegate) data.getDelegateList().getDelegate("place"); } public static BattleDelegate battleDelegate(final GameData data) { return (BattleDelegate) data.getDelegateList().getDelegate("battle"); } public static MoveDelegate moveDelegate(final GameData data) { return (MoveDelegate) data.getDelegateList().getDelegate("move"); } public static TechnologyDelegate techDelegate(final GameData data) { return (TechnologyDelegate) data.getDelegateList().getDelegate("tech"); } public static PurchaseDelegate purchaseDelegate(final GameData data) { return (PurchaseDelegate) data.getDelegateList().getDelegate("purchase"); } public static BidPlaceDelegate bidPlaceDelegate(final GameData data) { return (BidPlaceDelegate) data.getDelegateList().getDelegate("placeBid"); } public static ITestDelegateBridge getDelegateBridge(final PlayerID player, final GameData data) { return new TestDelegateBridge(data, player, mock(ITripleADisplay.class)); } public static void load(final Collection<Unit> units, final Route route) { if (units.isEmpty()) { throw new AssertionFailedError("No units"); } final MoveDelegate moveDelegate = moveDelegate(route.getStart().getData()); final Collection<Unit> transports = route.getEnd().getUnits().getMatches(Matches.unitIsOwnedBy(units.iterator().next().getOwner())); final String error = moveDelegate.move(units, route, transports); if (error != null) { throw new AssertionFailedError("Illegal move:" + error); } } public static void move(final Collection<Unit> units, final Route route) { if (units.isEmpty()) { throw new AssertionFailedError("No units"); } final String error = moveDelegate(route.getStart().getData()).move(units, route); if (error != null) { throw new AssertionFailedError("Illegal move:" + error); } } public static void assertMoveError(final Collection<Unit> units, final Route route) { if (units.isEmpty()) { throw new AssertionFailedError("No units"); } final String error = moveDelegate(route.getStart().getData()).move(units, route); if (error == null) { throw new AssertionFailedError("Should not be Legal move"); } } public static int getIndex(final List<IExecutable> steps, final Class<?> type) { int indexOfType = -1; int index = 0; for (final IExecutable e : steps) { if (type.isInstance(e)) { if (indexOfType != -1) { throw new AssertionFailedError("More than one instance:" + steps); } indexOfType = index; } index++; } if (indexOfType == -1) { throw new AssertionFailedError("No instance:" + steps); } return indexOfType; } public static void setSelectAACasualties(final GameData data, final boolean val) { for (final IEditableProperty property : data.getProperties().getEditableProperties()) { if (property.getName().equals(Constants.CHOOSE_AA)) { ((BooleanProperty) property).setValue(val); return; } } throw new IllegalStateException(); } public static void makeGameLowLuck(final GameData data) { for (final IEditableProperty property : data.getProperties().getEditableProperties()) { if (property.getName().equals(Constants.LOW_LUCK)) { ((BooleanProperty) property).setValue(true); return; } } throw new IllegalStateException(); } public static void givePlayerRadar(final PlayerID player) { TechAttachment.get(player).setAARadar(Boolean.TRUE.toString()); } public static void assertValid(final String string) { Assert.assertNull(string, string); } public static void assertError(final String string) { Assert.assertNotNull(string, string); } }