From 0f4370cee071ada7bf1974a3ae2eeb14c4d00aab Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Tue, 22 Jun 2021 17:28:10 +0200 Subject: refactor(domain tests) <- reorganising --- .../mancala/domain/DomainSmallBowlException.java | 7 + .../src/main/java/mancala/domain/MancalaImpl.java | 6 +- domain/src/main/java/mancala/domain/SmallBowl.java | 11 +- domain/src/test/java/mancala/domain/BowlTest.java | 439 +++++++++++---------- 4 files changed, 245 insertions(+), 218 deletions(-) create mode 100644 domain/src/main/java/mancala/domain/DomainSmallBowlException.java diff --git a/domain/src/main/java/mancala/domain/DomainSmallBowlException.java b/domain/src/main/java/mancala/domain/DomainSmallBowlException.java new file mode 100644 index 0000000..56e5de1 --- /dev/null +++ b/domain/src/main/java/mancala/domain/DomainSmallBowlException.java @@ -0,0 +1,7 @@ +package mancala.domain; + +public class DomainSmallBowlException extends Exception { + public DomainSmallBowlException(String message) { + super(message); + } +} diff --git a/domain/src/main/java/mancala/domain/MancalaImpl.java b/domain/src/main/java/mancala/domain/MancalaImpl.java index 29048ff..a8e6691 100644 --- a/domain/src/main/java/mancala/domain/MancalaImpl.java +++ b/domain/src/main/java/mancala/domain/MancalaImpl.java @@ -18,7 +18,11 @@ public class MancalaImpl implements Mancala { private SmallBowl domainReference; public MancalaImpl() { - domainReference = new SmallBowl(); + try { + domainReference = new SmallBowl(); + } catch (DomainSmallBowlException e) { + e.printStackTrace(); + } domainPlayer = domainReference.getMyOwner(); domainOpponent = domainPlayer.getOpponent(); } diff --git a/domain/src/main/java/mancala/domain/SmallBowl.java b/domain/src/main/java/mancala/domain/SmallBowl.java index 07fa1e0..b9e4b45 100644 --- a/domain/src/main/java/mancala/domain/SmallBowl.java +++ b/domain/src/main/java/mancala/domain/SmallBowl.java @@ -6,13 +6,14 @@ import java.util.stream.Collectors; public class SmallBowl extends Bowl { - public SmallBowl() { - this( - Arrays.stream(new int[] {4,4,4,4,4,4,0,4,4,4,4,4,4,0}).boxed().collect(Collectors.toList()) - ); + public SmallBowl() throws DomainSmallBowlException { + this(Arrays.stream(new int[] {4,4,4,4,4,4,0,4,4,4,4,4,4,0}).boxed().collect(Collectors.toList())); } - public SmallBowl(List stonesList) { + public SmallBowl(List stonesList) throws DomainSmallBowlException { + if (stonesList.size() % 2 != 0) { + throw new DomainSmallBowlException("Stones List should contain even number of elements."); + } this.myOwner = new Player(); int boardSize = stonesList.size(); diff --git a/domain/src/test/java/mancala/domain/BowlTest.java b/domain/src/test/java/mancala/domain/BowlTest.java index 7e1ec01..cd9f405 100644 --- a/domain/src/test/java/mancala/domain/BowlTest.java +++ b/domain/src/test/java/mancala/domain/BowlTest.java @@ -49,7 +49,15 @@ class BowlTest { assertSame(initialBowl, currentBowl); } - SmallBowl referenceSmallBowl = new SmallBowl(); + SmallBowl referenceSmallBowl; + + { + try { + referenceSmallBowl = new SmallBowl(); + } catch (DomainSmallBowlException e) { + e.printStackTrace(); + } + } @Test public void default_stones_amount_check() { @@ -83,214 +91,9 @@ class BowlTest { } } - @Nested - class and_the_game_is_in_a_state_where { - - @Test - public void its_not_the_players_turn_when_play_is_called_then_nothing_happens() { - referenceSmallBowl.getMyOwner().switchTurn(); - int initialRocks = referenceSmallBowl.getMyStones(); - referenceSmallBowl.play(); - Bowl neighbour = referenceSmallBowl.getNextBowl(); - for (int i = 0; i < initialRocks; i++) { - assertEquals(4, neighbour.getMyStones()); - neighbour = neighbour.getNextBowl(); - } - assertEquals(4, neighbour.getMyStones()); - } - - @Test - public void the_bowl_is_empty_WHEN_the_player_plays_the_empty_bowl_THEN_nothing_happens() { - referenceSmallBowl.play(); - referenceSmallBowl.getMyOwner().switchTurn(); - assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); - referenceSmallBowl.play(); - assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); - assertEquals(5, referenceSmallBowl.getNextBowl().getMyStones()); - } - - @Test - public void all_small_bowls_of_the_player_are_empty_WHEN_a_play_ends_THEN_tell_players_who_won() { - Player player = referenceSmallBowl.getMyOwner(); - Player opponent = referenceSmallBowl.getNextSmallBowlTimes(6).getMyOwner(); - assertFalse(player.won()); - assertFalse(opponent.won()); - goToEndOfSillyGame(); - assertTrue(player.won()); - assertFalse(opponent.won()); - - } - - @Test - public void all_small_bowls_of_the_player_are_empty_WHEN_a_play_ends_THEN_tell_players_who_wonOPPONENTVARIATION() { - Player player = referenceSmallBowl.getMyOwner(); - Player opponent = referenceSmallBowl.getNextSmallBowlTimes(6).getMyOwner(); - goToEndOfGameWhereOpponentWins(); - assertFalse(player.won()); - assertTrue(opponent.won()); - } - - @Test - public void the_play_would_skip_past_opponent_kalaha_at_the_last_rock_and_steal_WHEN_played_THEN_should_skip_and_steal_correctly() { - goToSkipAndStealOnLast(); - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - assertEquals(3, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); - assertEquals(19, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - } - - private void goToSkipAndStealOnLast() { - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - referenceSmallBowl.getNextSmallBowlTimes(1).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(2).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); - referenceSmallBowl.getNextSmallBowlTimes(1).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); - referenceSmallBowl.getNextSmallBowlTimes(2).play(); - firstSmallBowlOpponent.play(); - referenceSmallBowl.getNextSmallBowlTimes(3).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); - referenceSmallBowl.getNextSmallBowlTimes(4).play(); - firstSmallBowlOpponent.play(); - // Cheating here, let player go again >:), i'm too dumb too make a loop/skip and steal play happen in fair game - firstSmallBowlOpponent.getMyOwner().switchTurn(); - // Should skip and steal - // this bowls rocks - assertEquals(10, firstSmallBowlOpponent.getNextSmallBowlTimes(3).getMyStones()); - // End up here by looping around the board, thus skipping - assertEquals(0, firstSmallBowlOpponent.getMyStones()); - // Thus steal from last bowl on players side - assertEquals(8, referenceSmallBowl.getNextSmallBowlTimes(5).getMyStones()); - // Result is big kalaha booty - assertEquals(8, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - } - - private void goToEndOfGameWhereOpponentWins() { - goToSkipAndStealOnLast(); - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); - referenceSmallBowl.getNextSmallBowlTimes(1).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); - referenceSmallBowl.play(); - referenceSmallBowl.getMyOwner().switchTurn(); - referenceSmallBowl.getNextSmallBowlTimes(3).play(); - referenceSmallBowl.getMyOwner().switchTurn(); - referenceSmallBowl.getNextSmallBowlTimes(4).play(); - referenceSmallBowl.getNextSmallBowlTimes(5).play(); - } - - private void goToEndOfSillyGame() { - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - - // player - // Best opening - referenceSmallBowl.getNextSmallBowlTimes(2).play(); - // Set up for steal move - referenceSmallBowl.getNextSmallBowlTimes(4).play(); - assertEquals(2, referenceSmallBowl.getKalaha().getMyStones()); - - // opponent - // ... worst opening? - firstSmallBowlOpponent.play(); - - // player - assertSame(referenceSmallBowl.getNextSmallBowlTimes(4).getOpposite(), referenceSmallBowl.getKalaha().getNextBowl().getNextBowl()); - referenceSmallBowl.play(); - // Check if i did it properly on paper - assertEquals(9, referenceSmallBowl.getKalaha().getMyStones()); - assertEquals(0, referenceSmallBowl.getNextSmallBowlTimes(4).getMyStones()); - // assertEquals(0, firstSmallBowlPlayer.getNextSmallBowlTimes(4).getOpposite().getMyRocks()); - - // opponent - firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); - - //Player - referenceSmallBowl.getNextSmallBowlTimes(3).play(); - assertEquals(10, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - // opponent makes stupid move again - firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); - // player makes big steal - //assertEquals(0, firstSmallBowlPlayer.getNextSmallBowlTimes(5).getNextBowl().getMyRocks()); - assertEquals(10, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - referenceSmallBowl.getNextSmallBowlTimes(2).play(); - assertEquals(19, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - // opponent steals tiny booty - firstSmallBowlOpponent.play(); - assertEquals(3, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - - // player is stalling until the end - referenceSmallBowl.play(); - - // opponent is heading for disaster - firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); - referenceSmallBowl.play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(4).play(); - referenceSmallBowl.play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); - // everything empty! - for (int i = 0; i < 6; i++) { - assertEquals(0, firstSmallBowlOpponent.getNextSmallBowlTimes(i).getMyStones()); - } - - } - - private SmallBowl goToSkippableState() { - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - - referenceSmallBowl.getNextSmallBowlTimes(2).play(); - referenceSmallBowl.getNextSmallBowlTimes(3).play(); - - firstSmallBowlOpponent.getNextSmallBowlTimes(2).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); - - referenceSmallBowl.play(); - firstSmallBowlOpponent.play(); - - referenceSmallBowl.getNextSmallBowlTimes(4).play(); - firstSmallBowlOpponent.getNextSmallBowlTimes(4).play(); - - // Playing this bowl should give a skip! - assertTrue(referenceSmallBowl.getNextSmallBowlTimes(5).getMyStones() >= 8); - return referenceSmallBowl.getNextSmallBowlTimes(5); - } - } - - @Nested - class GIVEN_the_play_ends{ - - @Test - public void in_own_kalaha_WHEN_play_ends_THEN_turn_is_not_switched() { - referenceSmallBowl.getNextSmallBowlTimes(2).play(); - assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); - } - - @Test - public void in_own_small_bowl_WHEN_play_ends_THEN_turn_is_switched() { - referenceSmallBowl.play(); - assertFalse(referenceSmallBowl.getMyOwner().hasTheTurn()); - } - - @Test - public void in_opponents_small_bowl_WHEN_player_plays_this_bowl_THEN_turn_is_switched() { - referenceSmallBowl.getNextSmallBowlTimes(5).play(); - assertFalse(referenceSmallBowl.getMyOwner().hasTheTurn()); - } - - @Test - public void in_own_empty_small_bowl_and_opposite_has_rocks_WHEN_play_ends_THEN_rocks_of_opposite_plus_last_rock_of_play_are_added_to_kalaha() { - referenceSmallBowl.getNextSmallBowlTimes(5).play(); - SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); - firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); - assertSame(referenceSmallBowl.getNextSmallBowlTimes(1).getOpposite(), referenceSmallBowl.getKalaha().getNextSmallBowl().getNextSmallBowlTimes(4)); - // assertSame(firstSmallBowlPlayer.getOpposite(), firstSmallBowlPlayer.getKalaha().getNextSmallBowlTimes(5)); - referenceSmallBowl.play(); - assertEquals(7, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); - } - - } } @@ -325,7 +128,11 @@ class BowlTest { void given_a_stones_list_when_instantiating_a_small_bowl_then_configure_stones_as_in_list() { int[] stonesArray = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13,14}; List stonesList = Arrays.stream(stonesArray).boxed().collect(Collectors.toList()); - referenceSmallBowl = new SmallBowl(stonesList); + try { + referenceSmallBowl = new SmallBowl(stonesList); + } catch (DomainSmallBowlException e) { + fail("Invalid instantiation."); + } for (int i = 0; i < stonesArray.length; i++) { if (i < 6) assertEquals(stonesArray[i], referenceSmallBowl.getNextSmallBowlTimes(i).getMyStones()); else if (i == 6) assertEquals(stonesArray[i], referenceSmallBowl.getKalaha().getMyStones()); @@ -337,13 +144,221 @@ class BowlTest { } } + @Test + void given_a_stones_list_with_odd_number_of_elements_when_instantiating_small_bowl_then_throw_DomainSmallBowlException() { + int[] stonesArray = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13}; + List stonesList = Arrays.stream(stonesArray).boxed().collect(Collectors.toList()); + try { + referenceSmallBowl = new SmallBowl(stonesList); + fail(); + } catch (DomainSmallBowlException e) { + } + } + @Test public void given_stones_can_reach_oppenent_kalaha_when_played_validly_then_opponents_kalaha_is_skipped() { - SmallBowl playWillSkipFromThisBowl = goToSkippableState(); - int opponentKalahaRocksBefore = referenceSmallBowl.getNextSmallBowlTimes(11).getNextBowl().getMyStones(); - playWillSkipFromThisBowl.play(); - int opponentKalahaRocksAfter = referenceSmallBowl.getNextSmallBowlTimes(11).getNextBowl().getMyStones(); - assertEquals(opponentKalahaRocksBefore, opponentKalahaRocksAfter); + try { + referenceSmallBowl = new SmallBowl( + Arrays.stream( + new int[] {0,0,0,0,0,100,0,0,0,0,0,0,0,0} + ).boxed().collect(Collectors.toList()) + ); + } catch (DomainSmallBowlException e) { + fail("Invalid instantiation."); + } + referenceSmallBowl.getNextSmallBowlTimes(5).play(); + assertEquals(0, referenceSmallBowl.getKalaha().getNextBowl().getKalaha().getMyStones()); } + + @Nested + class and_the_game_is_in_a_state_where { + + @Test + public void its_not_the_players_turn_when_play_is_called_then_nothing_happens() { + referenceSmallBowl.getMyOwner().switchTurn(); + int initialRocks = referenceSmallBowl.getMyStones(); + referenceSmallBowl.play(); + Bowl neighbour = referenceSmallBowl.getNextBowl(); + for (int i = 0; i < initialRocks; i++) { + assertEquals(4, neighbour.getMyStones()); + neighbour = neighbour.getNextBowl(); + } + assertEquals(4, neighbour.getMyStones()); + } + + @Test + public void the_bowl_is_empty_WHEN_the_player_plays_the_empty_bowl_THEN_nothing_happens() { + referenceSmallBowl.play(); + referenceSmallBowl.getMyOwner().switchTurn(); + assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); + referenceSmallBowl.play(); + assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); + assertEquals(5, referenceSmallBowl.getNextBowl().getMyStones()); + } + + @Test + public void all_small_bowls_of_the_player_are_empty_WHEN_a_play_ends_THEN_tell_players_who_won() { + Player player = referenceSmallBowl.getMyOwner(); + Player opponent = referenceSmallBowl.getNextSmallBowlTimes(6).getMyOwner(); + assertFalse(player.won()); + assertFalse(opponent.won()); + goToEndOfSillyGame(); + assertTrue(player.won()); + assertFalse(opponent.won()); + + } + + @Test + public void all_small_bowls_of_the_player_are_empty_WHEN_a_play_ends_THEN_tell_players_who_wonOPPONENTVARIATION() { + Player player = referenceSmallBowl.getMyOwner(); + Player opponent = referenceSmallBowl.getNextSmallBowlTimes(6).getMyOwner(); + goToEndOfGameWhereOpponentWins(); + assertFalse(player.won()); + assertTrue(opponent.won()); + } + + @Test + public void the_play_would_skip_past_opponent_kalaha_at_the_last_rock_and_steal_WHEN_played_THEN_should_skip_and_steal_correctly() { + goToSkipAndStealOnLast(); + SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); + assertEquals(3, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); + assertEquals(19, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + } + + private void goToSkipAndStealOnLast() { + SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); + referenceSmallBowl.getNextSmallBowlTimes(1).play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(2).play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); + referenceSmallBowl.getNextSmallBowlTimes(1).play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); + referenceSmallBowl.getNextSmallBowlTimes(2).play(); + firstSmallBowlOpponent.play(); + referenceSmallBowl.getNextSmallBowlTimes(3).play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); + referenceSmallBowl.getNextSmallBowlTimes(4).play(); + firstSmallBowlOpponent.play(); + // Cheating here, let player go again >:), i'm too dumb too make a loop/skip and steal play happen in fair game + firstSmallBowlOpponent.getMyOwner().switchTurn(); + // Should skip and steal + // this bowls rocks + assertEquals(10, firstSmallBowlOpponent.getNextSmallBowlTimes(3).getMyStones()); + // End up here by looping around the board, thus skipping + assertEquals(0, firstSmallBowlOpponent.getMyStones()); + // Thus steal from last bowl on players side + assertEquals(8, referenceSmallBowl.getNextSmallBowlTimes(5).getMyStones()); + // Result is big kalaha booty + assertEquals(8, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + } + + private void goToEndOfGameWhereOpponentWins() { + goToSkipAndStealOnLast(); + SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); + firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); + referenceSmallBowl.getNextSmallBowlTimes(1).play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); + referenceSmallBowl.play(); + referenceSmallBowl.getMyOwner().switchTurn(); + referenceSmallBowl.getNextSmallBowlTimes(3).play(); + referenceSmallBowl.getMyOwner().switchTurn(); + referenceSmallBowl.getNextSmallBowlTimes(4).play(); + referenceSmallBowl.getNextSmallBowlTimes(5).play(); + } + + private void goToEndOfSillyGame() { + SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); + + // player + // Best opening + referenceSmallBowl.getNextSmallBowlTimes(2).play(); + // Set up for steal move + referenceSmallBowl.getNextSmallBowlTimes(4).play(); + assertEquals(2, referenceSmallBowl.getKalaha().getMyStones()); + + // opponent + // ... worst opening? + firstSmallBowlOpponent.play(); + + // player + assertSame(referenceSmallBowl.getNextSmallBowlTimes(4).getOpposite(), referenceSmallBowl.getKalaha().getNextBowl().getNextBowl()); + referenceSmallBowl.play(); + // Check if i did it properly on paper + assertEquals(9, referenceSmallBowl.getKalaha().getMyStones()); + assertEquals(0, referenceSmallBowl.getNextSmallBowlTimes(4).getMyStones()); + // assertEquals(0, firstSmallBowlPlayer.getNextSmallBowlTimes(4).getOpposite().getMyRocks()); + + // opponent + firstSmallBowlOpponent.getNextSmallBowlTimes(3).play(); + + //Player + referenceSmallBowl.getNextSmallBowlTimes(3).play(); + assertEquals(10, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + + // opponent makes stupid move again + firstSmallBowlOpponent.getNextSmallBowlTimes(1).play(); + + // player makes big steal + //assertEquals(0, firstSmallBowlPlayer.getNextSmallBowlTimes(5).getNextBowl().getMyRocks()); + assertEquals(10, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + referenceSmallBowl.getNextSmallBowlTimes(2).play(); + assertEquals(19, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + + // opponent steals tiny booty + firstSmallBowlOpponent.play(); + assertEquals(3, firstSmallBowlOpponent.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + + // player is stalling until the end + referenceSmallBowl.play(); + + // opponent is heading for disaster + firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); + referenceSmallBowl.play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(4).play(); + referenceSmallBowl.play(); + firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); + // everything empty! + for (int i = 0; i < 6; i++) { + assertEquals(0, firstSmallBowlOpponent.getNextSmallBowlTimes(i).getMyStones()); + } + + } + } + + + @Nested + class GIVEN_the_play_ends{ + + @Test + public void in_own_kalaha_WHEN_play_ends_THEN_turn_is_not_switched() { + referenceSmallBowl.getNextSmallBowlTimes(2).play(); + assertTrue(referenceSmallBowl.getMyOwner().hasTheTurn()); + } + + @Test + public void in_own_small_bowl_WHEN_play_ends_THEN_turn_is_switched() { + referenceSmallBowl.play(); + assertFalse(referenceSmallBowl.getMyOwner().hasTheTurn()); + } + + @Test + public void in_opponents_small_bowl_WHEN_player_plays_this_bowl_THEN_turn_is_switched() { + referenceSmallBowl.getNextSmallBowlTimes(5).play(); + assertFalse(referenceSmallBowl.getMyOwner().hasTheTurn()); + } + + @Test + public void in_own_empty_small_bowl_and_opposite_has_rocks_WHEN_play_ends_THEN_rocks_of_opposite_plus_last_rock_of_play_are_added_to_kalaha() { + referenceSmallBowl.getNextSmallBowlTimes(5).play(); + SmallBowl firstSmallBowlOpponent = referenceSmallBowl.getNextSmallBowlTimes(6); + firstSmallBowlOpponent.getNextSmallBowlTimes(5).play(); + assertSame(referenceSmallBowl.getNextSmallBowlTimes(1).getOpposite(), referenceSmallBowl.getKalaha().getNextSmallBowl().getNextSmallBowlTimes(4)); + // assertSame(firstSmallBowlPlayer.getOpposite(), firstSmallBowlPlayer.getKalaha().getNextSmallBowlTimes(5)); + referenceSmallBowl.play(); + assertEquals(7, referenceSmallBowl.getNextSmallBowlTimes(5).getNextBowl().getMyStones()); + } + + } + } } \ No newline at end of file -- cgit v1.2.3