Ejemplo n.º 1
0
 def test_redeclare_with_same_number(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(
             self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
         self.round.declareTrumpSuitByPlayer(
             self.p2, [Card(CardConstants.HEART, CardConstants.THREE)])
     assert context.exception.args[0] == Round.MORE_TO_REDECLARE_ERROR
Ejemplo n.º 2
0
 def test_declare_trump_suit_invalid_set_of_cards(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(self.p1, [
             Card(CardConstants.SPADE, CardConstants.THREE),
             Card(CardConstants.SPADE, CardConstants.FOUR)
         ])
     assert context.exception.args[
         0] == Round.TRUMP_DECLARATION_MISMATCH_ERROR
Ejemplo n.º 3
0
 def test_allSuits(self):
     for suit in self.suits:
         for number in self.numbers:
             # Special case for jokers
             if (number == CardConstants.JOKER):
                 with self.assertRaises(AssertionError):
                     Card(suit=suit, number=number)
             else:
                 Card(suit=suit, number=number)
Ejemplo n.º 4
0
 def test_player_does_not_have_cards_to_call(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(self.p1, [
             Card(CardConstants.SPADE, CardConstants.THREE),
             Card(CardConstants.SPADE, CardConstants.THREE),
             Card(CardConstants.SPADE, CardConstants.THREE)
         ])
     assert context.exception.args[
         0] == Round.PLAYER_MISSING_CARDS_FOR_CALL_ERROR
Ejemplo n.º 5
0
 def test_second_valid_call_changes_game_state(self):
     self.round.declareTrumpSuitByPlayer(
         self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
     self.round.declareTrumpSuitByPlayer(self.p2, [
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE)
     ])
     assert self.round.trumpNumber == CardConstants.THREE
     assert self.round.trumpSuitDeclarationLength == 2
     assert self.round.trumpSuit == CardConstants.HEART
     assert self.round.currentAlphaPlayerIndex == 0
Ejemplo n.º 6
0
 def test_redeclare_with_fewer_but_previous_declaration(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(
             self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
         self.round.declareTrumpSuitByPlayer(self.p2, [
             Card(CardConstants.HEART, CardConstants.THREE),
             Card(CardConstants.HEART, CardConstants.THREE)
         ])
         self.round.declareTrumpSuitByPlayer(
             self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
     assert context.exception.args[
         0] == Round.MORE_IF_PREVIOUSLY_DECLARED_ERROR
Ejemplo n.º 7
0
 def generateDeck(self):
     self.deck = []
     # Generate full deck
     for i in range(self.getCardsets()):
         self.deck += [
             Card(suit, number) for suit in CardConstants.CARDSUITS
             for number in CardConstants.NONJOKERNUMBERS
         ]
         self.deck += [
             Card(suit, number) for suit in CardConstants.JOKERSUITS
             for number in [CardConstants.JOKER]
         ]
     return
Ejemplo n.º 8
0
 def generate_single_deck():
     """
     Generates a full list of Cards with jokers included
     :return: a list of cards
     """
     non_joker_card = [
         Card(suit, number) for suit in CARDSUITS
         for number in NONJOKERNUMBERS
     ]
     joker_card = [
         Card(suit, number) for suit in JOKERSUITS
         for number in [Rank.JOKER]
     ]
     return non_joker_card + joker_card
Ejemplo n.º 9
0
 def test_can_redeclare_with_previous_declaration(self):
     self.round.declareTrumpSuitByPlayer(
         self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
     self.round.declareTrumpSuitByPlayer(self.p2, [
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE)
     ])
     self.round.declareTrumpSuitByPlayer(self.p1, [
         Card(CardConstants.SPADE, CardConstants.THREE),
         Card(CardConstants.SPADE, CardConstants.THREE)
     ])
     assert self.round.trumpNumber == CardConstants.THREE
     assert self.round.trumpSuit == CardConstants.SPADE
     assert self.round.trumpSuitDeclarationLength == 2
     assert self.round.currentAlphaPlayerIndex == 0
Ejemplo n.º 10
0
 def test_eq(self):
     for suit1 in self.suits:
         for suit2 in self.suits:
             suitsequal = (suit1 == suit2)
             for number1 in self.numbers:
                 for number2 in self.numbers:
                     if ((number1 == CardConstants.JOKER
                          and suit1 not in self.jokersuits)
                             or (number2 == CardConstants.JOKER
                                 and suit2 not in self.jokersuits)):
                         continue
                     numbersequal = (number1 == number2)
                     cardsequal = (numbersequal and suitsequal)
                     card1 = Card(suit=suit1, number=number1)
                     card2 = Card(suit=suit2, number=number2)
                     self.assertEqual(cardsequal, card1 == card2)
Ejemplo n.º 11
0
 def test_first_valid_call_changes_game_state_with_already_determined_alpha(
         self):
     # Assumption is that unset alpha will only be in first round and tie rounds, and future rounds will be explicitly
     # set with a determined alpha player
     self.round.currentAlphaPlayerIndex = 1
     self.round.declareTrumpSuitByPlayer(
         self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
     assert self.round.currentAlphaPlayerIndex == 1
Ejemplo n.º 12
0
    def test_insertCard(self):
        p = Player('Teddy', [])
        a = Card(suit=CardConstants.DIAMOND, number=CardConstants.FIVE)
        p.addCardToHand(a)
        self.assertTrue(p.getHand() == [a])
        # Yeah, this is a little error-prone, since it's the
        # same object. But this is just for testing purposes.
        # Probably best to avoid this in real src
        p.addCardToHand(a)
        self.assertTrue(p.getHand() == [a, a])

        b = Card(suit=CardConstants.CLUB, number=CardConstants.TWO)
        p.addCardToHand(b)
        c = Card(suit=CardConstants.CLUB, number=CardConstants.THREE)
        p.addCardToHand(c)
        self.assertTrue(p.getHand() == [b, c, a, a])

        d = Card(suit=CardConstants.HEART, number=CardConstants.SIX, istrumpnumber=True, istrumpsuit=True)
        p.addCardToHand(d)
        e = Card(suit=CardConstants.HEART, number=CardConstants.FIVE, istrumpsuit=True)
        p.addCardToHand(e)
        self.assertTrue(p.getHand() == [b, c, a, a, e, d])
        # Mix it up to keep us on our toes
        self.assertFalse(p.getHand() == [a, a, b, c, d, e])

        # Switched the order to stess test things. Totally
        # not because I screwed up earlier...
        f = Card(number=CardConstants.JOKER, suit=CardConstants.SMALL)
        p.addCardToHand(f)
        g = Card(number=CardConstants.JOKER, suit=CardConstants.BIG)
        p.addCardToHand(g)
        self.assertTrue(p.getHand() == [b, c, a, a, e, d, f, g])
Ejemplo n.º 13
0
 def test_normal_ranking(self):
     """This unit test. Test if the normal card rankings work"""
     a = Card(suit=Suit.DIAMOND, number=Rank.ACE)
     b = Card(suit=Suit.DIAMOND, number=Rank.TEN)
     self.assertFalse(a < b)
     self.assertFalse(a <= b)
     self.assertTrue(a > b)
     self.assertTrue(a >= b)
     b = Card(suit=Suit.DIAMOND, number=Rank.ACE)
     self.assertFalse(a > b)
     self.assertTrue(a >= b)
     self.assertFalse(a < b)
     self.assertTrue(a <= b)
     b = Card(suit=Suit.BIG, number=Rank.JOKER)
     self.assertFalse(a > b)
     self.assertFalse(a >= b)
     self.assertTrue(a < b)
     self.assertTrue(a <= b)
Ejemplo n.º 14
0
 def test_istrumpnumber(self):
     a = Card(suit='DIAMOND',
              number='FIVE',
              istrumpnumber=True,
              istrumpsuit=True)
     self.assertTrue(a.isTrumpNumber())
     a = Card(suit='DIAMOND', number='FIVE')
     self.assertFalse(a.isTrumpNumber())
Ejemplo n.º 15
0
 def test_lt(self):
     a = Card(suit='DIAMOND', number='ACE')
     b = Card(suit='DIAMOND', number='TEN')
     self.assertFalse(a < b)
     self.assertFalse(a <= b)
     self.assertTrue(a > b)
     self.assertTrue(a >= b)
     b = Card(suit='DIAMOND', number='ACE')
     self.assertFalse(a > b)
     self.assertTrue(a >= b)
     self.assertFalse(a < b)
     self.assertTrue(a <= b)
     b = Card(suit='BIG', number='JOKER')
     self.assertFalse(a > b)
     self.assertFalse(a >= b)
     self.assertTrue(a < b)
     self.assertTrue(a <= b)
     b = Card(suit='SPADE',
              number='TWO',
              istrumpnumber=True,
              istrumpsuit=True)
     self.assertFalse(a > b)
     self.assertFalse(a >= b)
     self.assertTrue(a < b)
     self.assertTrue(a <= b)
     b = Card(suit='CLUB', number='THREE', istrumpsuit=True)
     self.assertFalse(a > b)
     self.assertFalse(a >= b)
     self.assertTrue(a < b)
     self.assertTrue(a <= b)
     a = Card(suit='CLUB', number='FOUR', istrumpsuit=True)
     self.assertTrue(a > b)
     self.assertTrue(a >= b)
     self.assertFalse(a < b)
     self.assertFalse(a <= b)
     a = Card(suit='CLUB',
              number='FIVE',
              istrumpnumber=True,
              istrumpsuit=True)
     self.assertTrue(a > b)
     self.assertTrue(a >= b)
     self.assertFalse(a < b)
     self.assertFalse(a <= b)
Ejemplo n.º 16
0
 def setUp(self):
     self.numbers = CardConstants.NUMBERS
     self.suits = CardConstants.CARDSUITS
     self.jokersuits = CardConstants.JOKERSUITS
     Card.clear_trumps()
Ejemplo n.º 17
0
    def test_istrumpnumber(self):
        Card.set_trump_suit(Suit.DIAMOND)
        Card.set_trump_rank(Rank.FIVE)
        a = Card(suit=Suit.DIAMOND, number=Rank.FIVE)
        self.assertTrue(a.isTrumpNumber())

        Card.set_trump_suit(None)
        Card.set_trump_rank(None)
        a = Card(suit=Suit.DIAMOND, number=Rank.FIVE)
        self.assertFalse(a.isTrumpNumber())
Ejemplo n.º 18
0
    def test_istrumpsuit(self):
        a = Card(suit=Suit.DIAMOND, number=Rank.FIVE)
        self.assertFalse(a.isTrumpSuit())
        a.setTrumpSuit(istrumpsuit=True)
        self.assertTrue(a.isTrumpSuit())

        Card.set_trump_suit(Suit.DIAMOND)
        a = Card(suit=Suit.DIAMOND, number=Rank.SIX)
        self.assertTrue(a.isTrumpSuit())
        a.setTrumpSuit(istrumpsuit=False)
        self.assertFalse(a.isTrumpSuit())

        Card.set_trump_suit(Suit.DIAMOND)
        Card.set_trump_rank(Rank.TEN)
        a = Card(suit=Suit.DIAMOND, number=Rank.TEN)
        self.assertTrue(a.isTrumpSuit())
        with self.assertRaises(AssertionError):
            a.setTrumpSuit(False)
Ejemplo n.º 19
0
    def test_insertCard(self):
        p = Player('Teddy', [])
        Card.set_trump_suit(Suit.HEART)
        Card.set_trump_rank(Rank.SIX)
        a = Card(suit=Suit.DIAMOND, number=Rank.FIVE)
        b = Card(suit=Suit.CLUB, number=Rank.TWO)
        c = Card(suit=Suit.CLUB, number=Rank.THREE)
        d = Card(suit=Suit.HEART, number=Rank.SIX)
        e = Card(suit=Suit.HEART, number=Rank.FIVE)
        f = Card(suit=Suit.SMALL, number=Rank.JOKER)
        g = Card(suit=Suit.BIG, number=Rank.JOKER)

        p.add_card_to_hand(a)
        self.assertTrue(p.get_hand() == [copy.deepcopy(a)])
        # Yeah, this is a little error-prone, since it's the
        # same object. But this is just for testing purposes.
        # Probably best to avoid this in real src
        p.add_card_to_hand(a)
        self.assertTrue(p.get_hand() == [copy.deepcopy(a), copy.deepcopy(a)])

        p.add_card_to_hand(copy.deepcopy(b))
        p.add_card_to_hand(copy.deepcopy(c))
        self.assertTrue(p.get_hand() == [b, c, a, a])

        p.add_card_to_hand(d)
        p.add_card_to_hand(e)
        self.assertTrue(p.get_hand() == [b, c, a, a, e, d])
        # Mix it up to keep us on our toes
        self.assertFalse(p.get_hand() == [a, a, b, c, d, e])

        # Switched the order to stress test things. Totally
        # not because I screwed up earlier...

        p.add_card_to_hand(f)
        p.add_card_to_hand(g)
        self.assertTrue(p.get_hand() == [b, c, a, a, e, d, f, g])
Ejemplo n.º 20
0
 def test_declare_trump_suit_player_not_in_game(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(
             Player('Kevin'),
             [Card(CardConstants.SPADE, CardConstants.THREE)])
     assert context.exception.args[0] == Round.INVALID_PLAYER_ERROR
Ejemplo n.º 21
0
 def test_istrumpsuit(self):
     a = Card(suit='DIAMOND', number='FIVE')
     self.assertFalse(a.isTrumpSuit())
     a.setTrumpSuit(istrumpsuit=True)
     self.assertTrue(a.isTrumpSuit())
     a = Card(suit='DIAMOND', number='SIX', istrumpsuit=True)
     self.assertTrue(a.isTrumpSuit())
     a.setTrumpSuit(istrumpsuit=False)
     self.assertFalse(a.isTrumpSuit())
     a = Card(suit='DIAMOND',
              number='TEN',
              istrumpnumber=True,
              istrumpsuit=True)
     self.assertTrue(a.isTrumpSuit())
     with self.assertRaises(AssertionError):
         a.setTrumpSuit(False)
     with self.assertRaises(AssertionError):
         Card(suit='DIAMOND',
              number='FOUR',
              istrumpnumber=True,
              istrumpsuit=False)
Ejemplo n.º 22
0
 def test_declare_trump_suit_wrong_number(self):
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(
             self.p1, [Card(CardConstants.SPADE, CardConstants.FOUR)])
     assert context.exception.args[0] == Round.NOT_TRUMP_NUMBER_ERROR
Ejemplo n.º 23
0
 def test_fails_when_trying_to_redeclare_wrong_suit(self):
     self.round.declareTrumpSuitByPlayer(
         self.p2, [Card(CardConstants.HEART, CardConstants.THREE)])
     self.assertTrue(
         self.round.trumpSuit == CardConstants.HEART,
         'Trump suit is not heart after first declaration with one card')
     self.round.declareTrumpSuitByPlayer(self.p1, [
         Card(CardConstants.SPADE, CardConstants.THREE),
         Card(CardConstants.SPADE, CardConstants.THREE)
     ])
     self.assertTrue(
         self.round.trumpSuit == CardConstants.SPADE,
         'Trump suit is not spade after overturning with two cards')
     self.round.declareTrumpSuitByPlayer(self.p2, [
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE)
     ])
     self.assertTrue(
         self.round.trumpSuit == CardConstants.CLUB,
         'Trump suit is not club after overturning with three cards')
     self.round.declareTrumpSuitByPlayer(self.p1, [
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE)
     ])
     self.assertTrue(
         self.round.trumpSuit == CardConstants.DIAMOND,
         'Trump suit is not diamond after overturning with four cards')
     with self.assertRaises(ValueError) as context:
         self.round.declareTrumpSuitByPlayer(self.p2, [
             Card(CardConstants.HEART, CardConstants.THREE),
             Card(CardConstants.HEART, CardConstants.THREE),
             Card(CardConstants.HEART, CardConstants.THREE),
             Card(CardConstants.HEART, CardConstants.THREE)
         ])
     self.assertTrue(
         context.exception.args[0] == Round.MORE_TO_REDECLARE_ERROR,
         'Should have thrown exception when trying to overturn 4 diamonds with 4 hearts after 3 clubs'
     )
Ejemplo n.º 24
0
 def test_can_redeclare_while_swapping_suits_multiple_times(self):
     self.round.declareTrumpSuitByPlayer(
         self.p1, [Card(CardConstants.SPADE, CardConstants.THREE)])
     self.round.declareTrumpSuitByPlayer(self.p2, [
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE)
     ])
     self.round.declareTrumpSuitByPlayer(self.p1, [
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE)
     ])
     self.round.declareTrumpSuitByPlayer(self.p2, [
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE)
     ])
     self.round.declareTrumpSuitByPlayer(self.p1, [
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE)
     ])
     assert self.round.trumpSuit == CardConstants.DIAMOND
Ejemplo n.º 25
0
 def setUp(self):
     self.p1 = Player('Ted', [
         Card(CardConstants.SPADE, CardConstants.THREE),
         Card(CardConstants.SPADE, CardConstants.THREE),
         Card(CardConstants.SPADE, CardConstants.FOUR),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE),
         Card(CardConstants.DIAMOND, CardConstants.THREE)
     ])
     self.p2 = Player('Mary', [
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.HEART, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE),
         Card(CardConstants.CLUB, CardConstants.THREE)
     ])
     self.players = [self.p1, self.p2]
     self.round = Round(trumpNumber=CardConstants.THREE,
                        players=self.players)
Ejemplo n.º 26
0
 def test_jokerSuits(self):
     for suit in self.jokersuits:
         Card(suit=suit, number=CardConstants.JOKER)
Ejemplo n.º 27
0
 def test_badSuit(self):
     with self.assertRaises(AssertionError):
         Card(suit='LOLNO', number=CardConstants.ACE)
Ejemplo n.º 28
0
 def test_badNumber(self):
     with self.assertRaises(AssertionError):
         Card(suit=CardConstants.SPADE, number='TREEFIDDY')
Ejemplo n.º 29
0
    def test_trump_rankings(self):
        """This unit test, test if the Trump cards escalate value"""
        Card.set_trump_rank(Rank.TWO)
        Card.set_trump_suit(Suit.SPADE)
        a = Card(suit=Suit.DIAMOND, number=Rank.ACE)
        b = Card(suit=Suit.SPADE, number=Rank.TWO)
        self.assertFalse(a > b)
        self.assertFalse(a >= b)
        self.assertTrue(a < b)
        self.assertTrue(a <= b)

        Card.set_trump_suit(Suit.CLUB)
        b = Card(suit=Suit.CLUB, number=Rank.THREE)
        self.assertFalse(a > b)
        self.assertFalse(a >= b)
        self.assertTrue(a < b)
        self.assertTrue(a <= b)

        a = Card(suit=Suit.CLUB, number=Rank.FOUR)
        self.assertTrue(a > b)
        self.assertTrue(a >= b)
        self.assertFalse(a < b)
        self.assertFalse(a <= b)

        Card.set_trump_rank(Rank.FIVE)
        Card.set_trump_suit(Suit.CLUB)
        a = Card(suit=Suit.CLUB, number=Rank.FIVE)
        self.assertTrue(a > b)
        self.assertTrue(a >= b)
        self.assertFalse(a < b)
        self.assertFalse(a <= b)