class TestTicTacToe(unittest.TestCase): def setUp(self): self.T = TicTacToe() __builtins__.raw_input = Mock() self.ri = __builtins__.raw_input def tearDown(self): self.T = None def test_human_move_char(self): """Test that the human_move does not accept input outside of range""" self.ri.return_value = "c" assert False == self.T.human_move() def test_human_move_taken(self): self.T.board[0][0] = "x" self.ri.return_value = "0" assert False == self.T.human_move() def test_human_move_acceptable(self): """Test that the human_move accepts all possible input""" for i in range(9): self.ri.return_value = str(i) T = TicTacToe() assert self.T.human_move() == True T = None def test_win(self): """Test that a winner is detected""" self.T.board[0] = ["x"] * 3 assert self.T.tic_tac_toe(self.T.board) def test_winner_1(self): """Horizontal winner found""" self.T.board[0] = ["x"] * 3 assert self.T.tic_tac_toe(self.T.board)[0][0] == "x" def test_winner_2(self): """Vertical winner found""" self.T.board[0][0] = self.T.board[1][0] = self.T.board[2][0] = "x" assert self.T.tic_tac_toe(self.T.board) == "x" def test_winner_3(self): """Diagonal winner found""" self.T.board[0][2] = "o" self.T.board[1][1] = "o" self.T.board[2][0] = "o" assert self.T.tic_tac_toe(self.T.board) == "o" def sim(self, prep, win): for move in prep: self.T.board[move[0]][move[1]] = "x" assert win == self.T.win(self.T.board, "x") # test win possibilities def test_win_top_row(self): self.sim(((0, 1), (0, 2)), (0, 0)) def test_win_mid_row(self): self.sim(((1, 0), (1, 2)), (1, 1)) def test_win_bottom_row(self): self.sim(((2, 0), (2, 1)), (2, 2)) def test_win_left_col(self): self.sim(((0, 1), (0, 2)), (0, 0)) def test_win_mid_col(self): self.sim(((1, 0), (1, 2)), (1, 1)) def test_win_right_col(self): self.sim(((2, 0), (2, 1)), (2, 2)) def test_win_first_diag(self): self.sim(((0, 0), (1, 1)), (2, 2)) def test_win_second_diag(self): self.sim(((0, 2), (2, 0)), (1, 1)) # Test fork def test_fork_1(self): self.T.board[0][1] = "x" self.T.board[1][0] = "x" self.T.board[0][0] = "o" assert self.T.fork(self.T.board, "x") == (1, 1) def test_fork_2(self): self.T.board[0][0] = "x" self.T.board[2][2] = "x" self.T.board[1][1] = "o" self.T.board[0][2] = "o" assert self.T.fork(self.T.board, "x") == (2, 0) def test_block_fork_1(self): self.T.board[0][0] = "x" self.T.board[2][2] = "x" self.T.board[1][1] = "o" assert self.T.bock_fork() == (0, 1) def test_block_fork_1(self): self.T.board[0][1] = "x" self.T.board[1][0] = "x" self.T.board[1][1] = "o" assert self.T.block_fork() == (0, 0) def test_center(self): assert self.T.center() == (1, 1) def test_opposite_corner_1(self): self.T.board[0][0] = "x" assert self.T.opposite_corner() == (2, 2) def test_opposite_corner_2(self): self.T.board[2][0] = "x" assert self.T.opposite_corner() == (0, 2) def test_empty_corner_1(self): assert self.T.empty_corner() == (0, 0) def test_empty_corner_2(self): self.T.board[0][0] = "x" self.T.board[0][2] = "x" assert self.T.empty_corner() == (2, 0) def test_empty_side_1(self): self.T.board[0][1] = "x" assert self.T.empty_side() == (1, 0)