Beispiel #1
0
 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)
Beispiel #2
0
    def test_player_has_won(self):
        player = a2.Player("Test Player")

        self.assertIs(player.has_won(), True)

        player.get_deck().add_card(a2.Card(9, a2_support.CardColour.blue))
        player.get_deck().add_card(a2.Card(8, a2_support.CardColour.red))
        player.get_deck().add_card(a2.Card(7, a2_support.CardColour.black))

        self.assertIs(player.has_won(), False, "Player.has_won should return False if the Player has cards")
    def test_card_str(self):
        card = a2.Card(90, a2_support.CardColour.red)
        skip = a2.SkipCard(12, a2_support.CardColour.yellow)
        reverse = a2.ReverseCard(3, a2_support.CardColour.green)
        pickup2 = a2.Pickup2Card(45, a2_support.CardColour.blue)
        pickup4 = a2.Pickup4Card(56, a2_support.CardColour.black)

        self.assertEqual(str(card), 'Card(90, CardColour.red)',
                         'Card.__str__ does not return correctly')
        self.assertEqual(repr(card), 'Card(90, CardColour.red)',
                         'Card.__repr__ does not return correctly')

        self.assertEqual(str(skip), 'SkipCard(12, CardColour.yellow)',
                         'SkipCard.__str__ does not return correctly')
        self.assertEqual(repr(skip), 'SkipCard(12, CardColour.yellow)',
                         'SkipCard.__repr__ does not return correctly')

        self.assertEqual(str(reverse), 'ReverseCard(3, CardColour.green)',
                         'ReverseCard.__str__ does not return correctly')
        self.assertEqual(repr(reverse), 'ReverseCard(3, CardColour.green)',
                         'ReverseCard.__repr__ does not return correctly')

        self.assertEqual(str(pickup2), 'Pickup2Card(45, CardColour.blue)',
                         'Pickup2Card.__str__ does not return correctly')
        self.assertEqual(repr(pickup2), 'Pickup2Card(45, CardColour.blue)',
                         'Pickup2Card.__repr__ does not return correctly')

        self.assertEqual(str(pickup4), 'Pickup4Card(56, CardColour.black)',
                         'Pickup4Card.__str__ does not return correctly')
        self.assertEqual(repr(pickup4), 'Pickup4Card(56, CardColour.black)',
                         'Pickup4Card.__repr__ does not return correctly')
Beispiel #4
0
    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")
Beispiel #5
0
    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 loadGame(self):
     deck = [
         a2.Card(1, a2_support.CardColour.red),
         a2.Card(2, a2_support.CardColour.blue),
         a2.Card(3, a2_support.CardColour.green),
         a2.Card(4, a2_support.CardColour.yellow),
         a2.Card(5, a2_support.CardColour.red),
         a2.Card(6, a2_support.CardColour.blue),
         a2.Card(7, a2_support.CardColour.blue),
     ]
     self._deck = a2.Deck(starting_cards=deck)
     self._players = [
         a2.HumanPlayer("Anna Truffet"),
         a2.ComputerPlayer("Ashleigh Richardson"),
         a2.HumanPlayer("Benjamin Martin"),
         a2.ComputerPlayer("Brae Webb"),
         a2.HumanPlayer("Harry Keightly"),
         a2.ComputerPlayer("Henry O'Brien"),
         a2.HumanPlayer("Joshua Arnold"),
         a2.ComputerPlayer("Justin Luong"),
         a2.HumanPlayer("Luis Woodrow"),
         a2.ComputerPlayer("Mike Pham"),
         a2.HumanPlayer("Rudi Scarpa"),
         a2.ComputerPlayer("Sam Eadie"),
         a2.HumanPlayer("Steven Summers"),
         a2.ComputerPlayer("Wilson Kong"),
     ]
     self._game = a2_support.UnoGame(self._deck, self._players)
    def test_card_setters(self):
        card = a2.Card(23, a2_support.CardColour.green)
        self.assertIsNone(card.set_number(42), "Card.set_number returns value")
        self.assertEqual(card.get_number(), 42,
                         "Card.set_number does not update value")

        self.assertIsNone(card.set_colour(a2_support.CardColour.yellow),
                          "Card.set_colour returns value")
        self.assertEqual(card.get_colour(), a2_support.CardColour.yellow,
                         "Card.set_colour does not update value")
Beispiel #8
0
    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)")
Beispiel #9
0
    def test_play_card(self):
        self.loadGame()
        self.assertEqual(self._players[0], self._game.get_turns().current(),
                         "Game should start with first player")

        skip_card = a2.Card(21, a2_support.CardColour.blue)
        skip_card.play(self._players[0], self._game)

        # play should have no effect
        self.assertEqual(self._players[0].get_name(),
                         self._game.get_turns().current().get_name(),
                         "Playing Card should change the player")

        self.assertEqual(self._game.get_turns().peak().get_deck().get_amount(), 0,
                         "Playing Card should change player's deck")
    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()
Beispiel #11
0
    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')
Beispiel #12
0
    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")
    def test_player_pick_card_auto(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)
        ])

        player = a2.ComputerPlayer("Test Player")

        player.get_deck().add_card(a2.Card(6, a2_support.CardColour.yellow))
        picked = player.pick_card(deck)
        self.assertIsNone(
            picked,
            "ComputerPlayer.pick_card should return None if no card can be played"
        )

        cards = [
            a2.Card(10, a2_support.CardColour.yellow),
            a2.Card(3, a2_support.CardColour.red),
            a2.Card(2, a2_support.CardColour.green),
            a2.Card(4, a2_support.CardColour.blue),
            a2.Card(5, a2_support.CardColour.yellow),
        ]
        player.get_deck().add_cards(cards)
        picked = player.pick_card(deck)
        self.assertIsInstance(
            picked, a2.Card,
            "ComputerPlayer.pick_card should return an instance of Card (or a subclass) if it is possible to play a card"
        )
 def test_card_getters(self):
     card = a2.Card(23, a2_support.CardColour.red)
     self.assertEqual(card.get_number(), 23,
                      "Card.get_number returns incorrect value")
     self.assertEqual(card.get_colour(), a2_support.CardColour.red,
                      "Card.get_colour returns incorrect value")