Esempio n. 1
0
 def testCanCreateJokerUsingRank(self):
     c = card.Card('JOKER', None)
     self.assertEqual(ck.JOKER, c.rank)
     self.assertTrue(c.is_joker())
     c = card.Card('joker', None)
     self.assertEqual(ck.JOKER, c.rank)
     self.assertTrue(c.is_joker())
Esempio n. 2
0
 def testConvertCardToString(self):
     c = card.Card(4, ck.DIAMONDS)
     self.assertEqual('4 of diamonds (face up)', str(c))
     c = card.Card(ck.ACE, ck.SPADES, ck.FACE_DOWN)
     self.assertEqual('ace of spades (face down)', str(c))
     c = card.Card(ck.JOKER, None)
     self.assertEqual('joker (face up)', str(c))
Esempio n. 3
0
 def testCanCreateCardFaceUp(self):
     c = card.Card(8, 'diamonds', 'UP')
     self.assertEqual(ck.FACE_UP, c.face)
     c = card.Card(9, 'hearts', 'up')
     self.assertEqual(ck.FACE_UP, c.face)
     c = card.Card('joker', None, 'up')
     self.assertEqual(ck.FACE_UP, c.face)
Esempio n. 4
0
 def testCanCreateCardFaceDown(self):
     c = card.Card(7, 'clubs', 'DOWN')
     self.assertEqual(ck.FACE_DOWN, c.face)
     c = card.Card(6, 'spades', 'down')
     self.assertEqual(ck.FACE_DOWN, c.face)
     c = card.Card('joker', None, 'down')
     self.assertEqual(ck.FACE_DOWN, c.face)
Esempio n. 5
0
 def testAddAddsCardToTopOfDeck(self):
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     new_card = card.Card(ck.TWO, ck.CLUBS)
     d.add(new_card)
     c = d.deal()
     self.assertEqual(new_card, c)
     c = d.deal()
     self.assertEqual(cards[0], c)
Esempio n. 6
0
    def testUnequalCardsHashUnequal(self):
        c1 = card.Card(ck.QUEEN, ck.HEARTS, ck.FACE_UP)
        c2 = card.Card(ck.KING, ck.HEARTS, ck.FACE_UP)
        c3 = card.Card(ck.QUEEN, ck.SPADES, ck.FACE_UP)
        c4 = card.Card(ck.QUEEN, ck.HEARTS, ck.FACE_DOWN)

        self.assertNotEqual(hash(c1), hash(c2))
        self.assertNotEqual(hash(c1), hash(c3))
        self.assertNotEqual(hash(c1), hash(c4))
Esempio n. 7
0
 def testDealWithFaceSetsFace(self):
     d = deck.Deck([
         card.Card(ck.ACE, ck.SPADES, ck.FACE_DOWN),
         card.Card(ck.ACE, ck.SPADES, ck.FACE_UP)
     ])
     c = d.deal(face=ck.FACE_UP)
     self.assertEqual(ck.FACE_UP, c.face)
     c = d.deal(face=ck.FACE_DOWN)
     self.assertEqual(ck.FACE_DOWN, c.face)
Esempio n. 8
0
    def testUnequalCardsAreUnequal(self):
        c1 = card.Card(ck.QUEEN, ck.HEARTS, ck.FACE_UP)
        c2 = card.Card(ck.KING, ck.HEARTS, ck.FACE_UP)
        c3 = card.Card(ck.QUEEN, ck.SPADES, ck.FACE_UP)
        c4 = card.Card(ck.QUEEN, ck.HEARTS, ck.FACE_DOWN)

        self.assertNotEqual(c1, c2)
        self.assertNotEqual(c1, c3)
        self.assertNotEqual(c1, c4)
Esempio n. 9
0
 def testAddToBottomAddsCardToBottomOfDeck(self):
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     new_card = card.Card(ck.TWO, ck.CLUBS)
     d.add(new_card, to_bottom=True)
     dealt_cards = d.deal_several(len(cards))
     self.assertEqual(cards, dealt_cards)
     c = d.deal()
     self.assertEqual(new_card, c)
Esempio n. 10
0
 def testInitialCardsAreDealtInOrder(self):
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     self.assertEqual(cards[0], d.deal())
     self.assertEqual(cards[1], d.deal())
     self.assertEqual(cards[2], d.deal())
     self.assertEqual(cards[3], d.deal())
Esempio n. 11
0
 def testWithFaceReturnsCardWithDifferentFace(self):
     c1 = card.Card(6, 'clubs', 'up')
     c2 = c1.with_face('down')
     self.assertEqual(c1.rank, c2.rank)
     self.assertEqual(c1.suit, c2.suit)
     self.assertEqual('up', c1.face)
     self.assertEqual('down', c2.face)
Esempio n. 12
0
 def testPeekDoesNotRemoveCardFromDeck(self):
     cards = [card.Card(ck.ACE, suit, ck.FACE_DOWN) for suit in ck.SUITS]
     d = deck.Deck(cards)
     c = d.peek()
     self.assertEqual(len(cards), len(d))
     c2 = d.deal()
     self.assertEqual(c, c2)
Esempio n. 13
0
 def testResetUnshufflesDeck(self):
     random.seed("foo")
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     d.shuffle()
     d.reset()
     dealt_cards = d.deal_several(4)
     self.assertEqual(cards, dealt_cards)
Esempio n. 14
0
 def testResetSetsDeckToOriginalCards(self):
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     d.deal_several(len(cards))
     self.assertEqual(0, len(d))
     d.reset()
     self.assertEqual(len(cards), len(d))
     dealt_cards = d.deal_several(4)
     self.assertEqual(cards, dealt_cards)
Esempio n. 15
0
 def testShuffle(self):
     # Hardcode the seed for this test.
     random.seed("foo")
     cards = [card.Card(ck.ACE, suit) for suit in ck.SUITS]
     d = deck.Deck(cards)
     d.shuffle()
     dealt_cards = d.deal_several(len(cards))
     # This was determined by capturing the results using the given seed.
     expected_shuffle = [cards[0], cards[3], cards[1], cards[2]]
     self.assertEqual(expected_shuffle, dealt_cards)
Esempio n. 16
0
 def testNormalCardIsNotJoker(self):
     c = card.Card(10, 'diamonds')
     self.assertFalse(c.is_joker())
Esempio n. 17
0
 def testCardIsFaceUpByDefault(self):
     c = card.Card('king', 'clubs')
     self.assertEqual(ck.FACE_UP, c.face)
Esempio n. 18
0
 def testJokerWithInvalidRankThrowsException(self):
     with self.assertRaises(ValueError):
         card.Card(None, 'joker')
Esempio n. 19
0
 def testCanCreateCardWithIntegerRank(self):
     c = card.Card(2, 'clubs')
     self.assertEqual('2', c.rank)
Esempio n. 20
0
 def testCanCreateJokerWithSuitOfJoker(self):
     c = card.Card('joker', 'joker')
     self.assertEqual(ck.JOKER, c.rank)
     self.assertIsNone(c.suit)
     self.assertTrue(c.is_joker())
Esempio n. 21
0
 def testJokerWithInvalidSuitThrowsException(self):
     with self.assertRaises(ValueError):
         card.Card('joker', 'hearts')
Esempio n. 22
0
 def testCardWithRankOfOneCreatesAce(self):
     c = card.Card(1, 'spades')
     self.assertEqual(ck.ACE, c.rank)
     c = card.Card('1', 'clubs')
     self.assertEqual(ck.ACE, c.rank)
Esempio n. 23
0
 def testInvalidSuitThrowsException(self):
     with self.assertRaises(ValueError):
         card.Card('ace', 'spuds')
     with self.assertRaises(AttributeError):
         card.Card(4, 1)
Esempio n. 24
0
 def testCanCreateCardWithLowercaseSuit(self):
     c = card.Card('jack', 'spades')
     self.assertEqual(ck.SPADES, c.suit)
Esempio n. 25
0
 def testCanCreaceAceWithAceRank(self):
     c = card.Card('ace', 'spades')
     self.assertEqual(ck.ACE, c.rank)
Esempio n. 26
0
 def testInvalidFaceThrowsException(self):
     with self.assertRaises(ValueError):
         c = card.Card(5, 'hearts', 'sideways')
Esempio n. 27
0
 def testCanCreateFaceCard(self):
     c = card.Card('JACK', 'diamonds')
     self.assertEqual(ck.JACK, c.rank)
     c = card.Card('queen', 'hearts')
     self.assertEqual(ck.QUEEN, c.rank)
Esempio n. 28
0
 def testCanCreateCardWithUppercaseSuit(self):
     c = card.Card(2, 'CLUBS')
     self.assertEqual(ck.CLUBS, c.suit)
Esempio n. 29
0
import copy
import random

import pygame

from cardkit import card
from cardkit import card_constants as ck

DEFAULT_CARD_SET = [
    card.Card(rank, suit, ck.FACE_DOWN) for rank, suit in ck.DECK_OF_52
]


class DeckError(Exception):
    """A runtime error encountered while doing Deck operations."""
    pass


class Deck(object):
    """An ordered, mutable collection of Cards.

    The deck has a top and a bottom. Most operations involve the top
    of the deck.

    len(deck) will give you the number of cards currently in the deck.

    Attributes:
      initial_cards (list): The initial sequence of cards that the
        deck was created with.  The deck may be reset to this initial
        state.
      cards (list): The current sequence of cards in the deck. For
Esempio n. 30
0
 def testInvalidRankThrowsException(self):
     with self.assertRaises(ValueError):
         card.Card('bogus', 'diamonds')
     with self.assertRaises(ValueError):
         card.Card(11, 'clubs')