def test_deck_constructor(self): deck = a2.Deck() self.assertEqual(deck.get_cards(), [], "A Deck with no starting cards should be empty") deck = a2.Deck(starting_cards=None) self.assertEqual(deck.get_cards(), [], "A Deck with no starting cards should be empty") deck1 = a2.Deck() deck2 = a2.Deck() card = a2.Card(1, a2_support.CardColour.blue) deck1.add_card(card) self.assertEqual( deck2.get_cards(), [], "List should not be used for default value for starting_cards (should be None)" )
def test_deck_cards_amount(self): cards = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green) ] deck = a2.Deck(starting_cards=cards) self.assertListEqual(deck.get_cards(), cards, "starting_cards parameter should be used to populate deck") self.assertEqual(deck.get_amount(), 3)
def test_deck_top(self): cards = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green), a2.Card(4, a2_support.CardColour.yellow), a2.Card(6, a2_support.CardColour.yellow), a2.Card(10, a2_support.CardColour.blue) ] deck = a2.Deck(starting_cards=cards.copy()) self.assertEqual(cards[-1], deck.top(), "Deck.top returns wrong card") deck.pick()
def test_deck_shuffle(self): cards = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green) ] deck = a2.Deck(starting_cards=cards.copy()) found_different = False for _ in range(30): deck.shuffle() if deck.get_cards() != cards: found_different = True break self.assertIs(found_different, True, "Deck.shuffle should randomise order")
def test_deck_add_cards(self): cards1 = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red) ] deck = a2.Deck() deck.add_cards(cards1) self.assertListEqual(deck.get_cards(), cards1, "Deck's cards are invalid after adding a list of cards") cards2 = [ a2.Card(4, a2_support.CardColour.yellow), a2.Card(6, a2_support.CardColour.yellow) ] deck.add_cards(cards2) self.assertListEqual(deck.get_cards(), cards1 + cards2, "Deck's cards are invalid after adding a second list of cards")
def test_player_pick_card(self): deck = a2.Deck() deck.add_cards([ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green), a2.Card(4, a2_support.CardColour.yellow), a2.Card(6, a2_support.CardColour.yellow), a2.Card(10, a2_support.CardColour.blue) ]) with self.assertRaises(NotImplementedError): a2.Player("Test Player").pick_card(deck) player = a2.HumanPlayer("Test Player") player.get_deck().add_cards(deck.get_cards().copy()) self.assertIsNone(player.pick_card(deck), 'HumanPlayer.pick_card should return None')
def test_deck_add_card(self): cards = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green), a2.Card(4, a2_support.CardColour.yellow), a2.Card(6, a2_support.CardColour.yellow), a2.Card(10, a2_support.CardColour.blue) ] deck = a2.Deck() deck.add_card(cards[0]) deck.add_card(cards[1]) deck.add_card(cards[2]) deck.add_card(cards[3]) deck.add_card(cards[4]) deck.add_card(cards[5]) self.assertListEqual(deck.get_cards(), cards, "Deck.get_cards returns incorrectly")
def test_deck_pick(self): cards = [ a2.Card(1, a2_support.CardColour.blue), a2.Card(3, a2_support.CardColour.red), a2.Card(2, a2_support.CardColour.green), a2.Card(4, a2_support.CardColour.yellow), a2.Card(6, a2_support.CardColour.yellow), a2.Card(10, a2_support.CardColour.blue) ] deck = a2.Deck(starting_cards=cards) self.assertListEqual(cards[-1:], deck.pick()) expected_cards = cards[-3:] actual_cards = deck.pick(amount=3) self.assertEqual(len(expected_cards), len(actual_cards), "Deck.pick returns incorrect amount of cards") for card in actual_cards: self.assertIn(card, expected_cards, "Deck.pick returns unexpected card")