package Game.TicTacToe; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.internal.util.reflection.FieldSetter; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.*; class BoardTest { Board board; @BeforeEach void setUp() { board = new Board(); } @AfterEach void tearDown() { } @Test void getStatedChar() { assertEquals(Board.getStatedChar(Board.State.CIRCLE), 'O'); assertEquals(Board.getStatedChar(Board.State.CROSS), 'X'); assertEquals(Board.getStatedChar(Board.State.EMPTY), ' '); } @Test void testForEmptyBoardOnInitialization() { for (int i = 0; i < 9; i++) { assertEquals(board.getStates()[i], Board.State.EMPTY); } } @Test void setCellState() { Board.State[] lastBoard = Arrays.copyOf(board.getStates(), board.getStates().length); board.setCellState(1, true); assertFalse(Arrays.equals(lastBoard, board.getStates())); assertEquals(board.getStates()[0], Board.State.CROSS); board.setCellState(1, false); assertEquals(board.getStates()[0], Board.State.CROSS); board.setCellState(2, false); assertEquals(board.getStates()[1], Board.State.CIRCLE); } @SuppressWarnings("AssertBetweenInconvertibleTypes") @Test void testEquals() { assertNotEquals(board, "Test"); Board secondBoard = new Board(); assertEquals(board, secondBoard); secondBoard.getStates()[0] = Board.State.CROSS; assertNotEquals(board, secondBoard); board.getStates()[0] = Board.State.CROSS; assertEquals(board, secondBoard); } @Test void convertSimpleToState() { int[] test = {1, 1, 1, 2, 0, 2, 2, 0, 0}; Board.State[] expected = {Board.State.CIRCLE, Board.State.CIRCLE, Board.State.CIRCLE, Board.State.CROSS, Board.State.EMPTY, Board.State.CROSS, Board.State.CROSS, Board.State.EMPTY, Board.State.EMPTY}; int[] test2 = {1, 0, 0, 1, 0, 0, 1, 0, 0}; Board.State[] expected2 = {Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY}; int[] test3 = {69, 0, 0, 0, 1, 0, 0, 0, 1}; Board.State[] expected3 = {Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE}; int[] test4 = {3, 0, 0, 0, 1, 0, 0, 0, 1}; Board.State[] expected4 = {Board.State.EMPTY, Board.State.EMPTY, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE, Board.State.EMPTY, Board.State.EMPTY, Board.State.EMPTY, Board.State.CIRCLE}; int[] test5 = {3, 0, 0, 0, 1, 0, 0, 0}; assertTrue(Arrays.deepEquals(expected, Board.convertSimpleToState(test))); assertTrue(Arrays.deepEquals(expected2, Board.convertSimpleToState(test2))); assertFalse(Arrays.deepEquals(expected3, Board.convertSimpleToState(test3))); assertTrue(Arrays.deepEquals(expected4, Board.convertSimpleToState(test4))); assertNull(Board.convertSimpleToState(test5)); } @Test void getCurrentState() { Board.State[] testArray = Board.convertSimpleToState(new int[]{2, 2, 2, 1, 0, 1, 1, 0, 0}); Board.State[] testArray2 = Board.convertSimpleToState(new int[]{1, 0, 2, 1, 2, 0, 1, 0, 2}); Board.State[] testArray3 = Board.convertSimpleToState(new int[]{1, 0, 2, 0, 1, 2, 0, 2, 1}); Board.State[] testArray4 = Board.convertSimpleToState(new int[]{0, 1, 2, 2, 1, 0, 0, 1, 2}); Board.State[] testArray5 = Board.convertSimpleToState(new int[]{1, 0, 0, 2, 2, 2, 1, 0, 1}); Board.State[] testArray6 = Board.convertSimpleToState(new int[]{2, 0, 1, 2, 1, 0, 1, 2, 0}); Board.State[] testArray7 = Board.convertSimpleToState(new int[]{0, 0, 1, 0, 2, 1, 2, 2, 1}); Board.State[] testArray8 = Board.convertSimpleToState(new int[]{1, 0, 0, 1, 1, 0, 2, 2, 2}); Board.State[] drawArray = Board.convertSimpleToState(new int[]{2, 1, 2, 1, 2, 1, 1, 2, 1}); Board.State[] drawArray2 = Board.convertSimpleToState(new int[]{2, 2, 1, 1, 1, 2, 2, 2, 1}); Board.State[] notFinishedArray = Board.convertSimpleToState(new int[]{2, 2, 1, 2, 0, 1, 0, 0, 0}); try { FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray); assertEquals(board.getCurrentState(), Board.CurrentState.CROSSWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray2); assertEquals(board.getCurrentState(), Board.CurrentState.CIRCLEWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray3); assertEquals(board.getCurrentState(), Board.CurrentState.CIRCLEWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray4); assertEquals(board.getCurrentState(), Board.CurrentState.CIRCLEWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray5); assertEquals(board.getCurrentState(), Board.CurrentState.CROSSWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray6); assertEquals(board.getCurrentState(), Board.CurrentState.CIRCLEWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray7); assertEquals(board.getCurrentState(), Board.CurrentState.CIRCLEWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), testArray8); assertEquals(board.getCurrentState(), Board.CurrentState.CROSSWIN); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), drawArray); assertEquals(board.getCurrentState(), Board.CurrentState.DRAW); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), drawArray2); assertEquals(board.getCurrentState(), Board.CurrentState.DRAW); FieldSetter.setField(board, board.getClass().getDeclaredField("states"), notFinishedArray); assertEquals(board.getCurrentState(), Board.CurrentState.NOTFINISHED); } catch (NoSuchFieldException e) { e.printStackTrace(); } } }