Example #1
0
 def create_deck(game_title, data):
     deck = Deck('Starter Deck')
     for item in data[game_title]:
         if item['color'] not in Card.valid_colors:
             raise ValueError(f"Invalid color '{item['color']}' in "
                              f"'{game_title} : {item['name']}'")
         else:
             card = Card(item['name'], item['color'])
             for i in range(item['count']):
                 deck.add(card)
     return deck
Example #2
0
    def epidemic(self, card):
        """Draw a card from the bottom of the Draw Deck, discard it
        and shuffle the discard pile back onto the top of the Draw Deck."""
        new_card = self.deck['draw'].get_card_from_bottom(card)
        self.deck['draw'].remove_from_bottom(new_card)
        self.deck['discard'].add(new_card)
        self.epidemic_count += 1

        # Create new card pool
        new_cards = Deck(f'Epidemic #{self.epidemic_count}')
        for card in self.deck['discard'].cards.copy():
            new_cards.add(card)
        self.deck['draw'].add(new_cards)

        # Clear the discard pile
        self.deck['discard'].clear()
        self.log.log(f'<b>Epidemic #{self.epidemic_count} ({new_card.name})\
                shuffled</b>')
Example #3
0
class TestDeck(TestCase):
    def setUp(self):
        self.card1 = Card('Card A', 'black')
        self.card2 = Card('Card B', 'blue')
        self.card3 = Card('Card C', 'red')
        self.deck = Deck('discard')

    def tearDown(self):
        self.card1 = None
        self.card2 = None
        self.deck = None

    def test__len__(self):
        self.deck.add(self.card1)
        self.assertEqual(len(self.deck), 1)
        self.deck.add(self.card2)
        self.assertEqual(len(self.deck), 2)

    def test__iter__(self):
        self.deck.add(self.card1)
        self.deck.add(self.card2)
        i = 0
        for card in self.deck:
            i += 1
        self.assertEqual(i, 2)

    def test_instantiation_parameters(self):
        with self.assertRaises(ValueError):
            self.deck = Deck(0)

    def test_adding_card_to_deck(self):
        self.deck.add(self.card1)
        self.assertIn(self.card1, self.deck)

    def test_removing_card_from_a_deck(self):
        with self.assertRaises(ValueError):  # Check removal from empty deck
            self.deck.remove(self.card1)
        self.deck.add(self.card1)
        self.deck.remove(self.card1)
        self.assertNotIn(self.card1, self.deck)

    def test_moving_card_to_a_deck(self):
        deck2 = Deck('exclude')
        self.deck.add(self.card1)
        self.deck.move(self.card1, deck2)
        self.assertNotIn(self.card1, self.deck)
        self.assertIn(self.card1, deck2)

    def test_clear_a_deck_and_check_if_empty(self):
        self.deck.add(self.card1)
        self.deck.clear()
        self.assertTrue(self.deck.is_empty())

    def test_deck_has_no_parent(self):
        self.assertFalse(self.deck.has_parent())

    def test_get_sorted_deck(self):
        self.deck.add(self.card2)
        self.deck.add(self.card1)
        self.deck.add(self.card3)
        self.assertEqual(self.deck.cards[0], self.card2)
        sorted = self.deck.sorted()
        self.assertEqual(sorted[0], self.card1)
        self.assertEqual(sorted[1], self.card2)
        self.assertEqual(sorted[2], self.card3)