class TestBoardWriter(TestCase): def setUp(self): self.board = Board(4, 3, [[1, 2], [1, 1], []], [[1, 1], [], [2], [2]]) self.board.set_position(0, 0, Board.Cross) self.board.set_position(2, 1, Board.Empty) @patch('builtins.open', new_callable=mock_open, create=True) def test_write_board_success(self, mock_file): BoardWriter(self.board).export('open/path/file.json') mock_file.assert_called_once_with('open/path/file.json', 'w') mock_file().write.assert_called_with( '{"width": 4, "height": 3, "constraints": {"rows": [[1, 2], [1, 1], []], ' '"columns": [[1, 1], [], [2], [2]]}, ' '"values": [{"x": 0, "y": 0, "value": true}, {"x": 1, "y": 2, "value": false}]}' )
def test_check_correct(self): simple_board = Board(1, 1, [[]], [[]]) self.assertTrue(simple_board.check_correct()) simple_board.set_position(0, 0, Board.Empty) self.assertTrue(simple_board.check_correct()) simple_board.set_position(0, 0, Board.Cross) self.assertFalse(simple_board.check_correct()) self.assertFalse(self.board.check_correct()) board = Board(4, 2, [[1, 2], [3]], [[1], [1], [2], [2]]) self.assertFalse(board.check_correct()) board.set_position(0, 0, Board.Cross) board.set_position(2, 0, Board.Cross) board.set_position(3, 0, Board.Cross) board.set_position(1, 1, Board.Cross) board.set_position(2, 1, Board.Cross) board.set_position(3, 1, Board.Cross) self.assertTrue(board.check_correct())
class TestPrintBoard(TestCase): def setUp(self): self.board1 = Board(2, 2, [[], [1]], [[1], []]) self.board2 = Board(5, 6, [[1, 2, 3], [4, 5], [], [7], [4, 2], []], [[1, 1, 1, 1, 1, 6], [], [1, 2, 3], [], [1]]) self.board3 = Board(1, 1, [[]], [[]]) def test_print1(self): board1_str = PrintBoard(self.board1)._print() self.assertEqual(board1_str, ' 1 \n ====\n ǁ ? ?\n1 ǁ ? ?\n') self.board1.set_position(0, 1, Board.Cross) board1_str = PrintBoard(self.board1)._print() self.assertEqual(board1_str, ' 1 \n ====\n ǁ ? ?\n1 ǁ X ?\n') self.board1.set_position(0, 0, Board.Empty) self.board1.set_position(1, 0, Board.Empty) self.board1.set_position(1, 1, Board.Empty) board1_str = PrintBoard(self.board1)._print() self.assertEqual(board1_str, ' 1 \n ====\n ǁ \n1 ǁ X \n') def test_print2(self): board2_str = PrintBoard(self.board2)._print() self.assertEqual( board2_str, ' 1 \n 1 \n 1 \n 1 1 \n' ' 1 2 \n 6 3 1 \n ==========\n1 2 3 ǁ ? ? ? ? ?\n' ' 4 5 ǁ ? ? ? ? ?\n ǁ ? ? ? ? ?\n 7 ǁ ? ? ? ? ?\n 4 2 ǁ ? ? ? ? ?\n' ' ǁ ? ? ? ? ?\n') def test_print3(self): board3_str = PrintBoard(self.board3)._print() self.assertEqual(board3_str, ' ==\nǁ ?\n')
class TestBoard(TestCase): def test_static_values(self): self.assertEqual(Board.Unknown, 0) self.assertEqual(Board.Cross, 1) self.assertEqual(Board.Empty, 2) def setUp(self): self.row_constaints = [[1, 2, 3], [], [3, 2, 1], []] self.col_constraints = [[4, 2], [], [2, 4]] self.board = Board(3, 4, self.row_constaints, self.col_constraints) def test_width_height(self): self.assertEqual(self.board.get_width(), 3) self.assertEqual(self.board.get_height(), 4) def test_constraints(self): self.assertListEqual(self.row_constaints, self.board.get_row_constraints()) self.assertListEqual(self.col_constraints, self.board.get_col_constraints()) def test_set_value(self): self.board.set_position(0, 0, Board.Empty) self.assertEqual(self.board._board[0][0], Board.Empty) with self.assertRaises(InvalidValueError): self.board.set_position(1, 1, 3) self.board.set_position(2, 3, Board.Cross) self.assertEqual(self.board._board[3][2], Board.Cross) self.board.set_position(2, 3, Board.Unknown) self.assertEqual(self.board._board[3][2], Board.Unknown) def test_get_value(self): self.board._board[0][0] = Board.Empty self.assertEqual(self.board.get_value(0, 0), Board.Empty) self.board._board[3][2] = Board.Cross self.assertEqual(self.board.get_value(2, 3), Board.Cross) self.board._board[3][2] = Board.Unknown self.assertEqual(self.board.get_value(2, 3), Board.Unknown) def test_default_unknown(self): self.assertListEqual(self.board._board, [[Board.Unknown] * 3 for _ in range(4)]) def test_get_row_col(self): self.board.set_position(1, 1, Board.Cross) self.board.set_position(1, 0, Board.Cross) self.assertListEqual(self.board.get_row(0), [Board.Unknown, Board.Cross, Board.Unknown]) self.assertListEqual(self.board.get_row(1), [Board.Unknown, Board.Cross, Board.Unknown]) self.assertListEqual(self.board.get_row(2), [Board.Unknown, Board.Unknown, Board.Unknown]) self.assertListEqual(self.board.get_row(3), [Board.Unknown, Board.Unknown, Board.Unknown]) self.assertListEqual( self.board.get_column(0), [Board.Unknown, Board.Unknown, Board.Unknown, Board.Unknown]) self.assertListEqual( self.board.get_column(1), [Board.Cross, Board.Cross, Board.Unknown, Board.Unknown]) self.assertListEqual( self.board.get_column(2), [Board.Unknown, Board.Unknown, Board.Unknown, Board.Unknown]) def test_get_score(self): self.assertListEqual(Board.get_score([]), []) self.assertListEqual(Board.get_score([Board.Unknown]), []) self.assertListEqual(Board.get_score([Board.Empty]), []) self.assertListEqual(Board.get_score([Board.Cross]), [1]) self.assertListEqual( Board.get_score([ Board.Cross, Board.Empty, Board.Cross, Board.Cross, Board.Unknown ]), [1, 2]) self.assertListEqual( Board.get_score( [Board.Cross, Board.Cross, Board.Cross, Board.Cross]), [4]) def test_check_correct(self): simple_board = Board(1, 1, [[]], [[]]) self.assertTrue(simple_board.check_correct()) simple_board.set_position(0, 0, Board.Empty) self.assertTrue(simple_board.check_correct()) simple_board.set_position(0, 0, Board.Cross) self.assertFalse(simple_board.check_correct()) self.assertFalse(self.board.check_correct()) board = Board(4, 2, [[1, 2], [3]], [[1], [1], [2], [2]]) self.assertFalse(board.check_correct()) board.set_position(0, 0, Board.Cross) board.set_position(2, 0, Board.Cross) board.set_position(3, 0, Board.Cross) board.set_position(1, 1, Board.Cross) board.set_position(2, 1, Board.Cross) board.set_position(3, 1, Board.Cross) self.assertTrue(board.check_correct())