package games.strategy.triplea.delegate; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Collection; import org.junit.Before; import org.junit.Test; import games.strategy.engine.data.Route; import games.strategy.engine.data.Territory; import games.strategy.engine.data.Unit; import games.strategy.triplea.TripleAUnit; import games.strategy.util.Match; public class MoveValidatorTest extends DelegateTest { @Override @Before public void setUp() throws Exception { super.setUp(); } @Test public void testEnemyUnitsInPath() { // japanese unit in congo final Route bad = new Route(); // the empty case assertTrue(MoveValidator.noEnemyUnitsOnPathMiddleSteps(bad, british, gameData)); bad.add(egypt); bad.add(congo); bad.add(kenya); assertTrue(!MoveValidator.noEnemyUnitsOnPathMiddleSteps(bad, british, gameData)); final Route good = new Route(); good.add(egypt); good.add(kenya); assertTrue(MoveValidator.noEnemyUnitsOnPathMiddleSteps(good, british, gameData)); // at end so should still be good good.add(congo); assertTrue(MoveValidator.noEnemyUnitsOnPathMiddleSteps(good, british, gameData)); } @Test public void testHasUnitsThatCantGoOnWater() { final Collection<Unit> units = new ArrayList<>(); units.addAll(infantry.create(1, british)); units.addAll(armour.create(1, british)); units.addAll(transport.create(1, british)); units.addAll(fighter.create(1, british)); assertTrue(!MoveValidator.hasUnitsThatCantGoOnWater(units)); assertTrue(MoveValidator.hasUnitsThatCantGoOnWater(factory.create(1, british))); } @Test public void testCarrierCapacity() { final Collection<Unit> units = carrier.create(5, british); assertEquals(10, AirMovementValidator.carrierCapacity(units, new Territory("TestTerritory", true, gameData))); } @Test public void testCarrierCost() { final Collection<Unit> units = fighter.create(5, british); assertEquals(5, AirMovementValidator.carrierCost(units)); } @Test public void testGetLeastMovement() { final Collection<Unit> collection = bomber.create(1, british); assertEquals(MoveValidator.getLeastMovement(collection), 6); final Object[] objs = collection.toArray(); ((TripleAUnit) objs[0]).setAlreadyMoved(1); assertEquals(MoveValidator.getLeastMovement(collection), 5); collection.addAll(factory.create(2, british)); assertEquals(MoveValidator.getLeastMovement(collection), 0); } @Test public void testCanLand() { final Collection<Unit> units = fighter.create(4, british); // 2 carriers in red sea assertTrue(AirMovementValidator.canLand(units, redSea, british, gameData)); // britian owns egypt assertTrue(AirMovementValidator.canLand(units, egypt, british, gameData)); // only 2 carriers final Collection<Unit> tooMany = fighter.create(6, british); assertTrue(!AirMovementValidator.canLand(tooMany, redSea, british, gameData)); // nowhere to land assertTrue(!AirMovementValidator.canLand(units, japanSeaZone, british, gameData)); // nuetral assertTrue(!AirMovementValidator.canLand(units, westAfrica, british, gameData)); } @Test public void testCanLandInfantry() { try { final Collection<Unit> units = infantry.create(1, british); AirMovementValidator.canLand(units, redSea, british, gameData); } catch (final IllegalArgumentException e) { return; } fail("No exception thrown"); } @Test public void testCanLandBomber() { final Collection<Unit> units = bomber.create(1, british); assertTrue(!AirMovementValidator.canLand(units, redSea, british, gameData)); } @Test public void testHasSomeLand() { final Collection<Unit> units = transport.create(3, british); assertTrue(!Match.someMatch(units, Matches.UnitIsLand)); units.addAll(infantry.create(2, british)); assertTrue(Match.someMatch(units, Matches.UnitIsLand)); } }