class testI_PlayerGoesAllIn(unittest.TestCase): def setUp(self): print 'A player goes all in,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = self.inter.players[0] self.p2 = self.inter.players[1] self.p1.chips = 100 self.p2.chips = 50 for player in self.inter.players: player.cards(['any cards']) self.msngr.bet('p1', 60).bet('p2', 50) self.tb = TakesBets(self.inter) self.tb.start() def testA_theyCanBetLessThanMinimum(self): '''they can be less than minimum''' self.assertFalse(('p2', 'OUT FOLD') in self.msngr.sentMessages)
class testD_WhenDownToOnePlayer(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'When down to one player,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.ph = PlaysHand(inter) self._done = False self.ph.evt_done += self.onDone def testA_announceThatItIsDone(self): '''announce that it is done''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() self.assertTrue(self._done) def testB_noMoreCardsAreDealt(self): '''no more cards are dealt''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() privateCards = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(privateCards, self.msngr.cardMessages)
class testG_PlayerPlacesBetOutOfTurn(unittest.TestCase): def setUp(self): print 'a player places a bet out of turn,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.msngr.bet('p2', 1000) self.tb = TakesBets(self.inter) self.tb.start() def testA_theBetShouldBeIgnored(self): '''the bet should be ignored''' self.assertFalse('BET p2 1000' in self.msngr.allMessages) def testB_thePlayerIsKickedOut(self): '''the player is kicked out''' self.assertFalse(self.inter.players[1].isPlaying()) def testC_takeThePlayersChips(self): '''take the players chips''' self.assertEqual(self.inter.players[1].chips, 0) def testD_kickOutThePlayer(self): '''kick out the player''' self.assertTrue(('p2', 'OUT OUT_OF_TURN') in self.msngr.allMessages)
class testA_StartingTheTournament(unittest.TestCase): def setUp(self): print 'Starting the tournament,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) self.msngr.join('p1') self.msngr.join('p2') pt.start() def testA_thePlayersAreAnnounced(self): '''the players are announced''' self.assertEqual(self.msngr.dealingMessages, ['DEALING p1 p2']) def testB_cardsAreDealt(self): '''the cards are dealt''' privateCards = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(privateCards, self.msngr.cardMessages) def testC_betsAreBeingTaken(self): '''bets are being taken''' self.assertEqual(('p1', 'GO'), self.msngr.lastMessage)
class testE_PlayerFolding(unittest.TestCase): def setUp(self): print 'A player folding,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.msngr.bet('p1', 2).bet('p2', 0) self.tb = TakesBets(self.inter) self.tb.start() def testA_playerIsToldTheyAreOut(self): '''the player is told that they are out''' self.assertTrue(('p2', 'OUT FOLD') in self.msngr.sentMessages) def testB_thePlayerIsNotPlaying(self): '''the player is not playing''' self.assertFalse(self.inter.players[1].isPlaying())
class testF_PlayerBetsMoreThanTheyHave(unittest.TestCase): def setUp(self): print 'Player bets more than they have,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.msngr.bet('p1', 2000) self.tb = TakesBets(self.inter) self.tb.start() def testA_kickThePlayerOut(self): '''kick the player out''' outMessage = 'OUT OVERDRAWN' self.assertTrue(('p1', outMessage) in self.msngr.sentMessages) def testB_playerIsOut(self): '''the player is out''' self.assertFalse(self.inter.players[0].isPlaying()) def testC_takePlayersChips(self): '''take the players chips''' self.assertEqual(self.inter.players[0].chips, 0)
class testC_FinishingTheTournament(unittest.TestCase): def setUp(self): description = 'Finishing the tournament,' print description, self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) pt._playsHand = FinishAfterFirstHand(inter) pt._playsHand.evt_done += pt._onHandDone self._done = False self.msngr.join('p1') self.msngr.join('p2') pt.evt_done += self._onTournamentFinished pt.start() def _onTournamentFinished(self, sender=None, args=None): self._done = True def testA_theWinnerIsAnnounced(self): '''the winner is announced''' self.assertTrue('WINNER' in self.msngr.broadcastMessages) def testB_signalsThatItIsFinished(self): '''signals that it is finished''' self.assertTrue(self._done) def testC_doesNotDealAnyMoreHands(self): '''does not deal any more hands''' self.assertTrue(self._done)
class testC_FinishingTheTournament(unittest.TestCase): def setUp(self): description = 'Finishing the tournament,' print description, self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) pt._playsHand = FinishAfterFirstHand(inter) pt._playsHand.evt_done += pt._onHandDone self._done = False self.msngr.join('p1') self.msngr.join('p2') pt.evt_done += self._onTournamentFinished pt.start() def _onTournamentFinished(self, sender=None, args=None): self._done = True def testA_theWinnerIsAnnounced(self): '''the winner is announced''' self.assertTrue('WINNER' in self.msngr.broadcastMessages) def testB_signalsThatItIsFinished(self): '''signals that it is finished''' self.assertTrue(self._done) def testC_doesNotDealAnyMoreHands(self): '''does not deal any more hands''' self.assertTrue(self._done)
class testD_WhenDownToOnePlayer(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'When down to one player,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.ph = PlaysHand(inter) self._done = False self.ph.evt_done += self.onDone def testA_announceThatItIsDone(self): '''announce that it is done''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() self.assertTrue(self._done) def testB_noMoreCardsAreDealt(self): '''no more cards are dealt''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() privateCards = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(privateCards, self.msngr.cardMessages)
class testH_PlayerSendsNonNumericMessage(unittest.TestCase): def setUp(self): print 'a player sends a non numeric message,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.msngr.bet('p1', 'XX') self.tb = TakesBets(self.inter) self.tb.start() def testA_theBetShouldBeIgnored(self): '''the bet should be ignored''' self.assertFalse('BET p1 XX' in self.msngr.allMessages) def testB_takeThePlayersCards(self): '''take the players cards''' self.assertFalse(self.inter.players[0].isPlaying()) def testC_takeThePlayersChips(self): '''take the players chips''' self.assertEqual(self.inter.players[0].chips, 0) def testD_kickOutThePlayer(self): '''kick out the player''' outMessage = 'OUT NOT_A_NUMBER' self.assertTrue(('p1', outMessage) in self.msngr.allMessages)
class testA_GivingWinnersTheirChips(unittest.TestCase): def setUp(self): print 'Giving winners their chips,', self.shortDescription() self.msngr = StubMessenger() self.interact = InteractsWithPlayers(self.msngr, chips=1000) self.distribute = DistributesWinnings(self.interact) self.msngr.join('winner') self.msngr.join('loser') self.winner = self.interact.players[0] self.loser = self.interact.players[1] def testA_withoutSidePotsTheTopRankedPlayerWinsAll(self): '''without side pots the top ranked player wins all''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1005) self.assertEqual(self.loser.chips, 995) def testB_theTopRankedPlayerCannotWinMoreThanAllowed(self): '''if a player is only in a side pot, that is all they can win''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(10) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1005) self.assertEqual(self.loser.chips, 995) def testC_splittingThePot(self): '''players will split the pot if they are ranked the same''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('14C,14D,4S,3H,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1000) self.assertEqual(self.loser.chips, 1000)
class testB_SamePlayerJoiningTwice(unittest.TestCase): def setUp(self): print 'Same player joining twice,', self.shortDescription() self.msngr = StubMessenger() self.interactsWithPlayers = InteractsWithPlayers(self.msngr) self.msngr.join('player') self.msngr.join('player') def testA_thePlayerIsOnlyRegisteredOnce(self): '''the player is only registered once''' self.assertEquals(1, len(self.interactsWithPlayers.players))
class testA_GivingWinnersTheirChips(unittest.TestCase): def setUp(self): print 'Giving winners their chips,', self.shortDescription() self.msngr = StubMessenger() self.interact = InteractsWithPlayers(self.msngr, chips=1000) self.distribute = DistributesWinnings(self.interact) self.msngr.join('winner') self.msngr.join('loser') self.winner = self.interact.players[0] self.loser = self.interact.players[1] def testA_withoutSidePotsTheTopRankedPlayerWinsAll(self): '''without side pots the top ranked player wins all''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1005) self.assertEqual(self.loser.chips, 995) def testB_theTopRankedPlayerCannotWinMoreThanAllowed(self): '''if a player is only in a side pot, that is all they can win''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(10) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1005) self.assertEqual(self.loser.chips, 995) def testC_splittingThePot(self): '''players will split the pot if they are ranked the same''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('14C,14D,4S,3H,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.winner.chips, 1000) self.assertEqual(self.loser.chips, 1000)
class testB_SamePlayerJoiningTwice(unittest.TestCase): def setUp(self): print 'Same player joining twice,', self.shortDescription() self.msngr = StubMessenger() self.interactsWithPlayers = InteractsWithPlayers(self.msngr) self.msngr.join('player') self.msngr.join('player') def testA_thePlayerIsOnlyRegisteredOnce(self): '''the player is only registered once''' self.assertEquals(1, len(self.interactsWithPlayers.players))
class testA_PlayerJoining(unittest.TestCase): def setUp(self): print 'Player joining,', self.shortDescription() self.msngr = StubMessenger() self.interactsWithPlayers = InteractsWithPlayers(self.msngr) self.msngr.join('player') self.player = self.interactsWithPlayers.players[0] def testA_thePlayerReceivesChips(self): '''the player receives chips''' self.assertEquals(1000, self.player.chips) def testB_anAcknowledgementIsSent(self): '''an acknowledgement is sent to the player''' self.assertEquals(('player', 'CHIPS 1000'), self.msngr.lastMessage)
class testB_AnnouncingTheWinners(unittest.TestCase): def setUp(self): print 'Announcing the winners,', self.shortDescription() self.msngr = StubMessenger() self.interact = InteractsWithPlayers(self.msngr, chips=1000) self.distribute = DistributesWinnings(self.interact) self.msngr.join('winner') self.msngr.join('loser') self.winner = self.interact.players[0] self.loser = self.interact.players[1] def testA_shouldAnnounceTheWinners(self): '''should announce the winners of the game''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.msngr.wonMessages, [ 'WON winner loser 5 14C,14D,4S,3H,2C pairHand', 'WON winner winner 5 14C,14D,4S,3H,2C pairHand', 'WON loser winner 0 13S,9D,5C,3D,2C highestCard', 'WON loser loser 0 13S,9D,5C,3D,2C highestCard' ]) def testB_shouldOnlyDistributeToPlayersInTheGame(self): '''should only distribute the winnings to players in the game''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.winner.cards([]) # only in game players have cards self.winner.bet(5) self.distribute.toPlayers() self.assertEqual(self.msngr.wonMessages, [ 'WON winner loser 0 14C,14D,4S,3H,2C pairHand', 'WON winner winner 5 14C,14D,4S,3H,2C pairHand' ])
class testB_TheNextRoundOfBetting(unittest.TestCase): def setUp(self): print 'The next round of betting,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.tb = TakesBets(self.inter) def testA_shouldStartWithTheLastToRaise(self): '''should start with the last to raise''' self.msngr.bet('p1', 0).bet('p2', 100).bet('p1', 100) self.tb.start() self.tb.next() self.assertEqual(('p2', 'GO'), self.msngr.lastMessage)
class testC_DealingTheRemainingCards(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing the remaining cards,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.msngr.join('p3') self.p1 = inter.players[0] self.p2 = inter.players[1] self.p3 = inter.players[2] self.txh = DealsTexasHoldEm(inter) def testA_allPlayersAreOutOfChips(self): '''when all players are out of chips''' self.p1.chips = 0 self.p2.chips = 0 self.p3.chips = 0 self.txh.start() allDealt = [('p1', 'CARD'), ('p2', 'CARD'), ('p3', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(allDealt, self.msngr.cardMessages) def testB_allBarOnePlayersAreOutOfChips(self): '''when all players bar one are out of chips''' self.p2.chips = 0 self.p3.chips = 0 self.txh.start() allDealt = [('p1', 'CARD'), ('p2', 'CARD'), ('p3', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(allDealt, self.msngr.cardMessages)
class testA_PlayerJoining(unittest.TestCase): def setUp(self): print 'Player joining,', self.shortDescription() self.msngr = StubMessenger() self.interactsWithPlayers = InteractsWithPlayers(self.msngr) self.msngr.join('player') self.player = self.interactsWithPlayers.players[0] def testA_thePlayerReceivesChips(self): '''the player receives chips''' self.assertEquals(1000, self.player.chips) def testB_anAcknowledgementIsSent(self): '''an acknowledgement is sent to the player''' self.assertEquals(('player', 'CHIPS 1000'), self.msngr.lastMessage)
class testB_AnnouncingTheWinners(unittest.TestCase): def setUp(self): print 'Announcing the winners,', self.shortDescription() self.msngr = StubMessenger() self.interact = InteractsWithPlayers(self.msngr, chips=1000) self.distribute = DistributesWinnings(self.interact) self.msngr.join('winner') self.msngr.join('loser') self.winner = self.interact.players[0] self.loser = self.interact.players[1] def testA_shouldAnnounceTheWinners(self): '''should announce the winners of the game''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.loser.cards(cards('13S,9D,5C,3D,2C')) self.winner.bet(5) self.loser.bet(5) self.distribute.toPlayers() self.assertEqual(self.msngr.wonMessages, ['WON winner loser 5 14C,14D,4S,3H,2C pairHand', 'WON winner winner 5 14C,14D,4S,3H,2C pairHand', 'WON loser winner 0 13S,9D,5C,3D,2C highestCard', 'WON loser loser 0 13S,9D,5C,3D,2C highestCard']) def testB_shouldOnlyDistributeToPlayersInTheGame(self): '''should only distribute the winnings to players in the game''' self.winner.cards(cards('14C,14D,4S,3H,2C')) self.winner.cards([]) # only in game players have cards self.winner.bet(5) self.distribute.toPlayers() self.assertEqual(self.msngr.wonMessages, ['WON winner loser 0 14C,14D,4S,3H,2C pairHand', 'WON winner winner 5 14C,14D,4S,3H,2C pairHand'])
class testD_WhenDownToOnePlayer(unittest.TestCase): def onBetsTaken(self, sender, args=None): self.betsTaken = True def setUp(self): print 'When down to one player,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.inter.players[0].cards(['any cards']) self.tb = TakesBets(self.inter) self.tb.evt_done += self.onBetsTaken self.betsTaken = False self.tb.start() def testA_allBetsAreTaken(self): '''all bets are taken''' self.assertTrue(self.betsTaken)
class testC_DealingTheRemainingCards(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing the remaining cards,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.msngr.join('p3') self.p1 = inter.players[0] self.p2 = inter.players[1] self.p3 = inter.players[2] self.txh = DealsTexasHoldEm(inter) def testA_allPlayersAreOutOfChips(self): '''when all players are out of chips''' self.p1.chips = 0 self.p2.chips = 0 self.p3.chips = 0 self.txh.start() allDealt = [('p1', 'CARD'), ('p2', 'CARD'), ('p3', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(allDealt, self.msngr.cardMessages) def testB_allBarOnePlayersAreOutOfChips(self): '''when all players bar one are out of chips''' self.p2.chips = 0 self.p3.chips = 0 self.txh.start() allDealt = [('p1', 'CARD'), ('p2', 'CARD'), ('p3', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(allDealt, self.msngr.cardMessages)
class testB_AfterHandIsPlayed(unittest.TestCase): def setUp(self): print 'After a hand is played,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) self.msngr.join('p1') self.msngr.join('p2') self.msngr.bet('p1', 100) self.msngr.bet('p2', 0) pt.start() def testA_rotateTheButtonAndStartTheNextHand(self): '''rotate the button and start the next hand''' twoGames = ['DEALING p1 p2', 'DEALING p2 p1'] self.assertEqual(self.msngr.dealingMessages, twoGames) def testB_cardsAreDealt(self): '''the cards are dealt''' privateCards = [('p2', 'CARD'), ('p1', 'CARD')] self.assertEndsWith(privateCards, self.msngr.cardMessages) def testC_betsAreBeingTaken(self): '''bets are being taken''' self.assertEqual(('p2', 'GO'), self.msngr.lastMessage) def assertEndsWith(self, lookFor, atEndOf): failMessage = 'Search items greater than search area' self.assertTrue(len(lookFor) <= len(atEndOf), failMessage) atEndOf = atEndOf[-len(lookFor):] self.assertEqual(lookFor, atEndOf)
class testB_WhenHandIsDone(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Rounds of cards and betting,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.ph = PlaysHand(inter) self.ph.evt_done += self._onDone self._done = False self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) def _onDone(self, sender, args): self._done = True def testA_announceThatItIsDone(self): '''announce that it is done''' self.ph.start() self.assertTrue(self._done) def testB_shouldDistributeTheWinnings(self): '''should say when all cards are dealt''' self.ph.start() self.assertTrue(len(self.msngr.wonMessages) > 0)
class testB_AfterHandIsPlayed(unittest.TestCase): def setUp(self): print 'After a hand is played,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) self.msngr.join('p1') self.msngr.join('p2') self.msngr.bet('p1', 100) self.msngr.bet('p2', 0) pt.start() def testA_rotateTheButtonAndStartTheNextHand(self): '''rotate the button and start the next hand''' twoGames = ['DEALING p1 p2', 'DEALING p2 p1'] self.assertEqual(self.msngr.dealingMessages, twoGames) def testB_cardsAreDealt(self): '''the cards are dealt''' privateCards = [('p2', 'CARD'), ('p1', 'CARD')] self.assertEndsWith(privateCards, self.msngr.cardMessages) def testC_betsAreBeingTaken(self): '''bets are being taken''' self.assertEqual(('p2', 'GO'), self.msngr.lastMessage) def assertEndsWith(self, lookFor, atEndOf): failMessage = 'Search items greater than search area' self.assertTrue(len(lookFor) <= len(atEndOf), failMessage) atEndOf = atEndOf[-len(lookFor):] self.assertEqual(lookFor, atEndOf)
class testB_WhenHandIsDone(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Rounds of cards and betting,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.ph = PlaysHand(inter) self.ph.evt_done += self._onDone self._done = False self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) self.msngr.bet('p1', 10).bet('p2', 10) def _onDone(self, sender, args): self._done = True def testA_announceThatItIsDone(self): '''announce that it is done''' self.ph.start() self.assertTrue(self._done) def testB_shouldDistributeTheWinnings(self): '''should say when all cards are dealt''' self.ph.start() self.assertTrue(len(self.msngr.wonMessages) > 0)
class testA_StartingTheTournament(unittest.TestCase): def setUp(self): print 'Starting the tournament,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) pt = PlaysTournament(inter) self.msngr.join('p1') self.msngr.join('p2') pt.start() def testA_thePlayersAreAnnounced(self): '''the players are announced''' self.assertEqual(self.msngr.dealingMessages, ['DEALING p1 p2']) def testB_cardsAreDealt(self): '''the cards are dealt''' privateCards = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(privateCards, self.msngr.cardMessages) def testC_betsAreBeingTaken(self): '''bets are being taken''' self.assertEqual(('p1', 'GO'), self.msngr.lastMessage)
class testA_TellingThePlayersToBet(unittest.TestCase): def setUp(self): print 'Telling the players to bet,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') for player in self.inter.players: player.cards(['any cards']) self.tb = TakesBets(self.inter) def testA_tellTheFirstPlayerToTakeTheirGo(self): '''tell the first player to take their go''' self.tb.start() self.assertEqual(('p1', 'GO'), self.msngr.lastMessage) def testB_tellTheSecondPlayerToTakeTheirGo(self): '''tell the second player to take their go''' self.msngr.bet('p1', 10) self.tb.start() self.assertEqual(('p2', 'GO'), self.msngr.lastMessage) def testC_backToFirstPlayerAfterTheLast(self): '''moves back to the first player after the last''' self.msngr.bet('p1', 10).bet('p2', 20) self.tb.start() self.assertEqual(('p1', 'GO'), self.msngr.lastMessage) def testD_skipsPlayerThatAreNotPlaying(self): '''skips player that are not playing''' self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.msngr.join('p3') self.inter.players[1].cards(['any cards']) self.inter.players[2].cards(['any cards']) self.tb = TakesBets(self.inter) self.tb.start() self.assertEqual(('p2', 'GO'), self.msngr.lastMessage)
class testA_DealingCardsForTexasHoldEm(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing cards for texas hold em,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.txh = DealsTexasHoldEm(inter) def testA_dealEachPlayerPrivateCardsFirst(self): '''should deal each player private cards first''' self.txh.start() self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) def testB_dealsTheFlopCardsNext(self): '''deals the flop cards next''' self.txh.start() self.txh.next() self.assertEqual(5, len(self.p1._cards)) self.assertEqual(5, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testC_dealsTheRiverCard(self): '''deals the river card''' self.txh.start() self.txh.next() self.txh.next() self.assertEqual(6, len(self.p1._cards)) self.assertEqual(6, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD', 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testD_dealsTheTurnCard(self): '''deals the turn card''' self.txh.start() self.txh.next() self.txh.next() self.txh.next() self.assertEqual(7, len(self.p1._cards)) self.assertEqual(7, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testE_noMoreCardsAfterThat(self): '''no more cards after that''' self.txh.start() self.txh.next() self.txh.next() self.txh.next() self.assertFalse(self.txh.more()) def testF_shouldUseFreshDeckForEveryGame(self): '''should use a fresh deck for every game''' self.txh.start() totalCards = 52 privateCardsForTwoPlayers = 4 cardsAfterStart = totalCards - privateCardsForTwoPlayers self.txh.start() self.assertEqual(cardsAfterStart, len(self.txh._deck._cards))
class testA_DealingCardsForTexasHoldEm(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing cards for texas hold em,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.txh = DealsTexasHoldEm(inter) def testA_dealEachPlayerPrivateCardsFirst(self): '''should deal each player private cards first''' self.txh.start() self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) def testB_dealsTheFlopCardsNext(self): '''deals the flop cards next''' self.txh.start() self.txh.next() self.assertEqual(5, len(self.p1._cards)) self.assertEqual(5, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testC_dealsTheRiverCard(self): '''deals the river card''' self.txh.start() self.txh.next() self.txh.next() self.assertEqual(6, len(self.p1._cards)) self.assertEqual(6, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD', 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testD_dealsTheTurnCard(self): '''deals the turn card''' self.txh.start() self.txh.next() self.txh.next() self.txh.next() self.assertEqual(7, len(self.p1._cards)) self.assertEqual(7, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD', 'CARD', 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) def testE_noMoreCardsAfterThat(self): '''no more cards after that''' self.txh.start() self.txh.next() self.txh.next() self.txh.next() self.assertFalse(self.txh.more()) def testF_shouldUseFreshDeckForEveryGame(self): '''should use a fresh deck for every game''' self.txh.start() totalCards = 52 privateCardsForTwoPlayers = 4 cardsAfterStart = totalCards - privateCardsForTwoPlayers self.txh.start() self.assertEqual(cardsAfterStart, len(self.txh._deck._cards))
class testA_DealingCardsAndTakingBets(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing cards and taking bets,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.ph = PlaysHand(inter) self._done = False self.ph.evt_done += self.onDone def testA_dealEachPlayerSomeCardsFirst(self): '''should deal each player some cards first''' self.ph.start() expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) def testB_startsBettingWithFirstPlayerAtTheTable(self): '''starts betting with the first player at the table''' self.ph.start() self.assertEqual(('p1', 'GO'), self.msngr.lastMessage) def testC_dealsTheMoreCardsAfterSomeBets(self): '''deals more cards after some bets''' self.msngr.bet('p1', 10).bet('p2', 10) self.ph.start() expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) self.assertEqual(5, len(self.p1._cards)) self.assertEqual(5, len(self.p2._cards)) def testD_continuesBettingWithTheLastToRaise(self): '''continues betting with the last to raise''' self.msngr.bet('p1', 0).bet('p2', 100).bet('p1', 100) self.ph.start() self.assertEqual(('p2', 'GO'), self.msngr.lastMessage) def testG_shouldTakeOldCardsFromPlayersBeforehand(self): '''should take old cards from players beforehand''' self.p1.cards([Card(1, 'H')]) self.p2.cards([Card(2, 'H')]) self.ph.start() self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) def testH_announceThatItIsDone(self): '''announce that it is done''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() self.assertTrue(self._done) def assertEndsWith(self, lookFor, atEndOf): failMessage = 'Search items greater than search area' self.assertTrue(len(lookFor) <= len(atEndOf), failMessage) atEndOf = atEndOf[-len(lookFor):] self.assertEqual(lookFor, atEndOf)
class testC_DecidingWhenAllBetsAreTaken(unittest.TestCase): def onBetsTaken(self, sender, args=None): self.betsTaken = True def setUp(self): print 'deciding when all bets are taken,', self.shortDescription() self.msngr = StubMessenger() self.inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = self.inter.players[0] self.p2 = self.inter.players[1] for player in self.inter.players: player.cards(['any cards']) self.tb = TakesBets(self.inter) self.tb.evt_done += self.onBetsTaken self.betsTaken = False def testA_takenIfBetIsCalledByAll(self): '''not if a player has raised''' self.msngr.bet('p1', 10).bet('p2', 10) self.tb.start() self.assertTrue(self.betsTaken) def testB_notIfPlayerHasRaised(self): '''not if a player has raised''' self.msngr.bet('p1', 10).bet('p2', 20) self.tb.start() self.assertFalse(self.betsTaken) def testC_doneIfRaiseIsCalled(self): '''done if raise is called by all others''' self.msngr.bet('p1', 10).bet('p2', 20).bet('p1', 10) self.tb.start() self.assertTrue(self.betsTaken) def testD_doneWhenNoPlayerHasChipsLeft(self): '''done when no player has chips left''' self.msngr.bet('p1', 1000).bet('p2', 1000) self.tb.start() self.assertTrue(self.betsTaken) def testE_doneWhenOnlyOnePlayerHasChipsLeft(self): '''done when only one player has chips left''' self.p2.chips = 500 self.msngr.bet('p1', 600).bet('p2', 500) self.tb.start() self.assertTrue(self.betsTaken) def testF_doneImmediatelyIfNoneOfThePlayersHasChips(self): '''done immediately of none of the players has chips''' for player in self.inter.players: player.chips = 0 self.tb.start() self.assertTrue(self.betsTaken) def testE_doneImmediatelyIfOnlyOneOfThePlayersHasChips(self): '''done immediately if onl one of the players has chips left''' self.p2.chips = 0 self.tb.start() self.assertTrue(self.betsTaken)
class testA_DealingCardsAndTakingBets(unittest.TestCase): def onDone(self, sender, args=None): self._done = True def setUp(self): print 'Dealing cards and taking bets,', self.shortDescription() self.msngr = StubMessenger() inter = InteractsWithPlayers(self.msngr) self.msngr.join('p1') self.msngr.join('p2') self.p1 = inter.players[0] self.p2 = inter.players[1] self.ph = PlaysHand(inter) self._done = False self.ph.evt_done += self.onDone def testA_dealEachPlayerSomeCardsFirst(self): '''should deal each player some cards first''' self.ph.start() expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) def testB_startsBettingWithFirstPlayerAtTheTable(self): '''starts betting with the first player at the table''' self.ph.start() self.assertEqual(('p1', 'GO'), self.msngr.lastMessage) def testC_dealsTheMoreCardsAfterSomeBets(self): '''deals more cards after some bets''' self.msngr.bet('p1', 10).bet('p2', 10) self.ph.start() expected = [('p1', 'CARD'), ('p2', 'CARD'), 'CARD'] self.assertEqual(expected, self.msngr.cardMessages) self.assertEqual(5, len(self.p1._cards)) self.assertEqual(5, len(self.p2._cards)) def testD_continuesBettingWithTheLastToRaise(self): '''continues betting with the last to raise''' self.msngr.bet('p1', 0).bet('p2', 100).bet('p1', 100) self.ph.start() self.assertEqual(('p2', 'GO'), self.msngr.lastMessage) def testG_shouldTakeOldCardsFromPlayersBeforehand(self): '''should take old cards from players beforehand''' self.p1.cards([Card(1, 'H')]) self.p2.cards([Card(2, 'H')]) self.ph.start() self.assertEqual(2, len(self.p1._cards)) self.assertEqual(2, len(self.p2._cards)) expected = [('p1', 'CARD'), ('p2', 'CARD')] self.assertEqual(expected, self.msngr.cardMessages) def testH_announceThatItIsDone(self): '''announce that it is done''' self.msngr.bet('p1', 10).bet('p2', 0) self.ph.start() self.assertTrue(self._done) def assertEndsWith(self, lookFor, atEndOf): failMessage = 'Search items greater than search area' self.assertTrue(len(lookFor) <= len(atEndOf), failMessage) atEndOf = atEndOf[-len(lookFor):] self.assertEqual(lookFor, atEndOf)