-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControllerTests.java
More file actions
211 lines (191 loc) · 7.83 KB
/
ControllerTests.java
File metadata and controls
211 lines (191 loc) · 7.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
import org.junit.Test;
import cs3500.reversi.controller.ReversiControllerMVC;
import cs3500.reversi.model.CubicPosn;
import cs3500.reversi.model.DiskState;
import cs3500.reversi.model.Reversi;
import cs3500.reversi.model.ReversiModel;
import cs3500.reversi.model.SquareReversi;
import cs3500.reversi.player.HumanPlayer;
import cs3500.reversi.player.Player;
import cs3500.reversi.view.IView;
import cs3500.reversi.view.ReversiGraphicsView;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
/**
* TestController, due to how our controller does not have a large amount of code, we will be
* testing more of the listeners instead and its interaction to the model.
*/
public class ControllerTests {
private ReversiControllerMVC controller;
private ReversiModel model;
Player humanPlayer;
// Tests that startGame for model starts the controller, and that a immediate move without intake
// fails.
@Test
public void testMoveWithoutSelectionDoesntThrowH() {
model = new Reversi(3);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.placePiece();
assertTrue(model.isCurrentPlayer(DiskState.WHITE));
}
// Tests valid place piece, for human expecting input, tests listener OnMove
@Test
public void testPlacePieceFromViewOnMoveH() {
model = new Reversi(3);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onMove(new CubicPosn(2, -1));
controller.placePiece();
assertEquals(model.getState(new CubicPosn(2, -1)), DiskState.WHITE);
}
@Test
public void testPlacePieceInvalidDoesntPlaceH() {
model = new Reversi(4);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onMove(new CubicPosn(3, -1));
controller.placePiece();
assertEquals(model.getState(new CubicPosn(2, -1)), DiskState.EMPTY);
}
@Test
public void testPlaceInvalidPieceDoesNotCrashH() {
model = new Reversi(4);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onMove(new CubicPosn(3, -1));
controller.placePiece();
assertEquals(model.getState(new CubicPosn(2, -1)), DiskState.EMPTY);
}
@Test
public void testOnPlayerH() {
model = new Reversi(4);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
ReversiModel modelTemp = new Reversi(4);
modelTemp.startGame();
model.startGame();
controller.onPlayer(DiskState.WHITE);
// Make move should not invoke error, and because it is a player it should wait for view input.
assertEquals(model.getBoard(), modelTemp.getBoard());
}
@Test
public void testOnPassH() {
model = new Reversi(4);
IView view = new ReversiGraphicsView(model, "hexagon");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onPass();
// Make move should not invoke error, and because it is a player it should wait for view input.
assertFalse(model.isCurrentPlayer(DiskState.WHITE));
// Test that passing when not on your turn doesn't pass. (Player Enforce)
model = new Reversi(3);
humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
model.skipTurn();
controller.onPass();
assertTrue(model.isCurrentPlayer(DiskState.BLACK));
}
@Test
public void testPlayerEnforcePlaceDoesntPlaceH() {
model = new Reversi(3);
IView view = new ReversiGraphicsView(model, "hexagon");
humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
model.skipTurn();
controller.onMove(new CubicPosn(2, -1));
controller.placePiece();
assertNotEquals(model.getState(new CubicPosn(2, -1)), DiskState.WHITE);
}
@Test
public void testMoveWithoutSelectionDoesntThrowS() {
model = new SquareReversi(8);
IView view = new ReversiGraphicsView(model, "square");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.placePiece();
assertTrue(model.isCurrentPlayer(DiskState.WHITE));
}
// Tests valid place piece, for human expecting input, tests listener OnMove
@Test
public void testPlacePieceFromViewOnMoveS() {
model = new SquareReversi(8);
IView view = new ReversiGraphicsView(model, "square");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onMove(new CubicPosn(5, 3));
controller.placePiece();
assertEquals(model.getState(new CubicPosn(5, 3)), DiskState.WHITE);
}
@Test
public void testPlacePieceInvalidDoesntPlaceS() {
model = new SquareReversi(4);
IView view = new ReversiGraphicsView(model, "square");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onMove(new CubicPosn(4, 4));
controller.placePiece();
assertEquals(model.getState(new CubicPosn(4, 4)), DiskState.EMPTY);
}
@Test
public void testOnPlayerS() {
model = new SquareReversi(4);
IView view = new ReversiGraphicsView(model, "square");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
ReversiModel modelTemp = new SquareReversi(4);
modelTemp.startGame();
model.startGame();
controller.onPlayer(DiskState.WHITE);
// Make move should not invoke error, and because it is a player it should wait for view input.
assertEquals(model.getBoard(), modelTemp.getBoard());
}
@Test
public void testOnPassS() {
model = new SquareReversi(4);
IView view = new ReversiGraphicsView(model, "square");
Player humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
controller.onPass();
// Make move should not invoke error, and because it is a player it should wait for view input.
assertFalse(model.isCurrentPlayer(DiskState.WHITE));
// Test that passing when not on your turn doesn't pass. (Player Enforce)
model = new SquareReversi(4);
humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
model.skipTurn();
controller.onPass();
assertTrue(model.isCurrentPlayer(DiskState.BLACK));
}
@Test
public void testPlayerEnforcePlaceDoesntPlaceS() {
model = new SquareReversi(4);
IView view = new ReversiGraphicsView(model, "square");
humanPlayer = new HumanPlayer(model);
controller = new ReversiControllerMVC(model, humanPlayer, view);
model.startGame();
model.skipTurn();
controller.onMove(new CubicPosn(1, 3));
controller.placePiece();
assertNotEquals(model.getState(new CubicPosn(1, 3)), DiskState.WHITE);
}
}