def test_dealer_deals_cards(self):
        blackjack = Blackjack([Player()])

        blackjack._dealer_deals_cards()

        player_hand = blackjack._holders[0].get_hand()
        dealer_hand = blackjack._holders[1].get_hand()

        self.assertEqual(2, len(player_hand))
        self.assertEqual(2, len(dealer_hand))
        self.assertEqual(48, len(blackjack._deck._cards))
 def test_get_player_hit(self):
     player = Player("Jill", 100)
     # (case name, expected prints, expected inputs)
     cases = [
         ("ask_twice_to_stand", ["has score", "has score"], [("Hit or stand", "b"), ("Hit or stand", "n")]),
     ]
     for case in cases:
         expected_prints = list(reversed(case[1]))
         expected_inputs = list(reversed(case[2]))
         def test_print(statement):
             self.assertTrue(expected_prints.pop() in statement)
         def test_input(prompt):
             expected_input = expected_inputs.pop()
             self.assertTrue(expected_input[0] in prompt)
             return expected_input[1]
         blackjack = Blackjack([player], test_print, test_input)
         blackjack._dealer_deals_cards()
         
         blackjack._get_player_hit(player)
    def test_player_makes_bet(self):
        player = Player("Jill", 100)
        # (case name, bet, expected prints, expected inputs)
        cases = [
            (
                "legal_bet",
                [10],
                ["Dealer has", "has hand", "has pot"],
                [("give bet", 10)]
            ),
            (
                "noninteger_bet",
                [10.10, 10],
                ["Dealer has", "has hand", "has pot", "Illegal bet", "Dealer has", "has hand", "has pot"],
                [("give bet", 10.10), ("give bet", 10)]
            ),
            (
                "below_zero_bet",
                [-10, 10],
                ["Dealer has", "has hand", "has pot", "Illegal bet", "Dealer has", "has hand", "has pot"],
                [("give bet", -10), ("give bet", 10)]
            ),
            (
                "over_pot_bet",
                [110, 10],
                ["Dealer has", "has hand", "has pot", "Illegal bet", "Dealer has", "has hand", "has pot"],
                [("give bet", 110), ("give bet", 10)]
            ),
        ]
        for case in cases:
            expected_prints = list(reversed(case[2]))
            expected_inputs = list(reversed(case[3]))
            def test_print(statement):
                self.assertTrue(expected_prints.pop() in statement)
            def test_input(prompt):
                expected_input = expected_inputs.pop()
                self.assertTrue(expected_input[0] in prompt)
                return expected_input[1]
            blackjack = Blackjack([player], test_print, test_input)
            blackjack._dealer_deals_cards()

            blackjack._player_makes_bet(player)