package snakes; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import ch.unibe.jexample.JExample; import ch.unibe.jexample.Given; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JExample.class) public class SimpleGameTest { private Player jack; private Player jill; @Test public Game newGame() { jack = new Player("Jack"); jill = new Player("Jill"); Player[] args = { jack, jill }; Game game = new Game(12, args); game.setSquareToLadder(2, 4); game.setSquareToLadder(7, 2); game.setSquareToSnake(11, -6); assertTrue(game.notOver()); assertTrue(game.firstSquare().isOccupied()); assertEquals(1, jack.position()); assertEquals(1, jill.position()); assertEquals(jack, game.currentPlayer()); return game; } @Given("newGame") public Game initialStrings(Game game) { assertEquals("Jack", jack.toString()); assertEquals("Jill", jill.toString()); assertEquals("[1<Jack><Jill>]", game.firstSquare().toString()); assertEquals("[2->6]", game.getSquare(2).toString()); assertEquals("[5<-11]", game.getSquare(11).toString()); assertEquals("[1<Jack><Jill>][2->6][3][4][5][6][7->9][8][9][10][5<-11][12]", game.toString()); return game; } @Given("newGame") public Game move1jack(Game game) { game.movePlayer(4); assertTrue(game.notOver()); assertEquals(5, jack.position()); assertEquals(1, jill.position()); assertEquals(jill, game.currentPlayer()); return game; } @Given("move1jack") public Game move1strings(Game game) { assertEquals("[1<Jill>]", game.firstSquare().toString()); assertEquals("[5<Jack>]", game.getSquare(5).toString()); return game; } @Given("move1jack") public Game move2jackBackwards(Game game) { jack.moveForward(7+11); // move to end and back to start assertEquals(1, jack.position()); assertEquals("[1<Jill><Jack>]", game.firstSquare().toString()); return game; } @Given("move1jack") public Game move2jillLadder(Game game) { game.movePlayer(1); assertTrue(game.notOver()); assertEquals(5, jack.position()); assertEquals(6, jill.position()); assertEquals(jack, game.currentPlayer()); return game; } @Given("move2jillLadder") public Game move3jackMeetsJill(Game game) { assertTrue(game.getSquare(5).isOccupied()); game.movePlayer(1); assertTrue(!game.getSquare(5).isOccupied()); assertTrue(game.notOver()); assertEquals(1, jack.position()); assertEquals(6, jill.position()); assertEquals(jill, game.currentPlayer()); return game; } @Given("move3jackMeetsJill") public Game move4jillSnake(Game game) { game.movePlayer(5); assertTrue(game.notOver()); assertEquals(1, jack.position()); assertEquals(5, jill.position()); assertEquals(jack, game.currentPlayer()); return game; } @Given("move4jillSnake") public Game move5jackLadder(Game game) { game.movePlayer(6); assertTrue(game.notOver()); assertEquals(9, jack.position()); assertEquals(5, jill.position()); assertEquals(jill, game.currentPlayer()); return game; } @Given("move5jackLadder") public Game move6jill(Game game) { game.movePlayer(5); assertTrue(game.notOver()); assertEquals(9, jack.position()); assertEquals(10, jill.position()); assertEquals(jack, game.currentPlayer()); return game; } @Given("move6jill") public Game move7jackBouncesBackToJill(Game game) { game.movePlayer(5); assertTrue(game.notOver()); assertEquals(1, jack.position()); assertEquals(10, jill.position()); assertEquals(jill, game.currentPlayer()); return game; } @Given("move7jackBouncesBackToJill") public Game move8jillWins(Game game) { game.movePlayer(2); assertTrue(game.isOver()); assertEquals(1, jack.position()); assertEquals(12, jill.position()); assertEquals(jack, game.currentPlayer()); assertEquals(jill, game.winner()); return game; } }