예제 #1
0
    def test_accuse_bad_guess_of_cards(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '1L', '2L')  # opponent id, first card, second card

            joe = HumanPlayer('joe')
            joe._hand = [(4, 'L'), (8, 'L'), (5, 'H'), (8, 'H')]
            ai = AIPlayer('ai')
            ai._hand = [(1, 'L'), (3, 'L'), (1, 'H'), (9, '$')]

            state = GameState()
            state.turn = 23
            state.current_player = joe
            state.players = [joe, ai]
            state.evidence_cards = [(5, '$'), (5, 'L')]

            with captured_output() as (out, err):
                self.assertTrue(accuse_command(state))

            self.assertEqual('Accuse\n\n'
                             'Your guess is: Incorrect', output(out))
            accusation = state.accusations.pop()
            self.assertEqual('joe', accusation['player'].name)
            self.assertEqual('ai', accusation['accused'].name)
            self.assertEqual([(1, 'L'), (2, 'L')], accusation['cards'])
            self.assertEqual('incorrect', accusation['outcome'])
            self.assertEqual('ended', state.status)
        finally:
            Interactive.raw_input = old_raw_input
예제 #2
0
    def test_accuse_bad_guess_of_murderer(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '3L', '5L')  # opponent id, first card, second card

            joe = HumanPlayer('joe')
            joe._hand = [(4, 'L'), (7, 'L'), (5, 'H'), (8, 'H')]
            ai1 = AIPlayer('ai1')
            ai1._hand = [(1, 'L'), (3, 'L'), (1, 'H'), (9, '$')]
            ai2 = AIPlayer('ai2')
            ai2._hand = [(8, 'L'), (3, 'H'), (2, '$'), (3, '$')]

            state = GameState()
            state.turn = 23
            state.current_player = joe
            state.players = [joe, ai1, ai2]
            state.evidence_cards = [(3, 'L'), (5, 'L')]

            with captured_output() as (out, err):
                self.assertTrue(accuse_command(state))

            self.assertEqual('Accuse\n\n'
                             'Your guess is: Incorrect', output(out))
            self.assertEqual('ended', state.status)
        finally:
            Interactive.raw_input = old_raw_input
예제 #3
0
    def test_print_summary_at_start(self):
        human = HumanPlayer('john')
        human._hand = [(3, 'L'), (5, 'H'), (9, '$')]

        state = GameState()
        state.human_player = human
        state.players = [human]

        with captured_output() as (out, err):
            print_summary(state)

        self.assertEqual('Game Summary\n'
                         'Your hand: 3L 5H 9$\n'
                         'Secret to play: [john: 1]', output(out))
예제 #4
0
    def test_determine_murderer_when_its_another_player(self):
        state = GameState()
        john = HumanPlayer('john')
        jim = AIPlayer('jim')
        jack = AIPlayer('jack')
        state.current_player = john
        state.players = [john, jim, jack]
        state.extra_card = (8, 'L')

        john._hand = [(5, 'L'), (9, 'H'), (6, '$')]
        jim._hand = [(4, 'L'), (7, 'L'), (3, '$')]
        jack._hand = [(1, 'L'), (3, 'H'), (5, '$')]

        accusation_cards = [(5, 'L'), (7, '$')]  # => murder card = 3H
        self.assertEqual(jack, determine_murderer(state, accusation_cards))
예제 #5
0
    def test_print_summary_with_extra_card_and_low_suit(self):
        human = HumanPlayer('john')
        human._hand = [(3, 'L'), (5, 'H'), (9, '$')]
        human.set_low_suit('H')

        state = GameState()
        state.human_player = human
        state.players = [human]
        state.extra_card = (5, 'L')

        with captured_output() as (out, err):
            self.assertFalse(print_summary(state))

        self.assertEqual(
            'Game Summary\n'
            'Your hand: 3L 5H 9$\n'
            'Extra card: 5L\n'
            'Low Suits: [john: H]\n'
            'Secret to play: [john: 1]',
            output(out))