You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
15 KiB

  1. package Game.ChessObj;
  2. import org.junit.jupiter.api.AfterEach;
  3. import org.junit.jupiter.api.BeforeEach;
  4. import org.junit.jupiter.api.Test;
  5. import static org.junit.jupiter.api.Assertions.*;
  6. import static org.mockito.Mockito.mock;
  7. class ChessBoardTest {
  8. ChessFigure.Type[] startOrder = {
  9. ChessFigure.Type.CASTLE, ChessFigure.Type.KNIGHT, ChessFigure.Type.BISHOP, ChessFigure.Type.QUEEN, ChessFigure.Type.KING, ChessFigure.Type.BISHOP, ChessFigure.Type.KNIGHT, ChessFigure.Type.CASTLE
  10. };
  11. ChessBoard chessBoard;
  12. @BeforeEach
  13. void setUp() {
  14. chessBoard = new ChessBoard();
  15. }
  16. @AfterEach
  17. void tearDown() {
  18. }
  19. @Test
  20. void initBoard() {
  21. ChessFigure[][] board = chessBoard.getBoard();
  22. for (int x = 0; x < board[0].length; x++) {
  23. for (int y = 0; y < board.length; y++) {
  24. //test pawns
  25. if (y == 1) {
  26. assertEquals(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK), board[y][x]);
  27. continue;
  28. }
  29. if (y == 6) {
  30. assertEquals(new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE), board[y][x]);
  31. continue;
  32. }
  33. if (y == 0) {
  34. assertEquals(new ChessFigure(startOrder[x], ChessFigure.Team.BLACK), board[y][x]);
  35. continue;
  36. }
  37. if (y == 7) {
  38. assertEquals(new ChessFigure(startOrder[x], ChessFigure.Team.WHITE), board[y][x]);
  39. continue;
  40. }
  41. //rest should be empty(null)
  42. assertNull(board[y][x]);
  43. }
  44. }
  45. }
  46. @Test
  47. void getCellSymbols() {
  48. String[][] expectedArray = {
  49. {"|T|", "|Z|", "|I|", "|Q|", "|K|", "|I|", "|Z|", "|T|"},
  50. {"|o|", "|o|", "|o|", "|o|", "|o|", "|o|", "|o|", "|o|"},
  51. {" ", " ", " ", " ", " ", " ", " ", " "},
  52. {" ", " ", " ", " ", " ", " ", " ", " "},
  53. {" ", " ", " ", " ", " ", " ", " ", " "},
  54. {" ", " ", " ", " ", " ", " ", " ", " "},
  55. {" o ", " o ", " o ", " o ", " o ", " o ", " o ", " o "},
  56. {" T ", " Z ", " I ", " Q ", " K ", " I ", " Z ", " T "}
  57. };
  58. assertArrayEquals(expectedArray, chessBoard.getCellSymbols());
  59. }
  60. @Test
  61. void isCellInBoard() {
  62. assertTrue(chessBoard.isCellInBoard(0, 0));
  63. assertTrue(chessBoard.isCellInBoard(7, 7));
  64. assertTrue(chessBoard.isCellInBoard(2, 1));
  65. assertTrue(chessBoard.isCellInBoard(5, 7));
  66. assertFalse(chessBoard.isCellInBoard(-1, 0));
  67. assertFalse(chessBoard.isCellInBoard(4, 8));
  68. assertFalse(chessBoard.isCellInBoard(10, 20));
  69. }
  70. @Test
  71. void validateCleanPath() {
  72. ChessFigure[][] tempBoard = chessBoard.getBoard();
  73. tempBoard[3][0] = mock(ChessFigure.class);
  74. tempBoard[3][5] = mock(ChessFigure.class);
  75. chessBoard.setChessBoard(tempBoard);
  76. assertFalse(chessBoard.validateCleanPath(-2, 0, 1, 4));
  77. assertTrue(chessBoard.validateCleanPath(0, 3, 5, 3));
  78. assertFalse(chessBoard.validateCleanPath(0, 3, 6, 3));
  79. assertFalse(chessBoard.validateCleanPath(0, 3, 7, 3));
  80. assertFalse(chessBoard.validateCleanPath(0, 3, 5, 5));
  81. assertFalse(chessBoard.validateCleanPath(0, 3, 4, 7));
  82. assertTrue(chessBoard.validateCleanPath(0, 3, 2, 5));
  83. assertTrue(chessBoard.validateCleanPath(7, 3, 5, 5));
  84. assertFalse(chessBoard.validateCleanPath(7, 3, 6, 6));
  85. }
  86. /*
  87. 0 1 2 3 4 5 6 7
  88. 0
  89. 1
  90. 2 o
  91. 3 |o| |o|
  92. 4 o o
  93. 5 |o| |T|
  94. 6
  95. 7 T B
  96. */
  97. @Test
  98. void validateMove() {
  99. ChessFigure[][] tempBoard = new ChessFigure[8][8];
  100. tempBoard[4][2] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE);
  101. tempBoard[4][4] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE);
  102. tempBoard[2][4] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE);
  103. tempBoard[3][3] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK);
  104. tempBoard[3][5] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK);
  105. tempBoard[5][3] = new ChessFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK);
  106. tempBoard[7][2] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE);
  107. tempBoard[7][4] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE);
  108. tempBoard[5][6] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.BLACK);
  109. chessBoard.setChessBoard(tempBoard);
  110. //White pawn normal move
  111. assertTrue(chessBoard.validateMove(4, 2, 4, 1));
  112. assertFalse(chessBoard.validateMove(4, 2, 4, 3));
  113. assertFalse(chessBoard.validateMove(4, 2, 3, 1));
  114. assertFalse(chessBoard.validateMove(4, 2, 5, 1));
  115. //White pawn beats Black
  116. assertTrue(chessBoard.validateMove(4, 4, 3, 3));
  117. assertTrue(chessBoard.validateMove(4, 4, 5, 3));
  118. //Black pawn normal move
  119. assertTrue(chessBoard.validateMove(3, 5, 3, 6));
  120. assertFalse(chessBoard.validateMove(3, 5, 3, 4));
  121. assertFalse(chessBoard.validateMove(3, 5, 2, 6));
  122. assertFalse(chessBoard.validateMove(3, 5, 6, 6));
  123. //Black pawn beats White
  124. assertTrue(chessBoard.validateMove(3, 3, 2, 4));
  125. assertTrue(chessBoard.validateMove(3, 3, 4, 4));
  126. //CastleMoves for testing global rules
  127. assertTrue(chessBoard.validateMove(2, 7, 2, 5));
  128. assertFalse(chessBoard.validateMove(2, 7, 2, 4));
  129. assertFalse(chessBoard.validateMove(2, 7, 2, 2));
  130. //Bishop Moves for testing global moves
  131. assertTrue(chessBoard.validateMove(4, 7, 5, 6));
  132. assertTrue(chessBoard.validateMove(4, 7, 6, 5));
  133. assertFalse(chessBoard.validateMove(4, 7, 7, 4));
  134. }
  135. /*
  136. 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
  137. 0 0
  138. 1 T K 1 K
  139. 2 2
  140. 3 Z 3 Z
  141. -->
  142. 4 4 B
  143. 5 |Q| 5 T
  144. 6 B 6
  145. 7 7
  146. */
  147. @Test
  148. void moveFigure() {
  149. ChessFigure[][] tempBoard = new ChessFigure[8][8];
  150. ChessFigure[][] resultBoard = new ChessFigure[8][8];
  151. tempBoard[1][3] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE);
  152. tempBoard[1][7] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE);
  153. tempBoard[6][6] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE);
  154. tempBoard[3][5] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE);
  155. tempBoard[5][2] = new ChessFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK);
  156. resultBoard[5][2] = new ChessFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE);
  157. resultBoard[1][7] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE);
  158. resultBoard[4][4] = new ChessFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE);
  159. resultBoard[3][5] = new ChessFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE);
  160. chessBoard.setChessBoard(tempBoard);
  161. assertEquals(chessBoard.moveFigure(3, 1, 2, 1), ChessBoard.MoveFeedback.MOVE);
  162. assertEquals(chessBoard.moveFigure(2, 1, 2, 5), ChessBoard.MoveFeedback.ENEMYBEATEN);
  163. assertEquals(chessBoard.moveFigure(6, 6, 4, 4), ChessBoard.MoveFeedback.MOVE);
  164. assertEquals(chessBoard.moveFigure(7, 1, 8, 1), ChessBoard.MoveFeedback.OUTSIDEOFBOARD);
  165. assertEquals(chessBoard.moveFigure(5, 3, 4, 2), ChessBoard.MoveFeedback.INVALID);
  166. assertArrayEquals(resultBoard, chessBoard.getBoard());
  167. }
  168. @Test
  169. void scanForOccurringFigure() {
  170. assertEquals(8, chessBoard.scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.WHITE));
  171. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.WHITE));
  172. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.WHITE));
  173. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.WHITE));
  174. assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.WHITE));
  175. assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.WHITE));
  176. assertEquals(8, chessBoard.scanForOccurringFigure(ChessFigure.Type.PAWN, ChessFigure.Team.BLACK));
  177. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.CASTLE, ChessFigure.Team.BLACK));
  178. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.BISHOP, ChessFigure.Team.BLACK));
  179. assertEquals(2, chessBoard.scanForOccurringFigure(ChessFigure.Type.KNIGHT, ChessFigure.Team.BLACK));
  180. assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.QUEEN, ChessFigure.Team.BLACK));
  181. assertEquals(1, chessBoard.scanForOccurringFigure(ChessFigure.Type.KING, ChessFigure.Team.BLACK));
  182. }
  183. }