summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jrummikub/control/RoundControl.java6
-rw-r--r--src/jrummikub/model/GameState.java12
-rw-r--r--src/jrummikub/model/Player.java4
-rw-r--r--test/jrummikub/control/RoundControlTest.java143
-rw-r--r--test/jrummikub/model/GameStateTest.java2
-rw-r--r--test/jrummikub/model/MockGameState.java54
-rw-r--r--test/jrummikub/model/MockHand.java49
-rw-r--r--test/jrummikub/model/MockPlayer.java26
-rw-r--r--test/jrummikub/model/MockTable.java26
-rw-r--r--test/jrummikub/view/MockPlayerPanel.java10
10 files changed, 296 insertions, 36 deletions
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index ec08050..a481991 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -1,16 +1,16 @@
package jrummikub.control;
-import jrummikub.model.GameState;
+import jrummikub.model.IGameState;
import jrummikub.model.IHand;
import jrummikub.model.Player;
import jrummikub.model.Position;
import jrummikub.view.IView;
public class RoundControl {
- private GameState gameState;
+ private IGameState gameState;
private IView view;
- public RoundControl(GameState gameState, IView view) {
+ public RoundControl(IGameState gameState, IView view) {
this.gameState = gameState;
this.view = view;
}
diff --git a/src/jrummikub/model/GameState.java b/src/jrummikub/model/GameState.java
index e1bd6f3..0e43a9c 100644
--- a/src/jrummikub/model/GameState.java
+++ b/src/jrummikub/model/GameState.java
@@ -5,7 +5,7 @@ import java.util.ArrayList;
import java.util.List;
/** Class managing the overall and momentary GameState */
-public class GameState {
+public class GameState implements IGameState {
private ITable table;
private List<Player> players;
private int activePlayer;
@@ -22,27 +22,33 @@ public class GameState {
gameHeap = new StoneHeap();
}
+ @Override
public ITable getTable() {
return table;
}
+ @Override
public int getPlayerCount() {
return players.size();
}
- public Player getPlayer(int i) {
+ @Override
+ public IPlayer getPlayer(int i) {
return players.get(i);
}
/** Changes the activePlayer to the next {@link Player} in the list */
+ @Override
public void nextPlayer() {
activePlayer = (activePlayer + 1) % players.size();
}
- public Player getActivePlayer() {
+ @Override
+ public IPlayer getActivePlayer() {
return players.get(activePlayer);
}
+ @Override
public StoneHeap getGameHeap() {
return gameHeap;
}
diff --git a/src/jrummikub/model/Player.java b/src/jrummikub/model/Player.java
index 50a525a..d5bda32 100644
--- a/src/jrummikub/model/Player.java
+++ b/src/jrummikub/model/Player.java
@@ -3,7 +3,7 @@ package jrummikub.model;
import java.awt.Color;
/** Class managing player data. No methods in release 1 */
-public class Player {
+public class Player implements IPlayer {
private IHand hand;
private Color color;
@@ -15,10 +15,12 @@ public class Player {
this.color = color;
}
+ @Override
public IHand getHand() {
return hand;
}
+ @Override
public Color getColor() {
return color;
}
diff --git a/test/jrummikub/control/RoundControlTest.java b/test/jrummikub/control/RoundControlTest.java
index bc0bb3d..7d13ff0 100644
--- a/test/jrummikub/control/RoundControlTest.java
+++ b/test/jrummikub/control/RoundControlTest.java
@@ -1,7 +1,16 @@
package jrummikub.control;
-import static org.junit.Assert.*;
-import jrummikub.model.GameState;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import jrummikub.model.MockGameState;
+import jrummikub.model.MockTable;
+import jrummikub.model.Position;
+import jrummikub.model.Stone;
+import jrummikub.model.StoneSet;
import jrummikub.view.MockView;
import org.junit.Before;
@@ -9,13 +18,13 @@ import org.junit.Test;
public class RoundControlTest {
private MockView view;
- private GameState testGameState;
+ private MockGameState testGameState;
private RoundControl testRound;
@Before
public void setup() {
view = new MockView();
- testGameState = new GameState();
+ testGameState = new MockGameState();
testRound = new RoundControl(testGameState, view);
}
@@ -27,6 +36,23 @@ public class RoundControlTest {
}
}
+ private void checkTurnStartSetUp() {
+ assertNotNull(view.currentPlayerName);
+ assertNotNull(view.getTablePanel().leftPlayerName);
+ assertNotNull(view.getTablePanel().topPlayerName);
+ assertNotNull(view.getTablePanel().rightPlayerName);
+ assertTrue(view.displayStartTurnPanel);
+ assertFalse(view.startTurnEvent.listeners.isEmpty());
+ }
+
+ private void resetTurnStart() {
+ view.currentPlayerName = null;
+ view.getTablePanel().leftPlayerName = null;
+ view.getTablePanel().topPlayerName = null;
+ view.getTablePanel().rightPlayerName = null;
+ view.displayStartTurnPanel = false;
+ }
+
@Test
public void testDeal() {
testRound.deal();
@@ -38,11 +64,108 @@ public class RoundControlTest {
testRound.startRound();
checkCorrectlyDealed();
- assertNotNull(view.currentPlayerName);
- assertNotNull(view.getTablePanel().leftPlayerName);
- assertNotNull(view.getTablePanel().topPlayerName);
- assertNotNull(view.getTablePanel().rightPlayerName);
- assertTrue(view.displayStartTurnPanel);
- assertFalse(view.startTurnEvent.listeners.isEmpty());
+ checkTurnStartSetUp();
+ }
+
+ @Test
+ public void testTableValidHandChanged() {
+ testRound.startRound();
+ MockTable oldTable = testGameState.table;
+ MockTable newTable = new MockTable();
+ newTable.valid = true;
+ oldTable.clonedTable = newTable;
+
+ view.startTurnEvent.emit();
+ assertFalse(view.displayStartTurnPanel);
+ testGameState.players.get(0).hand.stones.remove(0);
+ resetTurnStart();
+ view.getPlayerPanel().endTurnEvent.emit();
+
+ assertNotSame(oldTable, testGameState.table);
+ assertSame(newTable, testGameState.table);
+ assertEquals(1, testGameState.activePlayer);
+
+ checkTurnStartSetUp();
+ }
+
+ @Test
+ public void testTableInvalidHandChanged() {
+ testRound.startRound();
+ MockTable oldTable = testGameState.table;
+ MockTable newTable = new MockTable();
+ newTable.valid = false;
+ oldTable.clonedTable = newTable;
+
+ view.startTurnEvent.emit();
+ assertFalse(view.displayStartTurnPanel);
+ Stone stone = testGameState.players.get(0).hand.stones.remove(0);
+ newTable.drop(new StoneSet(stone), new Position(0, 0));
+ resetTurnStart();
+ view.getPlayerPanel().endTurnEvent.emit();
+
+ assertSame(oldTable, testGameState.table);
+ assertNotSame(newTable, testGameState.table);
+ assertEquals(1, testGameState.activePlayer);
+ assertEquals(14 + 3, testGameState.players.get(0).hand.getSize());
+ checkTurnStartSetUp();
+ }
+
+ @Test
+ public void testTableValidHandUnchanged() {
+ testRound.startRound();
+ MockTable oldTable = testGameState.table;
+ MockTable newTable = new MockTable();
+ newTable.valid = true;
+ oldTable.clonedTable = newTable;
+
+ view.startTurnEvent.emit();
+ assertFalse(view.displayStartTurnPanel);
+ resetTurnStart();
+ view.getPlayerPanel().endTurnEvent.emit();
+
+ assertEquals(14 + 1, testGameState.players.get(0).hand.getSize());
+ assertEquals(1, testGameState.activePlayer);
+ assertSame(newTable, testGameState.table);
+ assertNotSame(oldTable, testGameState.table);
+
+ checkTurnStartSetUp();
+ }
+
+ @Test
+ public void testTableInvalidHandUnchanged() {
+ testRound.startRound();
+ MockTable oldTable = testGameState.table;
+ MockTable newTable = new MockTable();
+ newTable.valid = false;
+ oldTable.clonedTable = newTable;
+
+ view.startTurnEvent.emit();
+ assertFalse(view.displayStartTurnPanel);
+ resetTurnStart();
+ view.getPlayerPanel().endTurnEvent.emit();
+
+ assertEquals(14 + 1, testGameState.players.get(0).hand.getSize());
+ assertEquals(1, testGameState.activePlayer);
+ assertNotSame(newTable, testGameState.table);
+ assertSame(oldTable, testGameState.table);
+
+ checkTurnStartSetUp();
+ }
+
+ @Test
+ public void testWinning() {
+ testRound.startRound();
+ MockTable oldTable = testGameState.table;
+ MockTable newTable = new MockTable();
+ newTable.valid = true;
+ oldTable.clonedTable = newTable;
+
+ view.startTurnEvent.emit();
+ assertFalse(view.displayStartTurnPanel);
+ testGameState.players.get(0).hand.stones.clear();
+ resetTurnStart();
+ view.getPlayerPanel().endTurnEvent.emit();
+
+ assertTrue(view.displayWinPanel);
}
}
diff --git a/test/jrummikub/model/GameStateTest.java b/test/jrummikub/model/GameStateTest.java
index a134231..e1de06c 100644
--- a/test/jrummikub/model/GameStateTest.java
+++ b/test/jrummikub/model/GameStateTest.java
@@ -8,7 +8,7 @@ import org.junit.Before;
import org.junit.Test;
public class GameStateTest {
- private GameState testGame;
+ private IGameState testGame;
@Before
public void createGame() {
diff --git a/test/jrummikub/model/MockGameState.java b/test/jrummikub/model/MockGameState.java
new file mode 100644
index 0000000..102e9fb
--- /dev/null
+++ b/test/jrummikub/model/MockGameState.java
@@ -0,0 +1,54 @@
+package jrummikub.model;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MockGameState implements IGameState {
+ public MockTable table;
+ public List<MockPlayer> players;
+ public int activePlayer;
+ public StoneHeap gameHeap;
+
+ public MockGameState() {
+ table = new MockTable();
+ players = new ArrayList<MockPlayer>();
+ players.add(new MockPlayer(Color.red));
+ players.add(new MockPlayer(Color.yellow));
+ players.add(new MockPlayer(Color.green));
+ players.add(new MockPlayer(Color.black));
+ activePlayer = 0;
+ gameHeap = new StoneHeap();
+ }
+
+ @Override
+ public ITable getTable() {
+ return table;
+ }
+
+ @Override
+ public int getPlayerCount() {
+ return players.size();
+ }
+
+ @Override
+ public IPlayer getPlayer(int i) {
+ return players.get(i);
+ }
+
+ /** Changes the activePlayer to the next {@link Player} in the list */
+ @Override
+ public void nextPlayer() {
+ activePlayer = (activePlayer + 1) % players.size();
+ }
+
+ @Override
+ public IPlayer getActivePlayer() {
+ return players.get(activePlayer);
+ }
+
+ @Override
+ public StoneHeap getGameHeap() {
+ return gameHeap;
+ }
+}
diff --git a/test/jrummikub/model/MockHand.java b/test/jrummikub/model/MockHand.java
new file mode 100644
index 0000000..1fc5954
--- /dev/null
+++ b/test/jrummikub/model/MockHand.java
@@ -0,0 +1,49 @@
+package jrummikub.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import jrummikub.util.Pair;
+
+public class MockHand implements IHand {
+
+ public List<Stone> stones = new ArrayList<Stone>();
+
+ @Override
+ public Stone pickUp(Position position) {
+ return null;
+ }
+
+ @Override
+ public void drop(Stone object, Position position) {
+ stones.add(object);
+ }
+
+ @Override
+ public Position getPosition(Stone object) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void pickUp(Stone object) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public int getSize() {
+ return stones.size();
+ }
+
+ @Override
+ public Iterator<Pair<Stone, Position>> iterator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public MockHand clone() {
+ return null;
+ }
+}
diff --git a/test/jrummikub/model/MockPlayer.java b/test/jrummikub/model/MockPlayer.java
new file mode 100644
index 0000000..adb9d85
--- /dev/null
+++ b/test/jrummikub/model/MockPlayer.java
@@ -0,0 +1,26 @@
+package jrummikub.model;
+
+import java.awt.Color;
+
+public class MockPlayer implements IPlayer {
+
+ public MockHand hand;
+ public Color color;
+
+ // private String name;
+
+ public MockPlayer(Color color) {
+ hand = new MockHand();
+ this.color = color;
+ }
+
+ @Override
+ public IHand getHand() {
+ return hand;
+ }
+
+ @Override
+ public Color getColor() {
+ return color;
+ }
+}
diff --git a/test/jrummikub/model/MockTable.java b/test/jrummikub/model/MockTable.java
index bab1f58..4d7ef1a 100644
--- a/test/jrummikub/model/MockTable.java
+++ b/test/jrummikub/model/MockTable.java
@@ -1,15 +1,19 @@
package jrummikub.model;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import jrummikub.util.Pair;
-import jrummikub.view.MockStoneCollectionPanel;
public class MockTable implements ITable {
public Map<Stone, StoneSet> findStoneSet = new HashMap<Stone, StoneSet>();
-
+ public boolean valid = false;
+ public MockTable clonedTable;
+ public List<Pair<StoneSet, Position>> sets = new ArrayList<Pair<StoneSet, Position>>();
+
@Override
public void pickUpStone(Stone stone) {
// TODO Auto-generated method stub
@@ -18,8 +22,7 @@ public class MockTable implements ITable {
@Override
public boolean isValid() {
- // TODO Auto-generated method stub
- return false;
+ return valid;
}
@Override
@@ -30,8 +33,7 @@ public class MockTable implements ITable {
@Override
public void drop(StoneSet object, Position position) {
- // TODO Auto-generated method stub
-
+ sets.add(new Pair<StoneSet, Position>(object, position));
}
@Override
@@ -43,28 +45,26 @@ public class MockTable implements ITable {
@Override
public void pickUp(StoneSet object) {
// TODO Auto-generated method stub
-
+
}
@Override
public Iterator<Pair<StoneSet, Position>> iterator() {
- // TODO Auto-generated method stub
- return null;
+ return sets.iterator();
}
@Override
public StoneSet findStoneSet(Stone stone) {
return findStoneSet.get(stone);
}
-
+
public MockTable clone() {
- return null;
+ return clonedTable;
}
@Override
public int getSize() {
- // TODO Auto-generated method stub
- return 0;
+ return sets.size();
}
}
diff --git a/test/jrummikub/view/MockPlayerPanel.java b/test/jrummikub/view/MockPlayerPanel.java
index 639287a..fcf560e 100644
--- a/test/jrummikub/view/MockPlayerPanel.java
+++ b/test/jrummikub/view/MockPlayerPanel.java
@@ -1,12 +1,12 @@
package jrummikub.view;
-import jrummikub.util.Event;
import jrummikub.util.IEvent;
+import jrummikub.util.MockEvent;
public class MockPlayerPanel implements IPlayerPanel {
- public Event endTurnEvent = new Event();
+ public MockEvent endTurnEvent = new MockEvent();
public MockHandPanel handPanel = new MockHandPanel();
-
+
@Override
public IHandPanel getHandPanel() {
// TODO Auto-generated method stub
@@ -16,7 +16,7 @@ public class MockPlayerPanel implements IPlayerPanel {
@Override
public void setTimeLeft(int time) {
// TODO Auto-generated method stub
-
+
}
@Override
@@ -35,5 +35,5 @@ public class MockPlayerPanel implements IPlayerPanel {
public IEvent getEndTurnEvent() {
return endTurnEvent;
}
-
+
}