class UiTest(unittest.TestCase): def setUp(self): self.user_interface = Ui() self.board = Board() def test_greeting_message(self): captured_output = io.StringIO() sys.stdout = captured_output self.user_interface.greet() sys.stdout = sys.__stdout__ output = captured_output.getvalue() self.assertEqual('Welcome to the Python TicTacToe\n', output) def test_printing_board_at_the_start_of_the_game(self): captured_output = io.StringIO() sys.stdout = captured_output self.user_interface.print_board(self.board) sys.stdout = sys.__stdout__ output = captured_output.getvalue() self.assertEqual( '\n 1 | 2 | 3\n -----------\n 4 | 5 | 6\n -----------\n 7 | 8 | 9\n \n', output) def test_printing_board_whrn_board_is_not_empty(self): captured_output = io.StringIO() sys.stdout = captured_output self.board.insert_value(2, 'X') self.user_interface.print_board(self.board) sys.stdout = sys.__stdout__ output = captured_output.getvalue() self.assertEqual( '\n 1 | X | 3\n -----------\n 4 | 5 | 6\n -----------\n 7 | 8 | 9\n \n', output) def test_get_user_input(self): self.user_interface.get_input = mock.MagicMock( side_effect=['foo', 'x', '3']) user_input = self.user_interface.get_input("text") self.assertEqual(user_input, 'foo') user_input = self.user_interface.get_input("text") self.assertEqual(user_input, 'x') user_input = self.user_interface.get_input("text") self.assertNotEqual(user_input, '2') def test_choose_marker_will_ask_again_until_input_is_valid(self): self.user_interface.get_input = mock.MagicMock(side_effect=['-', 'X']) symbol = self.user_interface.choose_marker() self.assertEqual(symbol, 'X') def test_choose_marker_will_upcase_input(self): self.user_interface.get_input = mock.MagicMock(side_effect=['x']) symbol = self.user_interface.choose_marker() self.assertEqual(symbol, 'X') def test_choose_move_will_ask_again_until_input_is_valid(self): self.user_interface.get_input = mock.MagicMock( side_effect=['0', '10000', '5']) move = self.user_interface.choose_move(self.board) self.assertEqual(move, '5') def test_choose_move_will_ask_again_until_input_is_valid_when_user_entered_the_taken_cell( self): self.board.insert_value(2, 'X') self.board.insert_value(3, 'O') self.board.insert_value(4, 'X') self.user_interface.get_input = mock.MagicMock( side_effect=['2', '3', '5']) move = self.user_interface.choose_move(self.board) self.assertEqual(move, '5') def test_game_over_message(self): captured_output = io.StringIO() sys.stdout = captured_output self.user_interface.game_over() sys.stdout = sys.__stdout__ output = captured_output.getvalue() self.assertEqual('Game over!\n', output)