jaroslav@49
|
1 |
/**
|
jaroslav@49
|
2 |
* The MIT License (MIT)
|
jaroslav@49
|
3 |
*
|
jaroslav@49
|
4 |
* Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
|
jaroslav@49
|
5 |
*
|
jaroslav@49
|
6 |
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
jaroslav@49
|
7 |
* of this software and associated documentation files (the "Software"), to deal
|
jaroslav@49
|
8 |
* in the Software without restriction, including without limitation the rights
|
jaroslav@49
|
9 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
jaroslav@49
|
10 |
* copies of the Software, and to permit persons to whom the Software is
|
jaroslav@49
|
11 |
* furnished to do so, subject to the following conditions:
|
jaroslav@49
|
12 |
*
|
jaroslav@49
|
13 |
* The above copyright notice and this permission notice shall be included in
|
jaroslav@49
|
14 |
* all copies or substantial portions of the Software.
|
jaroslav@49
|
15 |
*
|
jaroslav@49
|
16 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
jaroslav@49
|
17 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
jaroslav@49
|
18 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
jaroslav@49
|
19 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
jaroslav@49
|
20 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
jaroslav@49
|
21 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
jaroslav@49
|
22 |
* THE SOFTWARE.
|
jaroslav@49
|
23 |
*/
|
jaroslav@49
|
24 |
package com.oracle.chess.client.htmljava;
|
jaroslav@49
|
25 |
|
jaroslav@49
|
26 |
import com.oracle.chess.client.htmljava.BoardModel.PieceType;
|
jaroslav@49
|
27 |
import java.util.Arrays;
|
jaroslav@49
|
28 |
import java.util.Collections;
|
jaroslav@49
|
29 |
import java.util.List;
|
jaroslav@49
|
30 |
import static org.testng.Assert.*;
|
jaroslav@49
|
31 |
import org.testng.annotations.Test;
|
jaroslav@49
|
32 |
|
jaroslav@49
|
33 |
/**
|
jaroslav@49
|
34 |
*
|
jaroslav@49
|
35 |
* @author Jaroslav Tulach <jtulach@netbeans.org>
|
jaroslav@49
|
36 |
*/
|
jaroslav@49
|
37 |
public class BoardModelTest {
|
jaroslav@49
|
38 |
|
jaroslav@49
|
39 |
public BoardModelTest() {
|
jaroslav@49
|
40 |
}
|
jaroslav@49
|
41 |
|
jaroslav@49
|
42 |
@Test public void whiteRockLeftBottom() {
|
jaroslav@49
|
43 |
Board b = Rules.createBoard();
|
jaroslav@49
|
44 |
Row bottom = b.getRows().get(7);
|
jaroslav@49
|
45 |
Square left = bottom.getColumns().get(0);
|
jaroslav@49
|
46 |
assertEquals(left.getPiece(), PieceType.ROCK, "Rock is on bottom left square");
|
jaroslav@49
|
47 |
assertEquals(left.getPieceColor(), Color.W, "It is white");
|
jaroslav@49
|
48 |
assertEquals(left.getColor(), Color.B, "Square is black");
|
jaroslav@49
|
49 |
}
|
jaroslav@49
|
50 |
|
jaroslav@49
|
51 |
@Test public void e2e4e7e6() {
|
jaroslav@49
|
52 |
Board b = Rules.createBoard();
|
jaroslav@49
|
53 |
b.setGameId("myId");
|
jaroslav@49
|
54 |
setPlayer(b, Color.W);
|
jaroslav@49
|
55 |
assertEquals(b.getTurn(), Color.W);
|
jaroslav@49
|
56 |
|
jaroslav@49
|
57 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
58 |
assertNotNull(e2);
|
jaroslav@49
|
59 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
60 |
assertEquals(BoardModel.findSelectedSquare(b), e2, "E2 is selected");
|
jaroslav@49
|
61 |
|
jaroslav@49
|
62 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
63 |
assertNotNull(e4);
|
jaroslav@49
|
64 |
|
jaroslav@49
|
65 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
66 |
|
jaroslav@49
|
67 |
assertTrue(e4.isPending(), "e4 marked as pending move");
|
jaroslav@49
|
68 |
assertNull(e2.getPiece(), "No pawn at e2");
|
jaroslav@49
|
69 |
|
jaroslav@49
|
70 |
// ignore all other figures than the two pawns
|
jaroslav@49
|
71 |
BoardModel.moveResponse(b, null, Collections.singletonList("Pe4"),
|
jaroslav@49
|
72 |
Collections.singletonList("Pe7"), Color.B, null
|
jaroslav@49
|
73 |
);
|
jaroslav@49
|
74 |
|
jaroslav@49
|
75 |
assertFalse(e4.isPending(), "e4 now the move is real");
|
jaroslav@49
|
76 |
assertNull(e2.getPiece(), "No pawn at e2");
|
jaroslav@49
|
77 |
assertEquals(e4.getPiece(), BoardModel.PieceType.PAWN, "Pawn moved successfully");
|
jaroslav@49
|
78 |
assertNull(BoardModel.findSelectedSquare(b), "No square selected");
|
jaroslav@49
|
79 |
|
jaroslav@49
|
80 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
81 |
assertNull(BoardModel.findSelectedSquare(b), "No square selected, it is blacks turn");
|
jaroslav@49
|
82 |
|
jaroslav@49
|
83 |
List<Move> mvs1 = b.getMoves();
|
jaroslav@49
|
84 |
assertEquals(1, mvs1.size(), "First move was made: " + mvs1);
|
jaroslav@49
|
85 |
Move firstMove = mvs1.get(0);
|
jaroslav@49
|
86 |
assertEquals(firstMove.getPiece(), PieceType.PAWN, "Moving with pawn");
|
jaroslav@49
|
87 |
assertEquals(firstMove.getRound(), 1, "First round of moves");
|
jaroslav@49
|
88 |
assertEquals(firstMove.getTurn(), Color.W, "Moved by white");
|
jaroslav@49
|
89 |
assertTrue(firstMove.isWhiteMove(), "Really moved by white");
|
jaroslav@49
|
90 |
|
jaroslav@49
|
91 |
assertTrue(b.isBlackTurn(), "black's turn");
|
jaroslav@49
|
92 |
|
jaroslav@49
|
93 |
|
jaroslav@49
|
94 |
Square e7 = BoardModel.findSquare(b, 'E', 7);
|
jaroslav@49
|
95 |
BoardModel.selected(b, e7);
|
jaroslav@49
|
96 |
assertNull(BoardModel.findSelectedSquare(b), "Can't select anything when I am white player");
|
jaroslav@49
|
97 |
|
jaroslav@49
|
98 |
Move blackMv = BoardModel.MoveImpl.valueOf("E7E6");
|
jaroslav@49
|
99 |
BoardModel.moveUpdate(b, blackMv,
|
jaroslav@49
|
100 |
Collections.singletonList("PE4"),
|
jaroslav@49
|
101 |
Collections.singletonList("PE6"),
|
jaroslav@49
|
102 |
Color.W, null
|
jaroslav@49
|
103 |
);
|
jaroslav@49
|
104 |
|
jaroslav@49
|
105 |
assertNull(e7.getPiece(), "Piece has been moved");
|
jaroslav@49
|
106 |
|
jaroslav@49
|
107 |
List<Move> mvs = b.getMoves();
|
jaroslav@49
|
108 |
assertEquals(2, mvs.size(), "There are two moves now: " + mvs);
|
jaroslav@49
|
109 |
Move secondMove = mvs.get(1);
|
jaroslav@49
|
110 |
assertEquals(secondMove.getPiece(), PieceType.PAWN, "Moving with pawn");
|
jaroslav@49
|
111 |
assertEquals(secondMove.getRound(), 1, "Still 1st round of moves");
|
jaroslav@49
|
112 |
assertEquals(secondMove.getTurn(), Color.B, "Moved by black");
|
jaroslav@49
|
113 |
assertFalse(secondMove.isWhiteMove(), "Really moved by black");
|
jaroslav@49
|
114 |
}
|
jaroslav@49
|
115 |
|
jaroslav@49
|
116 |
@Test public void unselect() {
|
jaroslav@49
|
117 |
Board b = Rules.createBoard();
|
jaroslav@49
|
118 |
b.setGameId("myId");
|
jaroslav@49
|
119 |
setPlayer(b, Color.W);
|
jaroslav@49
|
120 |
assertEquals(b.getTurn(), Color.W);
|
jaroslav@49
|
121 |
|
jaroslav@49
|
122 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
123 |
assertNotNull(e2);
|
jaroslav@49
|
124 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
125 |
assertEquals(BoardModel.findSelectedSquare(b), e2, "E2 is selected");
|
jaroslav@49
|
126 |
|
jaroslav@49
|
127 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
128 |
assertNull(BoardModel.findSelectedSquare(b), "E2 is unselected");
|
jaroslav@49
|
129 |
|
jaroslav@49
|
130 |
for (Row row : b.getRows()) {
|
jaroslav@49
|
131 |
for (Square s : row.getColumns()) {
|
jaroslav@49
|
132 |
assertFalse(s.isAccessible(), "No square is accessible anymore: " + s);
|
jaroslav@49
|
133 |
}
|
jaroslav@49
|
134 |
}
|
jaroslav@49
|
135 |
}
|
jaroslav@49
|
136 |
|
jaroslav@49
|
137 |
@Test public void discaredMove() {
|
jaroslav@49
|
138 |
Board b = Rules.createBoard();
|
jaroslav@49
|
139 |
b.setGameId("myId");
|
jaroslav@49
|
140 |
setPlayer(b, Color.W);
|
jaroslav@49
|
141 |
assertEquals(b.getTurn(), Color.W);
|
jaroslav@49
|
142 |
|
jaroslav@49
|
143 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
144 |
assertNotNull(e2);
|
jaroslav@49
|
145 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
146 |
assertEquals(BoardModel.findSelectedSquare(b), e2, "E2 is selected");
|
jaroslav@49
|
147 |
|
jaroslav@49
|
148 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
149 |
assertNotNull(e4);
|
jaroslav@49
|
150 |
|
jaroslav@49
|
151 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
152 |
|
jaroslav@49
|
153 |
assertTrue(e4.isPending(), "e4 marked as pending move");
|
jaroslav@49
|
154 |
assertNull(e2.getPiece(), "No pawn at e2");
|
jaroslav@49
|
155 |
|
jaroslav@49
|
156 |
assertEquals(b.getMoves().size(), 1, "One move recorded");
|
jaroslav@49
|
157 |
assertEquals(b.getMoves().get(0), b.getPendingMove(), "Pending move is waiting");
|
jaroslav@49
|
158 |
|
jaroslav@49
|
159 |
// ignore all other figures than the two pawns
|
jaroslav@49
|
160 |
BoardModel.moveResponse(b, "No way, can't play like this", Collections.singletonList("PE2"),
|
jaroslav@49
|
161 |
Collections.singletonList("Pe7"), Color.W, null
|
jaroslav@49
|
162 |
);
|
jaroslav@49
|
163 |
|
jaroslav@49
|
164 |
assertEquals(b.getAlertMessage(), "No way, can't play like this");
|
jaroslav@49
|
165 |
assertNull(e4.getPiece(), "No piece on e4");
|
jaroslav@49
|
166 |
assertEquals(e2.getPiece(), PieceType.PAWN, "Pawn is back");
|
jaroslav@49
|
167 |
|
jaroslav@49
|
168 |
assertEquals(b.getMoves().size(), 0, "Move was discarded");
|
jaroslav@49
|
169 |
assertNull(b.getPendingMove(), "No pending moves");
|
jaroslav@49
|
170 |
}
|
jaroslav@49
|
171 |
|
jaroslav@49
|
172 |
@Test public void cantSelectEmptySquare() {
|
jaroslav@49
|
173 |
Board b = Rules.createBoard();
|
jaroslav@49
|
174 |
Square e3 = BoardModel.findSquare(b, 'E', 3);
|
jaroslav@49
|
175 |
assertNotNull(e3);
|
jaroslav@49
|
176 |
BoardModel.selected(b, e3);
|
jaroslav@49
|
177 |
assertNull(BoardModel.findSelectedSquare(b), "No square is selected");
|
jaroslav@49
|
178 |
}
|
jaroslav@49
|
179 |
|
jaroslav@49
|
180 |
@Test public void cantTakeOwnPiece() {
|
jaroslav@49
|
181 |
Board b = Rules.createBoard();
|
jaroslav@49
|
182 |
setPlayer(b, Color.W);
|
jaroslav@49
|
183 |
Square e1 = BoardModel.findSquare(b, 'E', 1);
|
jaroslav@49
|
184 |
assertNotNull(e1);
|
jaroslav@49
|
185 |
BoardModel.selected(b, e1);
|
jaroslav@49
|
186 |
assertEquals(BoardModel.findSelectedSquare(b), e1, "E1 is selected");
|
jaroslav@49
|
187 |
|
jaroslav@49
|
188 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
189 |
assertNotNull(e2);
|
jaroslav@49
|
190 |
|
jaroslav@49
|
191 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
192 |
|
jaroslav@49
|
193 |
assertNotNull(e1.getPiece(), "King remains at e1");
|
jaroslav@49
|
194 |
assertEquals(e2.getPiece(), BoardModel.PieceType.PAWN, "Pawn remains");
|
jaroslav@49
|
195 |
assertEquals(BoardModel.findSelectedSquare(b), e2, "e2 now selected");
|
jaroslav@49
|
196 |
|
jaroslav@49
|
197 |
}
|
jaroslav@49
|
198 |
|
jaroslav@49
|
199 |
@Test public void knightMustMoveToF3() {
|
jaroslav@49
|
200 |
Board b = Rules.createBoard();
|
jaroslav@49
|
201 |
setPlayer(b, Color.W);
|
jaroslav@49
|
202 |
Square g1 = BoardModel.findSquare(b, 'G', 1);
|
jaroslav@49
|
203 |
BoardModel.selected(b, g1);
|
jaroslav@49
|
204 |
|
jaroslav@49
|
205 |
Square f3 = BoardModel.findSquare(b, 'F', 3);
|
jaroslav@49
|
206 |
assertTrue(f3.isAccessible(), "This is a field where knight can move");
|
jaroslav@49
|
207 |
|
jaroslav@49
|
208 |
Square g3 = BoardModel.findSquare(b, 'G', 3);
|
jaroslav@49
|
209 |
assertFalse(g3.isAccessible(), "Not a place for knight");
|
jaroslav@49
|
210 |
|
jaroslav@49
|
211 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
212 |
assertFalse(e2.isAccessible(), "Not a place either, occupied");
|
jaroslav@49
|
213 |
|
jaroslav@49
|
214 |
BoardModel.selected(b, g3);
|
jaroslav@49
|
215 |
|
jaroslav@49
|
216 |
assertNull(g3.getPiece(), "No figure was moved");
|
jaroslav@49
|
217 |
assertTrue(g1.isSelected(), "Original square still selected");
|
jaroslav@49
|
218 |
|
jaroslav@49
|
219 |
BoardModel.selected(b, f3);
|
jaroslav@49
|
220 |
|
jaroslav@49
|
221 |
assertEquals(f3.getPiece(), PieceType.KNIGHT, "Moved");
|
jaroslav@49
|
222 |
assertFalse(g3.isSelected(), "No longer selected");
|
jaroslav@49
|
223 |
}
|
jaroslav@49
|
224 |
|
jaroslav@49
|
225 |
@Test public void pawnCanTakeToSide() {
|
jaroslav@49
|
226 |
Board b = Rules.createBoard();
|
jaroslav@49
|
227 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
228 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
229 |
Square d7 = BoardModel.findSquare(b, 'D', 7);
|
jaroslav@49
|
230 |
Square d5 = BoardModel.findSquare(b, 'D', 5);
|
jaroslav@49
|
231 |
|
jaroslav@49
|
232 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
233 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
234 |
|
jaroslav@49
|
235 |
// ignore all other figures than the two pawns
|
jaroslav@49
|
236 |
BoardModel.moveResponse(b, null, Collections.singletonList("PE4"),
|
jaroslav@49
|
237 |
Collections.singletonList("PD7"), Color.B, null
|
jaroslav@49
|
238 |
);
|
jaroslav@49
|
239 |
|
jaroslav@49
|
240 |
setPlayer(b, Color.B);
|
jaroslav@49
|
241 |
|
jaroslav@49
|
242 |
BoardModel.selected(b, d7);
|
jaroslav@49
|
243 |
BoardModel.selected(b, d5);
|
jaroslav@49
|
244 |
|
jaroslav@49
|
245 |
// ignore all other figures than the two pawns
|
jaroslav@49
|
246 |
BoardModel.moveResponse(b, null, Collections.singletonList("PE4"),
|
jaroslav@49
|
247 |
Collections.singletonList("PD5"), Color.W, null
|
jaroslav@49
|
248 |
);
|
jaroslav@49
|
249 |
|
jaroslav@49
|
250 |
setPlayer(b, Color.W);
|
jaroslav@49
|
251 |
|
jaroslav@49
|
252 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
253 |
assertTrue(d5.isAccessible(), "Can take on d5");
|
jaroslav@49
|
254 |
BoardModel.selected(b, d5);
|
jaroslav@49
|
255 |
assertNull(e4.getPiece(), "No pawn on e4");
|
jaroslav@49
|
256 |
assertEquals(d5.getPieceColor(), Color.W, "White Pawn on d5");
|
jaroslav@49
|
257 |
}
|
jaroslav@49
|
258 |
|
jaroslav@49
|
259 |
@Test public void pawnCanJumpOnAnother() {
|
jaroslav@49
|
260 |
Board b = Rules.createBoard();
|
jaroslav@49
|
261 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
262 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
263 |
Square d7 = BoardModel.findSquare(b, 'D', 7);
|
jaroslav@49
|
264 |
Square d5 = BoardModel.findSquare(b, 'D', 5);
|
jaroslav@49
|
265 |
Square e7 = BoardModel.findSquare(b, 'E', 7);
|
jaroslav@49
|
266 |
Square e6 = BoardModel.findSquare(b, 'E', 6);
|
jaroslav@49
|
267 |
Square e5 = BoardModel.findSquare(b, 'E', 5);
|
jaroslav@49
|
268 |
|
jaroslav@49
|
269 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
270 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
271 |
|
jaroslav@49
|
272 |
// ignore all other figures than the three pawns
|
jaroslav@49
|
273 |
BoardModel.moveResponse(b, null, Collections.singletonList("PE4"),
|
jaroslav@49
|
274 |
Arrays.asList("PD7", "PE7"), Color.B, null
|
jaroslav@49
|
275 |
);
|
jaroslav@49
|
276 |
|
jaroslav@49
|
277 |
setPlayer(b, Color.B);
|
jaroslav@49
|
278 |
|
jaroslav@49
|
279 |
BoardModel.selected(b, d7);
|
jaroslav@49
|
280 |
BoardModel.selected(b, d5);
|
jaroslav@49
|
281 |
|
jaroslav@49
|
282 |
// ignore all other figures than the three pawns
|
jaroslav@49
|
283 |
BoardModel.moveResponse(b, null, Collections.singletonList("PE4"),
|
jaroslav@49
|
284 |
Arrays.asList("PD5", "PE7"), Color.W, null
|
jaroslav@49
|
285 |
);
|
jaroslav@49
|
286 |
|
jaroslav@49
|
287 |
setPlayer(b, Color.W);
|
jaroslav@49
|
288 |
|
jaroslav@49
|
289 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
290 |
BoardModel.selected(b, e5);
|
jaroslav@49
|
291 |
|
jaroslav@49
|
292 |
// ignore all other figures than the three pawns
|
jaroslav@49
|
293 |
BoardModel.moveResponse(b, null, Collections.singletonList("PE5"),
|
jaroslav@49
|
294 |
Arrays.asList("PD5", "PE7"), Color.B, null
|
jaroslav@49
|
295 |
);
|
jaroslav@49
|
296 |
|
jaroslav@49
|
297 |
setPlayer(b, Color.B);
|
jaroslav@49
|
298 |
|
jaroslav@49
|
299 |
BoardModel.selected(b, e7);
|
jaroslav@49
|
300 |
assertTrue(e6.isAccessible(), "Can move by one piece");
|
jaroslav@49
|
301 |
assertFalse(e5.isAccessible(), "Can't move where other pawn is");
|
jaroslav@49
|
302 |
}
|
jaroslav@49
|
303 |
|
jaroslav@49
|
304 |
@Test public void showFirstMove() {
|
jaroslav@49
|
305 |
Board b = Rules.createBoard();
|
jaroslav@49
|
306 |
setPlayer(b, Color.W);
|
jaroslav@49
|
307 |
Square e2 = BoardModel.findSquare(b, 'E', 2);
|
jaroslav@49
|
308 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
309 |
Square d7 = BoardModel.findSquare(b, 'D', 7);
|
jaroslav@49
|
310 |
Square d5 = BoardModel.findSquare(b, 'D', 5);
|
jaroslav@49
|
311 |
|
jaroslav@49
|
312 |
BoardModel.selected(b, e2);
|
jaroslav@49
|
313 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
314 |
|
jaroslav@49
|
315 |
// ignore all other figures than the two pawns
|
jaroslav@49
|
316 |
BoardModel.moveResponse(b, null, Collections.singletonList("Pe4"),
|
jaroslav@49
|
317 |
Collections.singletonList("PD7"), Color.B, null
|
jaroslav@49
|
318 |
);
|
jaroslav@49
|
319 |
|
jaroslav@49
|
320 |
Move blackMv = BoardModel.MoveImpl.valueOf("D7D5");
|
jaroslav@49
|
321 |
BoardModel.moveUpdate(b, blackMv,
|
jaroslav@49
|
322 |
Collections.singletonList("PE4"),
|
jaroslav@49
|
323 |
Collections.singletonList("PD5"),
|
jaroslav@49
|
324 |
Color.W, null
|
jaroslav@49
|
325 |
);
|
jaroslav@49
|
326 |
|
jaroslav@49
|
327 |
|
jaroslav@49
|
328 |
assertEquals(b.getMoves().size(), 2, "Two moves");
|
jaroslav@49
|
329 |
BoardModel.showPosition(b, b.getMoves().get(0));
|
jaroslav@49
|
330 |
|
jaroslav@49
|
331 |
assertEquals(b.getRows().size(), 8, "Still eight rows");
|
jaroslav@49
|
332 |
assertEquals(b.getRows().get(0).getColumns().size(), 8, "Eight columns");
|
jaroslav@49
|
333 |
|
jaroslav@49
|
334 |
assertNull(e2.getPiece(), "e2 is empty");
|
jaroslav@49
|
335 |
assertEquals(e4.getPiece(), PieceType.PAWN, "e4 has pawn");
|
jaroslav@49
|
336 |
assertEquals(d7.getPiece(), PieceType.PAWN, "d7 has pawn");
|
jaroslav@49
|
337 |
assertNull(d5.getPiece(), "Second move is not made");
|
jaroslav@49
|
338 |
assertNull(b.getTurn(), "Nobody to make a move");
|
jaroslav@49
|
339 |
}
|
jaroslav@49
|
340 |
|
jaroslav@49
|
341 |
@Test public void initialPositionReadFromAServer() {
|
jaroslav@49
|
342 |
List<String> blacks = Arrays.asList(
|
jaroslav@49
|
343 |
"Pa7",
|
jaroslav@49
|
344 |
"Pb7",
|
jaroslav@49
|
345 |
"Pc7",
|
jaroslav@49
|
346 |
"Pd7",
|
jaroslav@49
|
347 |
"Pe7",
|
jaroslav@49
|
348 |
"Pf7",
|
jaroslav@49
|
349 |
"Pg7",
|
jaroslav@49
|
350 |
"Ph7",
|
jaroslav@49
|
351 |
"Ra8",
|
jaroslav@49
|
352 |
"Nb8",
|
jaroslav@49
|
353 |
"Bc8",
|
jaroslav@49
|
354 |
"Qd8",
|
jaroslav@49
|
355 |
"Ke8",
|
jaroslav@49
|
356 |
"Bf8",
|
jaroslav@49
|
357 |
"Ng8",
|
jaroslav@49
|
358 |
"Rh8"
|
jaroslav@49
|
359 |
);
|
jaroslav@49
|
360 |
List<String> whites = Arrays.asList(
|
jaroslav@49
|
361 |
"Ra1",
|
jaroslav@49
|
362 |
"Nb1",
|
jaroslav@49
|
363 |
"Bc1",
|
jaroslav@49
|
364 |
"Qd1",
|
jaroslav@49
|
365 |
"Ke1",
|
jaroslav@49
|
366 |
"Bf1",
|
jaroslav@49
|
367 |
"Ng1",
|
jaroslav@49
|
368 |
"Rh1",
|
jaroslav@49
|
369 |
"Pa2",
|
jaroslav@49
|
370 |
"Pb2",
|
jaroslav@49
|
371 |
"Pc2",
|
jaroslav@49
|
372 |
"Pd2",
|
jaroslav@49
|
373 |
"Pe2",
|
jaroslav@49
|
374 |
"Pf2",
|
jaroslav@49
|
375 |
"Pg2",
|
jaroslav@49
|
376 |
"Ph2"
|
jaroslav@49
|
377 |
);
|
jaroslav@49
|
378 |
|
jaroslav@49
|
379 |
Board b = Rules.createBoard();
|
jaroslav@49
|
380 |
Rules.initBoard(b, whites, blacks, Color.W);
|
jaroslav@49
|
381 |
|
jaroslav@49
|
382 |
Board b2 = Rules.createBoard();
|
jaroslav@49
|
383 |
Rules.initBoard(b2);
|
jaroslav@49
|
384 |
|
jaroslav@49
|
385 |
for (int i = 0; i < 7; i++) {
|
jaroslav@49
|
386 |
for (int j = 0; j < 7; j++) {
|
jaroslav@49
|
387 |
Square s = b.getRows().get(i).getColumns().get(j);
|
jaroslav@49
|
388 |
Square s2 = b2.getRows().get(i).getColumns().get(j);
|
jaroslav@49
|
389 |
|
jaroslav@49
|
390 |
assertEquals(s.getPiece(), s2.getPiece(), "Same piece at " + i + "/" + j);
|
jaroslav@49
|
391 |
assertEquals(s.getPieceColor(), s2.getPieceColor(), "Same piece color at " + i + "/" + j);
|
jaroslav@49
|
392 |
}
|
jaroslav@49
|
393 |
}
|
jaroslav@49
|
394 |
}
|
jaroslav@49
|
395 |
|
jaroslav@49
|
396 |
@Test public void allowSmallRochade() {
|
jaroslav@49
|
397 |
Board b = Rules.createBoard();
|
jaroslav@49
|
398 |
setPlayer(b, Color.W);
|
jaroslav@49
|
399 |
Square f1 = BoardModel.findSquare(b, 'F', 1);
|
jaroslav@49
|
400 |
f1.setPiece(null);
|
jaroslav@49
|
401 |
f1.setPieceColor(null);
|
jaroslav@49
|
402 |
Square g1 = BoardModel.findSquare(b, 'G', 1);
|
jaroslav@49
|
403 |
g1.setPiece(null);
|
jaroslav@49
|
404 |
g1.setPieceColor(null);
|
jaroslav@49
|
405 |
Square e1 = BoardModel.findSquare(b, 'E', 1);
|
jaroslav@49
|
406 |
|
jaroslav@49
|
407 |
BoardModel.selected(b, e1);
|
jaroslav@49
|
408 |
assertTrue(g1.isAccessible(), "Can do 0-0");
|
jaroslav@49
|
409 |
}
|
jaroslav@49
|
410 |
|
jaroslav@49
|
411 |
@Test public void allowSmallRochadeForBlack() {
|
jaroslav@49
|
412 |
Board b = Rules.createBoard();
|
jaroslav@49
|
413 |
setPlayer(b, Color.B);
|
jaroslav@49
|
414 |
b.setTurn(Color.B);
|
jaroslav@49
|
415 |
Square f8 = BoardModel.findSquare(b, 'F', 8);
|
jaroslav@49
|
416 |
f8.setPiece(null);
|
jaroslav@49
|
417 |
f8.setPieceColor(null);
|
jaroslav@49
|
418 |
Square g8 = BoardModel.findSquare(b, 'G', 8);
|
jaroslav@49
|
419 |
g8.setPiece(null);
|
jaroslav@49
|
420 |
g8.setPieceColor(null);
|
jaroslav@49
|
421 |
Square e8 = BoardModel.findSquare(b, 'E', 8);
|
jaroslav@49
|
422 |
|
jaroslav@49
|
423 |
BoardModel.selected(b, e8);
|
jaroslav@49
|
424 |
assertTrue(g8.isAccessible(), "Can do 0-0");
|
jaroslav@49
|
425 |
}
|
jaroslav@49
|
426 |
|
jaroslav@49
|
427 |
@Test public void disallowSmallRochadeWhenNoRock() {
|
jaroslav@49
|
428 |
Board b = Rules.createBoard();
|
jaroslav@49
|
429 |
setPlayer(b, Color.W);
|
jaroslav@49
|
430 |
Square f1 = BoardModel.findSquare(b, 'F', 1);
|
jaroslav@49
|
431 |
f1.setPiece(null);
|
jaroslav@49
|
432 |
f1.setPieceColor(null);
|
jaroslav@49
|
433 |
Square g1 = BoardModel.findSquare(b, 'G', 1);
|
jaroslav@49
|
434 |
g1.setPiece(null);
|
jaroslav@49
|
435 |
g1.setPieceColor(null);
|
jaroslav@49
|
436 |
Square h1 = BoardModel.findSquare(b, 'H', 1);
|
jaroslav@49
|
437 |
h1.setPiece(null);
|
jaroslav@49
|
438 |
h1.setPieceColor(null);
|
jaroslav@49
|
439 |
Square e1 = BoardModel.findSquare(b, 'E', 1);
|
jaroslav@49
|
440 |
|
jaroslav@49
|
441 |
BoardModel.selected(b, e1);
|
jaroslav@49
|
442 |
assertFalse(g1.isAccessible(), "Cannot do 0-0 when there is no rock");
|
jaroslav@49
|
443 |
}
|
jaroslav@49
|
444 |
|
jaroslav@49
|
445 |
@Test public void disallowSmallRochadeWhenBishop() {
|
jaroslav@49
|
446 |
Board b = Rules.createBoard();
|
jaroslav@49
|
447 |
setPlayer(b, Color.W);
|
jaroslav@49
|
448 |
Square g1 = BoardModel.findSquare(b, 'G', 1);
|
jaroslav@49
|
449 |
g1.setPiece(null);
|
jaroslav@49
|
450 |
Square e1 = BoardModel.findSquare(b, 'E', 1);
|
jaroslav@49
|
451 |
|
jaroslav@49
|
452 |
BoardModel.selected(b, e1);
|
jaroslav@49
|
453 |
assertFalse(g1.isAccessible(), "Cannot do 0-0 when there is bishop");
|
jaroslav@49
|
454 |
}
|
jaroslav@49
|
455 |
|
jaroslav@49
|
456 |
@Test public void disallowSmallRochadeWhenKnight() {
|
jaroslav@49
|
457 |
Board b = Rules.createBoard();
|
jaroslav@49
|
458 |
setPlayer(b, Color.W);
|
jaroslav@49
|
459 |
Square f1 = BoardModel.findSquare(b, 'F', 1);
|
jaroslav@49
|
460 |
f1.setPiece(null);
|
jaroslav@49
|
461 |
Square e1 = BoardModel.findSquare(b, 'E', 1);
|
jaroslav@49
|
462 |
|
jaroslav@49
|
463 |
BoardModel.selected(b, e1);
|
jaroslav@49
|
464 |
assertFalse(f1.isAccessible(), "Cannot do 0-0 when there is knight");
|
jaroslav@49
|
465 |
}
|
jaroslav@49
|
466 |
|
jaroslav@49
|
467 |
@Test public void allowBigRochadeForBlack() {
|
jaroslav@49
|
468 |
Board b = Rules.createBoard();
|
jaroslav@49
|
469 |
setPlayer(b, Color.B);
|
jaroslav@49
|
470 |
b.setTurn(Color.B);
|
jaroslav@49
|
471 |
Square b8 = BoardModel.findSquare(b, 'B', 8);
|
jaroslav@49
|
472 |
b8.setPiece(null);
|
jaroslav@49
|
473 |
b8.setPieceColor(null);
|
jaroslav@49
|
474 |
Square c8 = BoardModel.findSquare(b, 'C', 8);
|
jaroslav@49
|
475 |
c8.setPiece(null);
|
jaroslav@49
|
476 |
c8.setPieceColor(null);
|
jaroslav@49
|
477 |
Square d8 = BoardModel.findSquare(b, 'D', 8);
|
jaroslav@49
|
478 |
d8.setPiece(null);
|
jaroslav@49
|
479 |
d8.setPieceColor(null);
|
jaroslav@49
|
480 |
Square e8 = BoardModel.findSquare(b, 'E', 8);
|
jaroslav@49
|
481 |
|
jaroslav@49
|
482 |
BoardModel.selected(b, e8);
|
jaroslav@49
|
483 |
assertTrue(c8.isAccessible(), "Can do 0-0-0");
|
jaroslav@49
|
484 |
}
|
jaroslav@49
|
485 |
|
jaroslav@49
|
486 |
@Test public void enPassant() {
|
jaroslav@49
|
487 |
Board b = Rules.createBoard();
|
jaroslav@49
|
488 |
setPlayer(b, Color.B);
|
jaroslav@49
|
489 |
b.setTurn(Color.B);
|
jaroslav@49
|
490 |
|
jaroslav@49
|
491 |
Square e7 = BoardModel.findSquare(b, 'E', 7);
|
jaroslav@49
|
492 |
Square e4 = BoardModel.findSquare(b, 'E', 4);
|
jaroslav@49
|
493 |
movePiece(e7, e4);
|
jaroslav@49
|
494 |
|
jaroslav@49
|
495 |
Move move = new Move();
|
jaroslav@49
|
496 |
move.setFrom(position('D', 2));
|
jaroslav@49
|
497 |
move.setTo(position('D', 4));
|
jaroslav@49
|
498 |
move.setPiece(PieceType.PAWN);
|
jaroslav@49
|
499 |
b.getMoves().add(move);
|
jaroslav@49
|
500 |
|
jaroslav@49
|
501 |
Square d2 = BoardModel.findSquare(b, 'D', 2);
|
jaroslav@49
|
502 |
Square d4 = BoardModel.findSquare(b, 'D', 4);
|
jaroslav@49
|
503 |
movePiece(d2, d4);
|
jaroslav@49
|
504 |
|
jaroslav@49
|
505 |
BoardModel.selected(b, e4);
|
jaroslav@49
|
506 |
|
jaroslav@49
|
507 |
Square e3 = BoardModel.findSquare(b, 'E', 3);
|
jaroslav@49
|
508 |
assertTrue(e3.isAccessible(), "Obviously can move to e3");
|
jaroslav@49
|
509 |
|
jaroslav@49
|
510 |
Square d3 = BoardModel.findSquare(b, 'D', 3);
|
jaroslav@49
|
511 |
assertTrue(d3.isAccessible(), "Can also take on d3");
|
jaroslav@49
|
512 |
}
|
jaroslav@49
|
513 |
|
jaroslav@49
|
514 |
private void movePiece(Square from, Square to) {
|
jaroslav@49
|
515 |
to.setPiece(from.getPiece());
|
jaroslav@49
|
516 |
to.setPieceColor(from.getPieceColor());
|
jaroslav@49
|
517 |
from.setPiece(null);
|
jaroslav@49
|
518 |
from.setPieceColor(null);
|
jaroslav@49
|
519 |
}
|
jaroslav@49
|
520 |
|
jaroslav@49
|
521 |
private Position position(char c, int i) {
|
jaroslav@49
|
522 |
Position p = new Position();
|
jaroslav@49
|
523 |
p.setX(c);
|
jaroslav@49
|
524 |
p.setY(i);
|
jaroslav@49
|
525 |
return p;
|
jaroslav@49
|
526 |
}
|
jaroslav@49
|
527 |
|
jaroslav@49
|
528 |
private static void setPlayer(Board b, Color c) {
|
jaroslav@49
|
529 |
b.setWhitePlayer("x");
|
jaroslav@49
|
530 |
b.setBlackPlayer("y");
|
jaroslav@49
|
531 |
if (c == Color.B) {
|
jaroslav@49
|
532 |
b.setPlayer("y");
|
jaroslav@49
|
533 |
} else {
|
jaroslav@49
|
534 |
b.setPlayer("x");
|
jaroslav@49
|
535 |
}
|
jaroslav@49
|
536 |
}
|
jaroslav@49
|
537 |
}
|