def test_dealer_stands_on_soft_17(self): """ Test that a dealer always stands when they have a soft 17 (a 17 that could also be a 7 e.g. 6 + A or 3 + 3 + A) """ dealer = self.dealer test_shoe = self.test_shoe test_shoe.cards.insert(0, card(1, "S")) test_shoe.cards.insert(3, card(3, "S")) player_list = self.test_player_list initial_deal(test_shoe, player_list, dealer) self.assertTrue(dealer.soft_score_check()) self.assertFalse(dealer_play(test_shoe, dealer)) self.assertEqual(dealer.get_score(), 17)
def test_user_pushes_with_blackjack(self): """ Test that the user pushes with blackjack when the dealer also has a blackjack """ test_shoe = self.test_shoe player_list = self.test_player_list dealer = self.dealer player = player_list[0] test_shoe.cards.insert(0, card(10, "H")) test_shoe.cards.insert(1, card(10, "C")) test_shoe.cards.insert(2, card(1, "H")) initial_deal(test_shoe, player_list, dealer) self.assertEqual(player.get_score(), 21) dealer_play(test_shoe, dealer) self.assertTrue(check_blackjack(dealer.get_score(), dealer.get_hand())) self.assertTrue(check_blackjack(player.get_score(), player.get_hand())) results = check_results(player_list, dealer) pushers = results[2] self.assertIn(player, pushers)
def dealer_play(play_shoe, dealer): """ Logic for if the dealer should hit or stand based on their score """ dealer.reveal_hidden_card() print("Now for the dealer") print("Dealer reveals: " + dealer.get_hidden_card_only().get_card_details()) print("Dealer's hand:" + dealer.get_viewable_hand()) decide_soft_score_print(dealer) if dealer.get_score() < 17: hit = True while hit: print("Dealer hits") dealer.hit_hand(play_shoe) print("Dealer's hand " + dealer.get_viewable_hand()) decide_soft_score_print(dealer) hit = dealer.check_hit(play_shoe) check_stand(dealer)
def test_user_pushes(self): """ Test that when a user's score and the dealer's score are the same they push """ test_shoe = self.test_shoe player_list = self.test_player_list dealer = self.dealer player = player_list[0] test_shoe.cards.insert(0, card(8, "H")) test_shoe.cards.insert(1, card(10, "C")) test_shoe.cards.insert(2, card(9, "C")) test_shoe.cards.insert(3, card(6, "D")) initial_deal(test_shoe, player_list, dealer) dealer_play(test_shoe, dealer) self.assertEqual(player.get_score(), dealer.get_score()) self.assertFalse(check_blackjack(player.get_score(), player.get_hand())) results = check_results(player_list, dealer) pushers = results[2] self.assertIn(player, pushers)
def test_user_loses(self): """ Test that a user loses when the dealer's score exceeds theirs and the dealer doesn't bust """ test_shoe = self.test_shoe player_list = self.test_player_list dealer = self.dealer player = player_list[0] test_shoe.cards.insert(0, card(8, "H")) test_shoe.cards.insert(1, card(10, "C")) test_shoe.cards.insert(2, card(8, "C")) test_shoe.cards.insert(3, card(6, "D")) initial_deal(test_shoe, player_list, dealer) dealer_play(test_shoe, dealer) self.assertLess(player.get_score(), dealer.get_score()) self.assertFalse(check_blackjack(player.get_score(), player.get_hand())) results = check_results(player_list, dealer) losers = results[1] self.assertIn(player, losers)
def check_results(player_list, dealer): """ Function that checks if each user has more or less than the dealer and decides if they have won or lost then adds them to a list accordingly. """ dealer_score = dealer.get_score() dealer_hand = dealer.get_hand() blackjack_winners = [] winners = [] losers = [] pushers = [] dealer_plays = True if dealer_score > 21: dealer_plays = False for player in player_list: player_score = player.get_score() player_hand = player.get_hand() if dealer_plays and check_blackjack(dealer_score, dealer_hand): if check_blackjack(player_score, player_hand): pushers.append(player) else: losers.append(player) elif dealer_plays: if player_score > dealer_score and not (player.check_bust()): if check_blackjack(player_score, player_hand): blackjack_winners.append(player) else: winners.append(player) elif player_score == dealer_score: pushers.append(player) else: losers.append(player) else: if check_blackjack(player_score, player.get_hand()): blackjack_winners.append(player) break elif player_score <= 21: winners.append(player) else: losers.append(player) return winners, losers, pushers, blackjack_winners
def test_score_calculation(self): """ Test that score is calculated correctly both for the initial deal and in cases of soft scores """ test_shoe = self.test_shoe dealer = self.dealer player_list = self.test_player_list player = player_list[0] initial_deal(test_shoe, player_list, dealer) self.assertEqual(player.get_score(), 14) self.assertEqual( dealer.get_hidden_card_only().get_score() + dealer.get_score(), 6) player.hit_hand(test_shoe) self.assertEqual(player.get_score(), 19) self.assertTrue(player.soft_score_check()) player.hit_hand(test_shoe) self.assertEqual(player.get_score(), 15) self.assertFalse(player.soft_score_check()) dealer.reveal_hidden_card() self.assertFalse(dealer.soft_score_check())