Ejemplo n.º 1
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
Ejemplo n.º 2
0
    def test_interrogate_for_the_same_two_cards_asks_for_rank_or_suit(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '3L', '3L', 'suit')  # opponent id, low card, high card

            player = HumanPlayer('joe')
            tom = AIPlayer('Tom')
            tom._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')]

            state = GameState()
            state.turn = 10
            state.current_player = player
            state.players = [player, tom]
            state.question_cards = [(1, '$'), (3, 'L'), (3, 'L')]

            with captured_output() as (out, err):
                turn_ended = interrogate_command(state)

            self.assertEqual('Interrogate\n'
                             'Question cards: 1$ 3L 3L\n'
                             'Cards in this range: 3', output(out))
            turn = state.history.pop()
            self.assertEqual(10, turn['turn'])
            self.assertEqual('joe', turn['player'].name)
            self.assertEqual('Tom', turn['opponent'].name)
            self.assertEqual('interrogate', turn['action'])
            self.assertEqual('3L->3L [suit]', str(turn['range']))
            self.assertEqual(3, turn['result'])
            self.assertTrue(turn_ended)
        finally:
            Interactive.raw_input = old_raw_input
Ejemplo n.º 3
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
Ejemplo n.º 4
0
    def test_secret_asks_for_two_cards_puts_the_range_in_history_and_display_the_result(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '9$', '1H')  # opponent id, low card, high card

            player = HumanPlayer('joe')
            donna = AIPlayer('donna')
            donna._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')]

            state = GameState()
            state.turn = 1
            state.current_player = player
            state.players = [player, donna]
            state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')]

            with captured_output() as (out, err):
                turn_ended = secret_command(state)

            self.assertEqual('Secret\n'
                             'Cards in this range: 2', output(out))
            turn = state.history.pop()
            self.assertEqual(1, turn['turn'])
            self.assertEqual('joe', turn['player'].name)
            self.assertEqual('donna', turn['opponent'].name)
            self.assertEqual('secret', turn['action'])
            self.assertEqual(['L', 'H', '$'], turn['range'].suits)
            self.assertEqual([9, 1], turn['range'].ranks)
            self.assertEqual(2, turn['result'])
            self.assertTrue(turn_ended)
            self.assertEqual(0, state.current_player.secret)
        finally:
            Interactive.raw_input = old_raw_input
Ejemplo n.º 5
0
    def test_interrogate_asks_for_two_cards_puts_the_range_in_history_and_display_the_result(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '3L', '7L')  # opponent id, low card, high card

            player = HumanPlayer('joe')
            tom = AIPlayer('tom')
            tom._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')]

            state = GameState()
            state.turn = 10
            state.current_player = player
            state.players = [player, tom]
            state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')]

            with captured_output() as (out, err):
                turn_ended = interrogate_command(state)

            self.assertEqual('Interrogate\n'
                             'Question cards: 1L 3L 7L\n'
                             'Cards in this range: 2', output(out))
            turn = state.history.pop()
            self.assertEqual(10, turn['turn'])
            self.assertEqual('joe', turn['player'].name)
            self.assertEqual('tom', turn['opponent'].name)
            self.assertEqual('interrogate', turn['action'])
            self.assertEqual(['L'], turn['range'].suits)
            self.assertEqual([3, 4, 5, 6, 7], turn['range'].ranks)
            self.assertEqual(2, turn['result'])
            self.assertTrue(turn_ended)
        finally:
            Interactive.raw_input = old_raw_input
Ejemplo n.º 6
0
    def test_secret_is_refused_if_no_secrets_left(self):
        player = HumanPlayer('joe')
        player._secret = 0

        state = GameState()
        state.turn = 1
        state.current_player = player

        with captured_output() as (out, err):
            turn_ended = secret_command(state)

        self.assertEqual('Secret already used!', output(out))
        self.assertFalse(turn_ended)
Ejemplo n.º 7
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))
Ejemplo n.º 8
0
    def test_choose_an_opponent(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('5', '2')

            player = HumanPlayer('joe')
            ai1 = AIPlayer('ai1')
            ai2 = AIPlayer('ai2')
            ai3 = AIPlayer('ai3')

            state = GameState()
            state.turn = 1
            state.current_player = player
            state.players = [ai2, player, ai3, ai1]

            with captured_output() as (out, err):
                chosen_opponent = choose_an_opponent(state)

            self.assertEqual(ai3, chosen_opponent)
        finally:
            Interactive.raw_input = old_raw_input
Ejemplo n.º 9
0
    def test_interrogate_lets_you_cancel_and_do_nothing(self):
        try:
            old_raw_input = raw_input
            Interactive.raw_input = mock_raw_input('1', '3L', 'cancel')

            player = HumanPlayer('joe')
            tom = AIPlayer('tom')

            state = GameState()
            state.current_player = player
            state.players = [player, tom]
            state.history = []
            state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')]

            with captured_output() as (out, err):
                turn_ended = interrogate_command(state)

            self.assertEqual('Interrogate\n'
                             'Question cards: 1L 3L 7L', output(out))
            self.assertEqual(0, len(state.history))
            self.assertFalse(turn_ended)
        finally:
            Interactive.raw_input = old_raw_input
Ejemplo n.º 10
0
    def test_print_history(self):
        tom = HumanPlayer('Tom')
        juanpedro = HumanPlayer('Juan-Pedro')
        joe = HumanPlayer('Joe')
        history = [{'turn': 1, 'player': tom, 'opponent': juanpedro,
                    'range': Range((1, 'L'), (5, 'L')), 'result': 2, 'action': 'interrogate'},
                   {'turn': 2, 'player': joe, 'opponent': tom,
                    'range': Range((6, '$'), (6, '$'), choice='suit'), 'result': 0, 'action': 'interrogate'},
                   {'turn': 3, 'player': juanpedro, 'opponent': tom,
                    'range': Range((3, 'L'), (3, 'H')), 'result': 1, 'action': 'secret'},
                   {'turn': 4, 'player': tom, 'opponent': juanpedro,
                    'range': Range((4, '$'), (7, '$')), 'result': 0, 'action': 'secret'},
                   {'turn': 5, 'player': joe, 'opponent': tom,
                    'range': Range((9, 'H'), (3, 'H')), 'result': 4, 'action': 'secret'}]
        accusations = [{'player': tom, 'accused': juanpedro, 'cards': [(8, 'H'), (3, '$')], 'outcome': 'incorrect'},
                       {'player': juanpedro, 'accused': joe, 'cards': [(7, 'H'), (5, '$')], 'outcome': 'correct'}]

        state = GameState()
        state.history = history
        state.accusations = accusations
        state.current_player = juanpedro

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

        self.assertEqual('History\n'
                         'Turn  Player      Opponent    Range          Result  Note    \n'
                         '1     Tom         Juan-Pedro  1L->5L         2               \n'
                         '2     Joe         Tom         6$->6$ [suit]  0               \n'
                         '3     Juan-Pedro  Tom         3L->3H         1       (Secret)\n'
                         '4     Tom         Juan-Pedro  4$->7$         0       (Secret)\n'
                         '5     Joe         Tom         *************  ******  (Secret)\n'
                         '\n'
                         'Accusations\n'
                         '      Tom         Juan-Pedro  8H 3$          incorrect\n'
                         '      Juan-Pedro  Joe         7H 5$          correct',
                         output(out))