Esempio n. 1
0
class GameTest(unittest.TestCase):
    def setUp(self):
        pass

    def test_a_new_game_is_started_the_player_must_enter_a_name(self):
        self.game = Game('Michelle')
        self.assertEqual(self.game.player_name, 'Michelle')

    def test_a_board_is_created_when_a_new_game_starts(self):
        self.game = Game('Michelle')
        board = self.game.board
        self.assertIsInstance(board, TicTacToe)

    def test_a_machine_player_instance_is_created_when_a_game_starts(self):
        self.game = Game('Helen')
        player_2 = self.game.machine_player
        self.assertIsInstance(player_2, MachinePlayer)

    def test_a_game_chooses_a_player_at_random_to_go_first(self):
        first_turns = []
        test_count = 10
        for i in range(test_count):
            self.game = Game('Helen')
            first_turns.append(self.game.whose_turn)
        self.assertLess(first_turns.count('Helen'), test_count)

    def test_a_player_can_choose_a_space(self):
        self.game = Game('Helen', 'X')
        self.game.whose_turn = 'Helen'
        self.game.choose_space('1')
        self.assertEqual(self.game.board.board['1'], 'X')

    def test_once_a_player_has_taken_their_turn_the_other_player_goes_next(
            self):
        self.game = Game('Helen', 'X')
        self.game.whose_turn = 'Helen'
        previous_turn = self.game.whose_turn
        self.game.take_turn('4')
        current_turn = self.game.whose_turn
        self.assertNotEqual(previous_turn, current_turn)

    def test_if_a_player_tries_to_choose_a_space_already_taken_game_gives_a_msg_to_choose_again(
            self):
        self.game = Game('Pete')
        self.game.whose_turn = 'Pete'
        self.game.take_turn('4')
        self.game.whose_turn = 'Pete'
        message = self.game.take_turn('4')
        self.assertEqual(message, 'Sorry that space is already taken')

    def test_the_machine_player_can_take_a_turn(self):
        self.game = Game('Pete')
        test_board = list(range(1, 10))
        self.game.whose_turn = 'machine_player'
        self.game.take_turn()
        self.assertNotEqual(test_board, self.game.board.free_spaces)

    def test_when_a_game_is_won_game_announces_who_won(self):
        player = 'Mary'
        self.game = Game(player)
        for i in range(3):
            self.game.whose_turn = player
            message = self.game.take_turn(str(i + 1))

        self.assertEqual(message, player + ' won!!!')