def test_have_all_cards(self): full_deck = Deck() self.assertTrue(full_deck.have_all_cards()) full_deck.remove_random_card() self.assertFalse(full_deck.have_all_cards())
class DeckTestCase(unittest.TestCase): def setUp(self): self.full_deck = Deck() self.empty_deck = Deck() while len(self.empty_deck.get_cards()) > 0: self.empty_deck.remove_random_card() @staticmethod def generate_full_deck(): cards = [] for val in range(2, 15): for suit in ["Hearts", "Diamonds", "Spades", "Clubs"]: cards.append((val, suit)) return cards @staticmethod def sort_by_suit(cards): cards.sort(key=lambda card: (card[1], card[0])) @staticmethod def equal_cards(cards1, cards2, after_sort=True): if len(cards1) != len(cards2): return False if after_sort: DeckTestCase.sort_by_suit(cards1) DeckTestCase.sort_by_suit(cards2) for i, card in enumerate(cards1): if card[0] != cards2[i][0] or card[1] != cards2[i][1]: return False return True def test_initializer(self): deck = Deck() self.assertEqual(52, len(deck.get_cards())) def test_print_cards(self): cards = DeckTestCase.generate_full_deck() _, output = StdoutCapture( lambda: self.full_deck.print_cards()).capture() self.assertTrue(str(52) in output) self.assertTrue(str(cards) in output) def test_get_cards(self): all_cards = DeckTestCase.generate_full_deck() cards = self.full_deck.get_cards() self.assertTrue(DeckTestCase.equal_cards(all_cards, cards)) def test_shuffle(self): old_cards = self.full_deck.get_cards().copy() self.full_deck.shuffle() new_cards = self.full_deck.get_cards() self.assertFalse( DeckTestCase.equal_cards(old_cards, new_cards, after_sort=False)) def test_remove_random_card_exists(self): cards = self.full_deck.get_cards().copy() card = self.full_deck.remove_random_card() self.assertTrue(card in cards) self.assertFalse(card in self.full_deck.get_cards()) def test_remove_random_card_nonexistent(self): card, output = StdoutCapture( lambda: self.empty_deck.remove_random_card()).capture() self.assertEqual(card, None) self.assertEqual("Deck is empty", output.strip()) def test_remove_top_card_exists(self): cards = self.full_deck.get_cards().copy() card = self.full_deck.remove_top_card() self.assertEqual(card, cards[0]) self.assertFalse(card in self.full_deck.get_cards()) def test_remove_top_card_nonexistent(self): card, output = StdoutCapture( lambda: self.empty_deck.remove_top_card()).capture() self.assertEqual(card, None) self.assertEqual("Deck is empty", output.strip()) def test_remove_card_exists(self): target_card = (2, "Spades") self.assertTrue(target_card in self.full_deck.get_cards()) self.full_deck.remove_card(target_card) self.assertFalse(target_card in self.full_deck.get_cards()) def test_remove_card_nonexistent(self): card, output = StdoutCapture(lambda: self.empty_deck.remove_card( (2, "Spades"))).capture() self.assertEqual(card, None) self.assertEqual("Deck is empty", output.strip()) def test_deal(self): player1 = Player("p1") player2 = Player("p2") self.assertEqual(52, len(self.full_deck.get_cards())) self.assertEqual(0, len(player1.get_cards())) self.assertEqual(0, len(player2.get_cards())) self.full_deck.deal([player1, player2], 2) self.assertEqual(48, len(self.full_deck.get_cards())) self.assertEqual(2, len(player1.get_cards())) self.assertEqual(2, len(player2.get_cards())) def test_collect(self): player1 = Player("p1") player2 = Player("p2") player1_cards = [(2, "Spades"), (2, "Hearts")] player2_cards = [(4, "Hearts")] for card in player1_cards: player1.add_card(card) for card in player2_cards: player2.add_card(card) self.assertEqual(0, len(self.empty_deck.get_cards())) self.assertEqual(2, len(player1.get_cards())) self.assertEqual(1, len(player2.get_cards())) self.empty_deck.collect([player1, player2]) self.assertEqual(3, len(self.empty_deck.get_cards())) for card in player1_cards: self.assertTrue(card in self.empty_deck.get_cards()) for card in player2_cards: self.assertTrue(card in self.empty_deck.get_cards()) def test_have_all_cards(self): full_deck = Deck() self.assertTrue(full_deck.have_all_cards()) full_deck.remove_random_card() self.assertFalse(full_deck.have_all_cards()) def test_push_to_table(self): table = Table() self.assertEqual(0, len(table.get_cards())) self.assertEqual(52, len(self.full_deck.get_cards())) self.full_deck.push_to_table(table, 3) self.assertEqual(3, len(table.get_cards())) self.assertEqual(49, len(self.full_deck.get_cards())) def test_print(self): _, output = StdoutCapture(lambda: print(self.empty_deck)).capture() self.assertEqual("Deck of cards", output.strip())