summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--domain/src/main/java/mancala/domain/DomainSmallBowlException.java7
-rw-r--r--domain/src/main/java/mancala/domain/MancalaImpl.java6
-rw-r--r--domain/src/main/java/mancala/domain/SmallBowl.java11
-rw-r--r--domain/src/test/java/mancala/domain/BowlTest.java439
4 files changed, 245 insertions, 218 deletions
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<Integer> stonesList) {
+ public SmallBowl(List<Integer> 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<Integer> 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());
@@ -338,12 +145,220 @@ 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<Integer> 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