View Javadoc
1   /******************************************************************************
2    * TestBoard.java - Test the backgammon board 
3    * $Id$
4    * 
5    * BuckoFIBS - Backgammon by BuckoSoft
6    * Copyright© 2011 - Dick Balaska - BuckoSoft, Corp.
7    * 
8    * $Log$
9    * Revision 1.1  2013/09/08 08:59:01  dick
10   * Move tests to the same name as the testing package.
11   * (remove 'test' subpackage) so we can get at protected methods.
12   *
13   * Revision 1.6  2011/06/15 04:37:43  dick
14   * Maybe full coverage of Board?
15   *
16   * Revision 1.5  2011/06/15 02:57:29  dick
17   * Fix dice tests.
18   *
19   * Revision 1.4  2011/06/15 00:42:38  dick
20   * Add testClone().
21   *
22   * Revision 1.3  2011/06/02 18:49:38  dick
23   * whitespace.
24   *
25   * Revision 1.2  2011/05/21 05:08:15  dick
26   * Doubling functions are in the Board, not the Document.
27   *
28   * Revision 1.1  2011/05/14 05:20:01  dick
29   * I needed to deal with some lightweight Boards.
30   * So finally make the primary document Document
31   * and demote just the Board handling to a domain object.
32   *
33   * Revision 1.1  2011/05/06 23:47:20  dick
34   * First BuckoFIBS JUnit tests.
35   *
36   */
37  
38  /* 
39   * This program is free software: you can redistribute it and/or modify
40   * it under the terms of the GNU General Public License as published by
41   * the Free Software Foundation, either version 3 of the License, or
42   * (at your option) any later version.
43   *
44   * This program is distributed in the hope that it will be useful,
45   * but WITHOUT ANY WARRANTY; without even the implied warranty of
46   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
47   * GNU General Public License for more details.
48   *
49   * You should have received a copy of the GNU General Public License
50   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
51   *
52   * The Original Code is BuckoFIBS, <http://www.buckosoft.com/BuckoFIBS/>.
53   * The Initial Developer of the Original Code is Dick Balaska and BuckoSoft, Corp.
54   * 
55   */
56  package com.buckosoft.fibs.domain;
57  
58  import junit.framework.TestCase;
59  
60  import org.junit.Test;
61  
62  import com.buckosoft.fibs.domain.Board;
63  
64  /** Test the {@link com.buckosoft.fibs.domain.Board}
65   * @author dick
66   * @since 2011/05/06
67   * @see <a href="http://cvs.buckosoft.com/Projects/BuckoFIBS/BuckoFIBS/src/test/java/com/buckosoft/fibs/test/domain/TestBoard.java">cvs TestBoard.java</a>
68  
69   */
70  public class TestBoard extends TestCase {
71  
72  	private Board board = null;
73  
74  	// dice=4,4, standard opening board, mayDouble
75  	private String fibsBoard = "board:You:someplayer:3:0:0:1:-2:0:0:0:0:5:0:3:0:0:0:-5:5:0:0:0:-3:0:-5:0:0:0:0:2:2:1:4:4:0:0:1:1:1:0:1:-1:0:25:0:0:0:0:2:0:0:0";
76  	// dice=1,4, points=...
77  	private String fibsBoard0 = "board:You:dickbalaska:35:5:7:0:3:3:2:1:3:1:0:0:0:0:0:0:0:0:0:0:0:0:-4:-3:-2:-1:-3:-2:0:-1:1:4:0:0:1:1:1:0:-1:1:25:0:0:2:0:0:2:0:0:0";
78  	// dice=6,2
79  	private String fibsBoard1 = "board:You:dickbalaska:35:5:7:0:3:3:2:1:3:1:0:0:0:0:0:0:0:0:0:0:0:0:-4:-3:-2:-1:-3:-2:0:-1:6:2:0:0:1:1:1:0:-1:1:25:0:0:2:0:0:2:0:0:0";
80  	// dice=6,2, home/bar=1,2,3,4
81  	private String fibsBoard2 = "board:You:dickbalaska:35:5:7:0:3:3:2:1:3:1:0:0:0:0:0:0:0:0:0:0:0:0:-4:-3:-2:-1:-3:-2:0:-1:6:2:0:0:1:1:1:0:-1:1:25:0:1:2:3:4:2:0:0:0";
82  	// dice=1,2, wasDoubled=f,t
83  	private String fibsBoard3 = "board:You:dickbalaska:35:5:7:0:3:3:2:1:3:1:0:0:0:0:0:0:0:0:0:0:0:0:-4:-3:-2:-1:-3:-2:0:-1:1:2:0:0:1:1:1:1:-1:1:25:0:0:2:0:0:2:0:0:0";
84  	// dice=4,4, standard opening board, !mayDouble
85  	private String fibsBoard4 = "board:You:someplayer:3:0:0:1:-2:0:0:0:0:5:0:3:0:0:0:-5:5:0:0:0:-3:0:-5:0:0:0:0:2:2:1:4:4:0:0:1:0:1:0:1:-1:0:25:0:0:0:0:2:0:0:0";
86  	// blotslot = 1 blitzxz = 0
87  	private	String fibsBoard5 = "board:blitzxz:blotsalot:5:0:1:0:0:2:-2:0:2:3:3:2:3:0:0:0:0:0:0:0:-1:-1:-3:-2:-2:-2:-2:0:0:-1:0:0:0:0:2:1:0:0:-1:1:25:0:0:0:0:0:2:3:0:0";
88  	// dice=0,0, blotslot = 1 blitzxz = 4
89  	private	String fibsBoard6 = "board:blitzxz:blotsalot:5:4:1:0:0:2:-2:0:2:3:3:2:3:0:0:0:0:0:0:0:-1:-1:-3:-2:-2:-2:-2:0:0:-1:0:0:0:0:0:0:0:0:-1:1:25:0:0:0:0:0:2:3:0:0";
90  	// opponent dice 2,6
91  	private String fibsBoard8 = "board:You:dickbalaska:35:5:7:0:3:3:2:1:3:1:0:0:0:0:0:0:0:0:0:0:0:0:-4:-3:-2:-1:-3:-2:0:-1:0:0:2:6:1:1:1:0:-1:1:25:0:0:2:0:0:2:0:0:0";
92  
93  	// alaskamon playing, race
94  	private String fibsBoard7 = "board:dooldoo:asl:5:0:0:0:3:0:2:0:0:0:0:0:0:-2:0:-2:0:0:-1:0:0:0:-6:-2:-2:0:0:0:0:-1:0:0:0:0:2:1:0:0:-1:1:25:0:0:10:0:0:2:4:0:0";
95  	private String fibsBoardR0= "board:AverageMark:SuperDaveK:5:0:0:-1:2:0:2:0:-1:2:0:3:0:0:0:-3:4:0:-1:0:-2:0:-5:-2:0:2:0:0:0:-1:4:1:0:0:1:1:1:0:-1:1:25:0:0:0:1:0:2:5:0:0";
96  	private String fibsBoardR1= "board:AverageMark:SuperDaveK:5:3:1:0:6:2:3:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:-2:0:-4:-2:3:0:1:2:2:0:0:2:1:0:0:1:-1:0:25:0:7:0:0:4:5:0:0";	
97  	
98  	private int[] initialPositions = new int[] {0,2,0,0,0,0,-5,0,-3,0,0,0,5,-5,0,0,0,3,0,5,0,0,0,0,-2};
99  	
100 	protected void setUp() {
101 		board = new Board();
102 	}
103 	
104 	@Test
105 	public void testParseFibsBoard() {
106 		board.parseFibsBoard(fibsBoard0);
107 		assertEquals("You", board.getPlayerName()[0]);
108 	}
109 
110 	@Test
111 	public void testGetDice() {
112 		int[][] dice;
113 		board = new Board();
114 		dice = board.getDice();
115 		assertEquals(0, dice[0][0]);
116 		assertEquals(0, dice[0][1]);
117 		assertEquals(0, dice[1][0]);
118 		assertEquals(0, dice[1][1]);
119 		board.parseFibsBoard(fibsBoard);
120 		dice = board.getDice();
121 		assertEquals(4, dice[0][0]);
122 		assertEquals(4, dice[0][1]);
123 	}
124 
125 	@Test
126 	public void testSetSortDice() {
127 		int[][] dice;
128 		board.setSortDice(true);
129 		board.parseFibsBoard(fibsBoard0);
130 		dice = board.getDice();
131 		assertEquals(4, dice[0][0]);
132 		assertEquals(1, dice[0][1]);
133 		board.parseFibsBoard(fibsBoard1);
134 		dice = board.getDice();
135 		assertEquals(6, dice[0][0]);
136 		assertEquals(2, dice[0][1]);
137 
138 		board.setSortDice(false);
139 		board.parseFibsBoard(fibsBoard0);
140 		dice = board.getDice();
141 		assertEquals(1, dice[0][0]);
142 		assertEquals(4, dice[0][1]);
143 		board.setSortDice(true);
144 		dice = board.getDice();
145 		assertEquals(4, dice[0][0]);
146 		assertEquals(1, dice[0][1]);
147 		board.parseFibsBoard(fibsBoard1);
148 		dice = board.getDice();
149 		assertEquals(6, dice[0][0]);
150 		assertEquals(2, dice[0][1]);
151 		board.parseFibsBoard(fibsBoard8);
152 		dice = board.getDice();
153 		assertEquals(6, dice[1][0]);
154 		assertEquals(2, dice[1][1]);
155 		board.setSortDice(false);
156 		board.parseFibsBoard(fibsBoard8);
157 		dice = board.getDice();
158 		assertEquals(2, dice[1][0]);
159 		assertEquals(6, dice[1][1]);
160 		board.setSortDice(true);
161 		assertEquals(6, dice[1][0]);
162 		assertEquals(2, dice[1][1]);
163 	}
164 
165 	@Test
166 	public void testGetPoints() {
167 		int	i;
168 		board.parseFibsBoard(fibsBoard0);
169 		int[] points = board.getPoints();
170 		int[] expected0 = new int[] { 0,3,3,2,1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,-4,-3,-2,-1,-3,-2,0 };
171 		for (i=0; i<expected0.length; i++) {
172 			assertEquals(expected0[i], points[i]);			
173 		}
174 	}
175 
176 	@Test
177 	public void testGetBar() {
178 		int[] bar;
179 		board.parseFibsBoard(fibsBoard);
180 		bar = board.getBar();
181 		assertEquals(0, bar[0]);
182 		assertEquals(0, bar[1]);
183 		board.parseFibsBoard(fibsBoard2);
184 		bar = board.getBar();
185 		assertEquals(3, bar[0]);
186 		assertEquals(4, bar[1]);
187 	}
188 
189 	@Test
190 	public void testGetHome() {
191 		int[] home;
192 		board.parseFibsBoard(fibsBoard);
193 		home = board.getHome();
194 		assertEquals(0, home[0]);
195 		assertEquals(0, home[1]);
196 		board.parseFibsBoard(fibsBoard2);
197 		home = board.getHome();
198 		assertEquals(1, home[0]);
199 		assertEquals(2, home[1]);
200 	}
201 
202 	@Test
203 	public void testGetWasDoubled() {
204 		boolean[] wd;
205 		//board.resetGame();
206 		wd = board.getWasDoubled();
207 		assertFalse(wd[0]);
208 		assertFalse(wd[1]);
209 		board.parseFibsBoard(fibsBoard3);
210 		wd = board.getWasDoubled();
211 		assertFalse(wd[0]);
212 //		assertTrue(wd[1]);
213 	}
214 
215 
216 	@Test
217 	public void testIsYouMayDouble() {
218 		board.parseFibsBoard(fibsBoard);
219 		assertTrue(board.isYouMayDouble());
220 		board.parseFibsBoard(fibsBoard4);
221 		assertFalse(board.isYouMayDouble());
222 		assertTrue(board.isOpponentMayDouble());
223 	}
224 
225 	@Test
226 	public void testIsYouPlaying() {
227 		board.parseFibsBoard(fibsBoard);
228 		assertTrue(board.isYouPlaying());
229 		board.parseFibsBoard(fibsBoard5);
230 		assertFalse(board.isYouPlaying());
231 	}
232 
233 	@Test
234 	public void testIsYourMove() {
235 		board.parseFibsBoard(fibsBoard);
236 		assertTrue(board.isYourMove());
237 		board.parseFibsBoard(fibsBoard6);
238 		assertFalse(board.isYourMove());
239 	}
240 
241 	@Test
242 	public void testPlayerName() {
243 		board.parseFibsBoard(fibsBoard);
244 		String[] p = board.getPlayerName();
245 		assertEquals("You", p[0]);
246 		assertEquals("someplayer", p[1]);
247 		board.parseFibsBoard(fibsBoard5);
248 		p = board.getPlayerName();
249 		assertEquals("blitzxz", p[0]);
250 		assertEquals("blotsalot", p[1]);
251 		
252 		board.setPlayerName(0, "Testx");
253 		assertEquals("Testx", board.getPlayerName()[0]);
254 		board.setPlayerName(1, "Testz");
255 		assertEquals("Testz", board.getPlayerName()[1]);
256 		assertEquals("Testx", board.getPlayerName()[0]);
257 	}
258 
259 	@Test
260 	public void testXOFromName() {
261 		board.parseFibsBoard(fibsBoard);
262 		assertEquals(Board.O, board.getXOFromName("You"));
263 		assertEquals(Board.X, board.getXOFromName("someplayer"));
264 		assertEquals(Board.XOnot, board.getXOFromName("nobody"));
265 	}
266 
267 	@Test
268 	public void testDirectionFromName() {
269 		board.parseFibsBoard(fibsBoard);
270 		assertEquals(-1, board.getDirectionFromName("You"));
271 		assertEquals(1, board.getDirectionFromName("someplayer"));
272 	}
273 
274 	@Test
275 	public void testGetMatchLength() {
276 		board.parseFibsBoard(fibsBoard);
277 		assertEquals(3, board.getMatchLength());
278 		board.parseFibsBoard(fibsBoard1);
279 		assertEquals(35, board.getMatchLength());
280 	}
281 
282 	@Test
283 	public void testGetMatchScore() {
284 		board.parseFibsBoard(fibsBoard);
285 		int[] ms = board.getMatchScore();
286 		assertEquals(0, ms[0]);
287 		assertEquals(0, ms[1]);
288 		board.parseFibsBoard(fibsBoard6);
289 		ms = board.getMatchScore();
290 		assertEquals(4, ms[0]);
291 		assertEquals(1, ms[1]);
292 	}
293 
294 
295 	private boolean checkStartPositions() {
296 		int[] p = board.getPoints();
297 		for (int i=1; i<=24; i++) {
298 			if (p[i] != initialPositions[i])
299 				return(false);
300 		}
301 		return(true);
302 	}
303 	@Test
304 	public void testSetStartPositions() {
305 		board.parseFibsBoard(fibsBoard6);
306 		assertFalse(checkStartPositions());
307 		board.setStartPositions();
308 		assertTrue(checkStartPositions());
309 	}
310 
311 	@Test
312 	public void testGetXO() {
313 		board.parseFibsBoard(fibsBoard);
314 		assertEquals(1, board.getXO());
315 	}
316 
317 	private boolean isClearDice() {
318 		int[][] d = board.getDice();
319 		if (d[0][0] != 0 
320 		 || d[0][1] != 0
321 		 || d[1][0] != 0
322 		 || d[1][1] != 0)
323 			return(false);
324 		return(true);
325 	}
326 	@Test
327 	public void testClearDice() {
328 		board.parseFibsBoard(fibsBoard);
329 		assertFalse(isClearDice());
330 		board.clearDice();
331 		assertTrue(isClearDice());
332 	}
333 
334 	@Test
335 	public void testGetWhosTurn() {
336 		board = new Board();
337 		assertEquals(0, board.getWhosTurn());		// should be a game over condition
338 		board.parseFibsBoard(fibsBoard);
339 		assertEquals(1, board.getWhosTurn());
340 		board.parseFibsBoard(fibsBoard1);
341 		assertEquals(-1, board.getWhosTurn());
342 	}
343 
344 	@Test
345 	public void testGetCube() {
346 		board.parseFibsBoard(fibsBoard);
347 		assertEquals(1, board.getCube());
348 		board.parseFibsBoard(fibsBoard5);
349 		assertEquals(2, board.getCube());
350 	}
351 
352 	@Test
353 	public void testGetHasCube() {
354 		board.parseFibsBoard(fibsBoard);
355 		assertEquals(-1, board.getHasCube());
356 		board.parseFibsBoard(fibsBoard5);
357 		assertEquals(1, board.getHasCube());
358 	}
359 
360 	@Test
361 	public void testGetDirection() {
362 		board.parseFibsBoard(fibsBoard);
363 		assertEquals(-1, board.getDirection());
364 	}
365 	@Test
366 	public void testSetAcceptDeclineDouble() {
367 		// document.resetGame();
368 		assertFalse(board.isAcceptDeclineDouble());
369 		board.setAcceptDeclineDouble();
370 		assertTrue(board.isAcceptDeclineDouble());
371 	}
372 
373 	@Test
374 	public void testIsAcceptDeclineDouble() {
375 		// document.resetGame();
376 		assertFalse(board.isAcceptDeclineDouble());
377 		board.setAcceptDeclineDouble();
378 		assertTrue(board.isAcceptDeclineDouble());
379 	}
380 
381 	@Test
382 	public void testIsYourTurnToRollOrDouble() {
383 		// document.resetGame();
384 		assertFalse(board.isYourTurnToRollOrDouble());
385 		board.setYourTurnToRollOrDouble(true);
386 		assertTrue(board.isYourTurnToRollOrDouble());
387 		board.setYourTurnToRollOrDouble(false);
388 		assertFalse(board.isYourTurnToRollOrDouble());
389 	}
390 
391 	@Test
392 	public void testSetYourTurnToRollOrDouble() {
393 		// document.resetGame();
394 		assertFalse(board.isYourTurnToRollOrDouble());
395 		board.setYourTurnToRollOrDouble(true);
396 		assertTrue(board.isYourTurnToRollOrDouble());
397 		board.setYourTurnToRollOrDouble(false);
398 		assertFalse(board.isYourTurnToRollOrDouble());
399 	}
400 
401 	@Test
402 	public void testIsAcceptDeclineResign() {
403 		board.setAcceptDeclineResign(false);
404 		assertFalse(board.isAcceptDeclineResign());
405 		board.setAcceptDeclineResign(true);
406 		assertTrue(board.isAcceptDeclineResign());
407 		
408 	}
409 
410 	@Test
411 	public void testWhoIsResigning() {
412 		board.setWhoIsResigning(0);
413 		assertEquals(0, board.getWhoIsResigning());
414 		board.setWhoIsResigning(1);
415 		assertEquals(1, board.getWhoIsResigning());
416 	}
417 
418 	@Test
419 	public void testResigningPoints() {
420 		board.setResigningPoints(2);
421 		assertEquals(2, board.getResigningPoints());
422 		board.setResigningPoints(3);
423 		assertEquals(3, board.getResigningPoints());
424 	}
425 
426 	@Test
427 	public void testOnMatchOver() {
428 		board.onMatchOver("Betty", "5-1");
429 		int[] ms = board.getMatchScore();
430 		assertEquals(1, ms[0]);
431 		assertEquals(5, ms[1]);
432 		board.onMatchOver("You", "3-2");
433 		ms = board.getMatchScore();
434 		assertEquals(3, ms[0]);
435 		assertEquals(2, ms[1]);
436 	}
437 
438 	@Test
439 	public void testGetPipCount() {
440 		board.parseFibsBoard(fibsBoard);
441 		int[] pc = board.getPipCount();
442 		assertEquals(167, pc[0]);
443 		assertEquals(167, pc[1]);
444 	}
445 
446 	@Test
447 	public void testIsRace() {
448 		board.parseFibsBoard(fibsBoard);
449 		assertFalse(board.isRace());
450 		board.parseFibsBoard(fibsBoard2);
451 		assertFalse(board.isRace());
452 		board.parseFibsBoard(fibsBoard6);
453 		assertFalse(board.isRace());
454 		board.parseFibsBoard(fibsBoard7);
455 		assertTrue(board.isRace());
456 		board.parseFibsBoard(fibsBoardR0);
457 		assertFalse(board.isRace());
458 		board.parseFibsBoard(fibsBoardR1);
459 		assertFalse(board.isRace());
460 	}
461 
462 	@Test
463 	public void testClone() {
464 		Board b = new Board();
465 		b.parseFibsBoard(fibsBoard);
466 		Board b2 = b.clone();
467 		assertEquals(b.getXO(), b2.getXO());
468 		assertEquals(b.getMatchLength(), b2.getMatchLength());
469 		assertEquals(b.getMatchScore()[0], b2.getMatchScore()[0]);
470 		assertEquals(b.getMatchScore()[1], b2.getMatchScore()[1]);
471 		assertEquals(b.getDice()[0][0], b2.getDice()[0][0]);
472 		assertEquals(b.getDice()[0][1], b2.getDice()[0][1]);
473 		assertEquals(b.getDice()[1][0], b2.getDice()[1][0]);
474 		assertEquals(b.getDice()[1][1], b2.getDice()[1][1]);
475 		assertNotSame(b.getDice(), b2.getDice());
476 		assertEquals(b.getDirection(), b2.getDirection());
477 		assertEquals(b.getPlayerName()[0], b2.getPlayerName()[0]);
478 		assertEquals(b.getPlayerName()[1], b2.getPlayerName()[1]);
479 		for (int i=0; i<26; i++)
480 			assertEquals(b.getPoints()[i], b2.getPoints()[i]);
481 		assertEquals(b.getBar()[0], b2.getBar()[0]);
482 		assertEquals(b.getBar()[1], b2.getBar()[1]);
483 		assertEquals(b.getHome()[0], b2.getHome()[0]);
484 		assertEquals(b.getHome()[1], b2.getHome()[1]);
485 		assertEquals(b.getWhosTurn(), b2.getWhosTurn());
486 		assertEquals(b.getCube(), b2.getCube());
487 		assertEquals(b.getHasCube(), b2.getHasCube());
488 		assertEquals(b.isYouMayDouble(), b2.isYouMayDouble());
489 		assertEquals(b.isAcceptDeclineDouble(), b2.isAcceptDeclineDouble());
490 		assertEquals(b.isAcceptDeclineResign(), b2.isAcceptDeclineResign());
491 		assertEquals(b.isOpponentMayDouble(), b2.isOpponentMayDouble());
492 		assertEquals(b.isRace(), b2.isRace());
493 		assertEquals(b.isYouMayDouble(), b2.isYouMayDouble());
494 		assertEquals(b.isYouPlaying(), b2.isYouPlaying());
495 		assertEquals(b.isYourMove(), b2.isYourMove());
496 		assertEquals(b.isYourTurnToRollOrDouble(), b2.isYourTurnToRollOrDouble());
497 	}
498 }