Exemple #1
0
class PlayerTests(unittest.TestCase):
  def setUp(self):
    self.player = Player()

  def test_init_accepts_hand(self):
    cards = ace, king = u'A♠', u'K♠'
    player = Player(list(cards))
    self.assertEquals(2, len(player.hand))
    self.assertEquals(ace, player.hand[0])
    self.assertEquals(king, player.hand[1])

  def test_add_card(self):
    hand_size = len(self.player.hand)

    card = Card(u'A♠')
    self.player.add_card(card)

    self.assertEquals(hand_size + 1, len(self.player.hand))
    self.assertEquals(card, self.player.hand[0])

  def test_can_hit_with_hand_value_lt_21(self):
    '''A player can hit if their hand value is less than 21.'''

    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'Q♠'))
    self.assertEquals(20, self.player.hand_value())
    self.assertTrue(self.player.can_hit())

  def test_can_hit_with_hand_value_gte_21(self):
    '''A player cannot hit if their hand value is 21 or higher.'''

    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'6♠'))
    self.player.add_card(Card(u'5♠'))
    self.assertFalse(self.player.can_hit())

  def test_get_hand_value_with_hard_ace(self):
    '''An ace is hard (1) if a soft ace (11) would cause the player to bust.'''

    self.player.add_card(Card(u'A♠'))
    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'Q♠'))
    self.assertEquals(21, self.player.hand_value())

  def test_get_hand_value_with_soft_ace(self):
    '''An ace is soft (11) if it won't cause the player to bust.'''

    self.player.add_card(Card(u'A♠'))
    self.player.add_card(Card(u'K♠'))
    self.assertEquals(21, self.player.hand_value())

  def test_get_hand_value_with_many_aces(self):
    '''Only one ace in a hand can be soft (11). The rest must be hard (1).'''

    self.player.add_card(Card(u'A♠'))
    self.player.add_card(Card(u'A♥'))
    self.player.add_card(Card(u'A♣'))
    self.player.add_card(Card(u'A♦'))
    self.assertEquals(14, self.player.hand_value())

  def test_get_hand_value_with_no_aces(self):
    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'Q♠'))
    self.assertEquals(20, self.player.hand_value())

  def test_has_blackjack_with_blackjack(self):
    self.player.add_card(Card(u'A♠'))
    self.player.add_card(Card(u'K♠'))
    self.assertTrue(self.player.has_blackjack())

  def test_has_blackjack_with_hand_value_ne_21(self):
    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'Q♠'))
    self.assertFalse(self.player.has_blackjack())

  def test_has_blackjack_with_gt_2_cards(self):
    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'6♠'))
    self.player.add_card(Card(u'5♠'))
    self.assertFalse(self.player.has_blackjack())

  def test_has_busted_with_hand_value_lte_21(self):
    self.player.add_card(Card(u'A♠'))
    self.player.add_card(Card(u'K♠'))
    self.assertFalse(self.player.has_busted())

  def test_has_busted_with_hand_value_gt_21(self):
    self.player.add_card(Card(u'K♠'))
    self.player.add_card(Card(u'Q♠'))
    self.player.add_card(Card(u'2♠'))
    self.assertTrue(self.player.has_busted())