import EnvironmentPluginAPI.Contract.IEnvironment; import EnvironmentPluginAPI.Exceptions.IllegalNumberOfClientsException; import EnvironmentPluginAPI.Exceptions.TechnicalException; import EnvironmentPluginAPI.Service.ICycleStatisticsSaver; import EnvironmentPluginAPI.TransportTypes.TMARLAClientInstance; import EnvironmentPluginAPI.TransportTypes.TMapMetaData; import Factory.GameLogic.Enums.Direction; import Factory.GameLogic.Enums.Faction; import Factory.GameLogic.GameLogicComponent; import Factory.GameLogic.TransportTypes.*; import Factory.GameLogic.Utility.GameInfos; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.UUID; /** * Created with IntelliJ IDEA. * User: TwiG * Date: 27.05.12 * Time: 18:14 * To change this template use File | Settings | File Templates. */ public class GameLogicComponentTest { GameLogicComponent gameLogic20; GameLogicComponent gameLogic21; GameLogicComponent gameLogic6; TMapMetaData mapMetaData20; TMapMetaData mapMetaData21; TMapMetaData mapMetaData6; TMARLAClientInstance TMARLAClientInstance1; TMARLAClientInstance TMARLAClientInstance2; List<TMARLAClientInstance> TMARLAClientInstanceList = new ArrayList<TMARLAClientInstance>(); int roundsToSpawn = 5; ICycleStatisticsSaver statistics = new DummyStatistics(); @Before public void setUp() throws Exception { //null because replay saving is not to be tested gameLogic20 = new GameLogicComponent(statistics); gameLogic21 = new GameLogicComponent(statistics); gameLogic6 = new GameLogicComponent(statistics); mapMetaData6 = new TMapMetaData("SmallestMap", 0, 1, 6, 1, 1, 1); mapMetaData20 = new TMapMetaData("map1", 0, 1, 20, 20, 10, 3); mapMetaData21 = new TMapMetaData("map2", 0, 1, 21, 100, 100, 5); TMARLAClientInstance1 = new TMARLAClientInstance("Peter", Faction.BLUE.ordinal()); TMARLAClientInstance2 = new TMARLAClientInstance("Alberto", Faction.RED.ordinal()); TMARLAClientInstanceList.add(TMARLAClientInstance1); TMARLAClientInstanceList.add(TMARLAClientInstance2); } @After public void tearDown() throws Exception { } @Test public void testWinCondition() throws TechnicalException, IllegalNumberOfClientsException { System.out.println("EXPLANATION:\nFIELDS:\nN = NormalField\nI = InfluenceField\nF = FactoryField\nUNITS:\nB = Unit of the blue faction\nR = Unit of the red faction\n"); TGameState start = (TGameState) gameLogic6.start(TMARLAClientInstanceList, mapMetaData6); print(gameLogic6); TAbstractField[][] board = start.getMapFields(); TUnit unitBlue = board[1][1].getOccupant(); TUnit unitRed = board[4][1].getOccupant(); gameLogic6.moveUnit(unitBlue, Direction.RIGHT); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.moveUnit(unitRed, Direction.UP); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.moveUnit(unitBlue, Direction.RIGHT); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.moveUnit(unitRed, Direction.UP); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.moveUnit(unitBlue, Direction.LEFT); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.moveUnit(unitRed, Direction.RIGHT); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.endTurn(); gameLogic6.moveUnit(unitRed, Direction.UP); gameLogic6.endTurn(); print(gameLogic6); gameLogic6.endTurn(); gameLogic6.endTurn(); gameLogic6.endTurn(); gameLogic6.endTurn(); gameLogic6.endTurn(); gameLogic6.endTurn(); print(gameLogic6); List<TFactory> factories = ((TGameState)gameLogic6.getCurrentEnvironmentState()).getFactories(); assert (gameLogic6.getCurrentEnvironmentState().hasClientMetGoal() == true); assert (((TGameState)gameLogic6.getCurrentEnvironmentState()).getActivePlayer().getFaction() == Faction.RED); } @Test public void testEndGame() throws Exception { /*TGameState start = gameLogic20.start(TMARLAClientInstanceList, mapMetaData20); gameLogic20.endTurn(); gameLogic20.endTurn(); TGameState beforeEndGame = gameLogic20.endTurn(); boolean gameWasActive = gameLogic20.end(); assert (gameWasActive); DummyStatistics myStatistics = (DummyStatistics) statistics; List<AbstractReplay> replays = myStatistics.getReplays(); List<TGameState> gameStateList = replays.get(0).getTransportType().getEnvironmentStatesPerTurn(); assert (gameStateList.get(0).getTurn() == start.getTurn()); assert (gameStateList.get(3).getTurn() == beforeEndGame.getTurn()); assert (gameStateList.size() == 4);*/ //we could test if there was movement recorded, but i assume if the turns go right //and the TestMove is green it cant be wrong } @Test public void testExecuteActions() throws Exception { TGameState before = (TGameState)gameLogic20.start(TMARLAClientInstanceList, mapMetaData20); List<TUnit> units = GameInfos.getUnitsForFaction(before, before.getActivePlayer().getFaction()); List<TAction> actions = new ArrayList<TAction>(); List<TPosition> unitPosition = new ArrayList<TPosition>(); for (TUnit unit : units) { actions.add(new TAction(unit, Direction.UP)); unitPosition.add(GameInfos.getPositionForUnit(before, unit)); } TActionsInTurn actionsInTurn = new TActionsInTurn(actions); TGameState after = (TGameState)gameLogic20.executeAction(actionsInTurn); // TODO: This test seems to be wrong. Executing an action list should not automatically end the turn afterwards. //assert (before.getTurn() + 1 == after.getTurn()); for (int i = 0; i < unitPosition.size(); i++) { UUID newOccupantID = GameInfos.getNeighborFieldForPosition(after, unitPosition.get(i), Direction.UP).getOccupant().getUnitId(); assert (newOccupantID.equals(actions.get(i).getUnit().getUnitId())); } } @Test public void testMoveUnit() throws Exception { TGameState before = (TGameState)gameLogic20.start(TMARLAClientInstanceList, mapMetaData20); List<TUnit> unitList = new ArrayList<TUnit>(); unitList = GameInfos.getUnitsForFaction(before, before.getActivePlayer().getFaction()); TAbstractField[][] board = before.getMapFields(); TUnit testUnit = board[6][7].getOccupant(); gameLogic20.endTurn(); //Should be denied because not your turn gameLogic20.moveUnit(testUnit, Direction.UP); gameLogic20.endTurn(); //Should be denied because moving on friendly unit gameLogic20.moveUnit(testUnit, Direction.DOWN); gameLogic20.moveUnit(testUnit, Direction.UP); //Should be denied because of exhaustion gameLogic20.moveUnit(testUnit, Direction.UP); //Should be denied because of illegal move gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN); System.out.print("Testing Upper Border\n\n"); //move to the upper edge for (int i = 6; i > 0; i--) { gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.UP); } gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.UP_RIGHT); gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.UP_LEFT); System.out.print("Testing Left Border\n\n"); //move into left border for (int i = 8; i > 0; i--) { gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.LEFT); } gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.UP_LEFT); gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN_LEFT); System.out.print("Testing bottom Border\n\n"); //move into bottom border for (int i = 20; i > 0; i--) { gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN); } gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN_LEFT); gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN_RIGHT); System.out.print("Testing right Border\n\n"); //move into bottom border for (int i = 20; i > 0; i--) { gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.RIGHT); } gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.UP_RIGHT); gameLogic20.endTurn(); gameLogic20.endTurn(); gameLogic20.moveUnit(testUnit, Direction.DOWN_RIGHT); } @Test public void testEndTurn() throws Exception { TGameState before = (TGameState)gameLogic20.start(TMARLAClientInstanceList, mapMetaData20); int turnsBeforePlayerBlueWasActive = 0; while(before.getActivePlayer().getFaction() != Faction.BLUE) { gameLogic20.endTurn(); before = (TGameState)gameLogic20.getCurrentEnvironmentState(); turnsBeforePlayerBlueWasActive++; } System.out.println(before.getActivePlayer().getFaction()); System.out.println(before.toString()); List<TUnit> unitList = GameInfos.getUnitsForFaction(before, before.getActivePlayer().getFaction()); for (TUnit unit : unitList) { TPosition positionOfDoom = GameInfos.getPositionForUnit(before, unit); if(positionOfDoom.getX() == 7 && positionOfDoom.getY() == 6) { System.out.println("MOVE!"); gameLogic20.moveUnit(unit, Direction.UP); } } System.out.println(((TGameState)gameLogic20.getCurrentEnvironmentState()).toString()); gameLogic20.endTurn(); unitList = GameInfos.getUnitsForFaction(before, before.getActivePlayer().getFaction()); for (TUnit unit : unitList) { gameLogic20.moveUnit(unit, Direction.LEFT); } TGameState afterTurn1 = (TGameState)gameLogic20.getCurrentEnvironmentState(); assert (!afterTurn1.getMapFields()[6][7].isOccupied()); //Round and Turn Test assert (before.getTurn() + 1 == afterTurn1.getTurn()); gameLogic20.endTurn(); TGameState afterTurn2 = (TGameState)gameLogic20.getCurrentEnvironmentState(); assert (before.getRound() + 1 == afterTurn2.getRound()); //Spawn test TGameState spawn = null; for (int i = 0; i < (roundsToSpawn * 2) - 3 - turnsBeforePlayerBlueWasActive; i++) { gameLogic20.endTurn(); } spawn = (TGameState)gameLogic20.getCurrentEnvironmentState(); System.out.println("turn: " + spawn.getTurn()); System.out.println(spawn.toString()); TAbstractField[][] board = spawn.getMapFields(); assert (!board[6][7].isOccupied()); gameLogic20.endTurn(); spawn = (TGameState)gameLogic20.getCurrentEnvironmentState(); board = spawn.getMapFields(); assert (board[6][7].isOccupied()); } @Test public void testStartGame() throws Exception { gameLogic20.start(TMARLAClientInstanceList, mapMetaData20); TGameState start = (TGameState)gameLogic20.getCurrentEnvironmentState(); /* System.out.println(gameLogic20); System.out.println(start.getActivePlayer()); System.out.println(start.getMapFields()); System.out.println(start.getTurn()); System.out.println(start.getFactories()); System.out.println(start.getGameStartedAt()); System.out.println(start.getRound()); System.out.println(start.getWinningClient()); */ } void print(IEnvironment gameLogic) { System.out.println(gameLogic + "\n"); } }