Ejemplo n.º 1
0
    def test_play_reversed(self):
        """
        Tests for a game which reverses the order into negative numbers.
        """
        pa = player.RandomAiPlayer("Player A")
        pb = player.RandomAiPlayer("Player B")
        pc = player.RandomAiPlayer("Player C")

        u = uno.Uno([pa, pb, pc])
        pa.hand = [
            unocard.UnoCard(1, 7),
            unocard.UnoCard(1, 7),
            unocard.UnoCard(1, 7)
        ]  # 7 of Diamonds
        pb.hand = [unocard.ReverseActionCard(1),
                   unocard.ReverseActionCard(1)]  # 10 of Diamonds
        pc.hand = [unocard.UnoCard(1, 9),
                   unocard.UnoCard(1, 9)]  # 9 of Diamonds
        u.play()

        # This game should have resulted in 5 cards played, in order:
        self.assertEqual(5, len(u.pile))
        self.assertEqual(7, u.pile[0].rank)
        self.assertEqual(10, u.pile[1].rank)
        self.assertEqual(7, u.pile[2].rank)
        self.assertEqual(9, u.pile[3].rank)
        self.assertEqual(10, u.pile[4].rank)
Ejemplo n.º 2
0
    def test_drawHand(self):
        """
        Tests for drawing hands from full to empty decks.
        """
        u = uno.Uno([
            player.RandomAiPlayer("Player A"),
            player.RandomAiPlayer("Player B"),
            player.RandomAiPlayer("Player C")
        ])

        self.assertEqual(5, uno.Uno.STARTING_HAND_SIZE)
        startDeckLen = len(u.deck)
        self.assertTrue(startDeckLen > 5)

        # Check 5 cards are drawn and removed from deck
        hand = u._drawHand()
        self.assertEqual(5, len(hand))
        for c in hand:
            self.assertTrue(isinstance(c, unocard.UnoCard))
        self.assertEqual(startDeckLen - 5, len(u.deck))

        # Check only 3 cards are drawn when deck only contains 3.
        u.deck = hand[:3]
        hand = u._drawHand()
        self.assertEqual(3, len(hand))
        self.assertEqual(0, len(u.deck))

        # Check hand contains zero cards when deck is empty.
        u.deck = []
        hand = u._drawHand()
        self.assertEqual(0, len(hand))
        self.assertEqual(0, len(u.deck))
Ejemplo n.º 3
0
    def test_play_drawExtraCards(self):
        """
        Tests for a game where a player has to draw extra cards.
        """
        pa = player.RandomAiPlayer("Player A")
        pb = player.RandomAiPlayer("Player B")
        pc = player.RandomAiPlayer("Player C")

        u = uno.Uno([pa, pb, pc])
        pa.hand = [unocard.UnoCard(1, 7)]  # 7 of Diamonds
        pb.hand = [unocard.DrawTwoActionCard(1),
                   unocard.DrawTwoActionCard(1)]  # Q of Diamonds
        pc.hand = [unocard.UnoCard(1, 9),
                   unocard.UnoCard(1, 9)]  # 9 of Diamonds

        # The deck will start with certain cards meant to be drawn by certain players.
        u.deck[0] = unocard.UnoCard(1, 7)
        u.deck[1] = unocard.UnoCard(1, 7)
        u.deck[2] = unocard.UnoCard(1, 7)
        u.deck[3] = unocard.UnoCard(1, 7)
        u.deck[4] = unocard.UnoCard(1, 9)
        u.deck[5] = unocard.UnoCard(1, 9)
        u.deck[6] = unocard.UnoCard(0, 2)  # 2 of Clubs should not be drawn

        u.gameState.numExtraCardDraw = 4  # Start with drawing 4 cards.
        u.play()

        # This game should have resulted in 5 cards played, in order:
        self.assertEqual(5, len(u.pile))
        self.assertEqual(7, u.pile[0].rank)
        self.assertEqual(12, u.pile[1].rank)
        self.assertEqual(9, u.pile[2].rank)
        self.assertEqual(7, u.pile[3].rank)
        self.assertEqual(12, u.pile[4].rank)

        # Top card of deck should be 2 of clubs.
        self.assertEqual(2, u.deck[0].rank)

        # Player A and C should both end with 3 cards.
        self.assertEqual(3, len(pa.hand))
        self.assertEqual(3, len(pc.hand))
Ejemplo n.º 4
0
    def test_play_normalRounds(self):
        """
        Tests for the play method in a normal game that last 4 rounds.
        """
        pa = player.RandomAiPlayer("Player A")
        pb = player.RandomAiPlayer("Player B")
        pc = player.RandomAiPlayer("Player C")

        u = uno.Uno([pa, pb, pc])
        pa.hand = [unocard.UnoCard(1, 7),
                   unocard.UnoCard(1, 7)]  # 7 of Diamonds
        pb.hand = [unocard.UnoCard(1, 8),
                   unocard.UnoCard(1, 8)]  # 8 of Diamonds
        pc.hand = [unocard.UnoCard(1, 9),
                   unocard.UnoCard(1, 9)]  # 9 of Diamonds
        u.play()

        # This game should have resulted in 4 cards played, in order:
        self.assertEqual(4, len(u.pile))
        self.assertEqual(7, u.pile[0].rank)
        self.assertEqual(8, u.pile[1].rank)
        self.assertEqual(9, u.pile[2].rank)
        self.assertEqual(7, u.pile[3].rank)