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
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
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
def test_discard_question_cards(self): state = GameState() state.question_cards = [(2, 'H'), (7, 'H'), (5, '$')] state.discard_deck = [] discard_question_cards(state.question_cards, state.discard_deck) self.assertEqual([(2, 'H'), (7, 'H'), (5, '$')], state.discard_deck) self.assertEqual([], state.question_cards)
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