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
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
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)
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
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
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
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
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
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
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)
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
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])
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)
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())
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)
def setUp(self): self.numbers = CardConstants.NUMBERS self.suits = CardConstants.CARDSUITS self.jokersuits = CardConstants.JOKERSUITS Card.clear_trumps()
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())
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)
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])
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
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)
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
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' )
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
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)
def test_jokerSuits(self): for suit in self.jokersuits: Card(suit=suit, number=CardConstants.JOKER)
def test_badSuit(self): with self.assertRaises(AssertionError): Card(suit='LOLNO', number=CardConstants.ACE)
def test_badNumber(self): with self.assertRaises(AssertionError): Card(suit=CardConstants.SPADE, number='TREEFIDDY')
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)