package ch.zhaw.pm2.racetrack; import ch.zhaw.pm2.racetrack.strategy.UserMoveStrategy; import org.junit.jupiter.api.*; import java.io.File; import static ch.zhaw.pm2.racetrack.Game.NO_WINNER; class GameTest { private UserInterface userInterface; private Game game; private Track track; @Nested @DisplayName("Test correct Setup") class Setup { @BeforeEach void setup() { userInterface = new UserInterface("Test"); game = new Game(userInterface); track = game.selectTrack(new File(".\\tracks\\challenge.txt")); game.selectMoveStrategy(track.getCar(0),new UserMoveStrategy(new UserInterface("Testing"),0, track.getCarId(0))); game.selectMoveStrategy(track.getCar(1),new UserMoveStrategy(new UserInterface("Testing"),1, track.getCarId(1))); } @Test void getCurrentCarIndex() { Assertions.assertEquals(0,game.getCurrentCarIndex()); game.switchToNextActiveCar(); Assertions.assertEquals(1,game.getCurrentCarIndex()); } @Test void getCarId() { Assertions.assertEquals('a',game.getCarId(0)); Assertions.assertEquals('b',game.getCarId(1)); } @Test void getCarPosition() { Assertions.assertEquals(new PositionVector(24,22),game.getCarPosition(0)); Assertions.assertEquals(new PositionVector(24,24),game.getCarPosition(1)); } @Test void getCarVelocity() { Assertions.assertEquals(new PositionVector(0,0),game.getCarVelocity(0)); Assertions.assertEquals(new PositionVector(0,0),game.getCarVelocity(1)); } @Test void getWinner() { Assertions.assertEquals(NO_WINNER,game.getWinner()); } @Test void onlyOneCarLeft() { Assertions.assertFalse(game.onlyOneCarLeft()); } @Test void carsMoving() { Assertions.assertTrue(game.carsMoving()); } } @Nested @DisplayName("Basic manipulation") class manipulation { @BeforeEach void setup() { userInterface = new UserInterface("Test"); game = new Game(userInterface); track = game.selectTrack(new File(".\\tracks\\challenge.txt")); game.selectMoveStrategy(track.getCar(0),new UserMoveStrategy(new UserInterface("Testing"),0, track.getCarId(0))); game.selectMoveStrategy(track.getCar(1),new UserMoveStrategy(new UserInterface("Testing"),1, track.getCarId(1))); } @Test void carTurnCorrect() { try { game.doCarTurn(PositionVector.Direction.RIGHT); Assertions.assertEquals(new PositionVector(1,0),game.getCarVelocity(0)); } catch (PositionVectorNotValid positionVectorNotValid) { positionVectorNotValid.printStackTrace(); } } @Test void carCrash() { try { game.doCarTurn(PositionVector.Direction.UP); Assertions.assertTrue(game.onlyOneCarLeft()); } catch (PositionVectorNotValid positionVectorNotValid) { positionVectorNotValid.printStackTrace(); } } } }