def testNextToActShouldIncrementAfterValidAction(self): player1 = mock.MagicMock() player2 = mock.MagicMock() player3 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2, None, player3]) game.start() self.assertEqual(0, game.next_to_act_seat) self.assertEqual(0, game.in_control_seat) result = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertEqual(1, game.next_to_act_seat) self.assertEqual(0, game.in_control_seat) self.assertEqual(1, result.next_to_act_seat) self.assertEqual(0, result.in_control_seat) result = game.try_action(seat=1, cards=[player2.on_cards.call_args[0][0][7]]) self.assertEqual(3, game.next_to_act_seat) self.assertEqual(1, game.in_control_seat) self.assertEqual(3, result.next_to_act_seat) self.assertEqual(1, result.in_control_seat) result = game.try_action(seat=3, cards=[player3.on_cards.call_args[0][0][12]]) self.assertEqual(0, game.next_to_act_seat) self.assertEqual(3, game.in_control_seat) self.assertEqual(0, result.next_to_act_seat) self.assertEqual(3, result.in_control_seat)
def testStartPlayersShouldBeDealtAtStartTime(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() self.assertEqual(1, player1.on_cards.call_count) self.assertEqual(1, player2.on_cards.call_count)
def testCardDealingShouldHandleEmptySeats(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() self.assertEqual(13, len(player1.on_cards.call_args[0][0])) self.assertEqual(13, len(player2.on_cards.call_args[0][0]))
def testPlayersShouldHaveThirteenCardsAtStartup(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() cardcount = len(player1.on_cards.call_args[0][0]) self.assertEqual(13, cardcount)
def testActionShouldBeInvalidifCardsNotInPlayersHand(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() result = game.try_action(seat=0, cards=[player2.on_cards.call_args[0][0][0]]) self.assertFalse(result.valid)
def testSecondSeatInNewGameShouldNotBeFirstToAct(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() result = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertTrue(result.valid)
def testTryActionShouldContainMessage(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() result = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertTrue(result.message != None)
def testInRoundShouldNotEliminatePlayerWhenEverybodyIsQualified(self): plist = [mock.MagicMock(), mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() game.try_action(seat=0, cards=[]) self.assertTrue(0 in game.seats_in_round)
def testTryActionNotPlayersTurnShouldReturnFalse(self): plist = [mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() result = game.try_action(seat=1, cards=[plist[1].on_cards.call_args[0][0][0]]) self.assertFalse(result.valid)
def testActionShouldBeInvalidIfCardsDontMakeHand(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() thecards = [player2.on_cards.call_args[0][0][0], player2.on_cards.call_args[0][0][8]] result = game.try_action(seat=0, cards=thecards) self.assertFalse(result.valid)
def testShouldEmitEventsOnGameStart(self): observer = mock.Mock() plist = [mock.Mock(), mock.Mock()] game = tienlen.game.Game(players=plist) game.subscribe(observer) game.start() methods = [e[0][0] for e in observer.call_args_list] self.assertTrue('cards_dealt' in methods) self.assertTrue('game_started' in methods)
def testInRoundShouldBeAllPlayersInRoundAtStartup(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[None, player1, player2]) game.start() self.assertTrue(0 not in game.seats_in_round) self.assertTrue(1 in game.seats_in_round) self.assertTrue(2 in game.seats_in_round) self.assertTrue(3 not in game.seats_in_round)
def testFirstSeatInNewGameShouldBeFirstToAct(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() result = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertEqual(1, result.next_to_act_seat) self.assertEqual(0, result.in_control_seat)
def testAfterEveryPassOriginalPlayerShoudlBeInControL(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) game.try_action(seat=1, cards=[]) self.assertEqual(0, game.next_to_act_seat) self.assertEqual(0, game.in_control_seat) self.assertEqual(0, len(game.common_cards))
def testInRoundShouldSkipIntermediatePlayerWhenNewRoundIsProcessed(self): plist = [mock.MagicMock(), None, mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() game.try_action(seat=0, cards=[]) game.try_action(seat=2, cards=[plist[2].on_cards.call_args[0][0][0]]) game.try_action(seat=3, cards=[]) self.assertTrue(3 not in game.seats_in_round)
def testAfterEveryActionCommonCardsShouldUpdate(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertEqual([player1.on_cards.call_args[0][0][0]], game.common_cards) game.try_action(seat=1, cards=[player2.on_cards.call_args[0][0][12]]) self.assertEqual([player2.on_cards.call_args[0][0][12]], game.common_cards)
def testPlayersCardsShouldBeSorted(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() cards = player1.on_cards.call_args[0][0] for i in range(1, len(cards) - 1): carda = cards[i] cardb = cards[i-1] if carda <= cardb: self.fail()
def testPlayersShouldAllHaveUniqueCards(self): plist = [mock.MagicMock(), mock.MagicMock(), mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() all_cards = [] for player in plist: for card in player.on_cards.call_args[0][0]: if card not in all_cards: all_cards.append(card) self.assertEqual(52, len(all_cards))
def testPlayerNoCardsShouldsShouldPassPlayersTurn(self): plist = [mock.MagicMock(), mock.MagicMock(), None, mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() self.assertEqual(0, game.next_to_act_seat) game.try_action(seat=0, cards=[plist[0].on_cards.call_args[0][0][0]]) self.assertEqual(1, game.next_to_act_seat) self.assertEqual(0, game.in_control_seat) game.try_action(seat=1, cards=[]) self.assertEqual(3, game.next_to_act_seat) self.assertEqual(0, game.in_control_seat)
def testResultOfTryActionShouldContainNextToActProperties(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() result1 = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertEqual(1, result1.next_to_act_seat) self.assertEqual(0, result1.in_control_seat) result2 = game.try_action(seat=1, cards=[player2.on_cards.call_args[0][0][6]]) self.assertEqual(0, result2.next_to_act_seat) self.assertEqual(1, result2.in_control_seat) result3 = game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][11]]) self.assertEqual(1, result3.next_to_act_seat) self.assertEqual(0, result3.in_control_seat)
def testAfterEveryActionCardsShouldBeRemovedFromPlayer(self): player1 = mock.MagicMock() player2 = mock.MagicMock() game = tienlen.game.Game(players=[player1, player2]) game.start() game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][0]]) self.assertEqual(12, len(game.player_cards[0])) self.assertFalse( player1.on_cards.call_args[0][0][0] in game.player_cards[0]) game.try_action(seat=1, cards=[player2.on_cards.call_args[0][0][7]]) self.assertEqual(12, len(game.player_cards[1])) self.assertFalse( player2.on_cards.call_args[0][0][7] in game.player_cards[1]) self.assertEqual(0, game.next_to_act_seat) game.try_action(seat=0, cards=[player1.on_cards.call_args[0][0][11]]) self.assertEqual(11, len(game.player_cards[0])) self.assertFalse( player1.on_cards.call_args[0][0][11] in game.player_cards[0])
def testInRoundShouldRemovePlayerThatPassed(self): plist = [mock.MagicMock(), mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() # P1 plays game.try_action(seat=0, cards=[plist[0].on_cards.call_args[0][0][0]]) self.assertTrue(0 in game.seats_in_round) self.assertTrue(1 in game.seats_in_round) self.assertTrue(2 in game.seats_in_round) # P2 passes game.try_action(seat=1, cards=[]) self.assertTrue(0 in game.seats_in_round) self.assertTrue(1 not in game.seats_in_round) self.assertTrue(2 in game.seats_in_round) # P3 plays game.try_action(seat=2, cards=[plist[2].on_cards.call_args[0][0][5]]) self.assertTrue(0 in game.seats_in_round) self.assertTrue(1 not in game.seats_in_round) self.assertTrue(2 in game.seats_in_round) # P1 plays (should stkip player #1 and go to player #2) game.try_action(seat=0, cards=[plist[0].on_cards.call_args[0][0][9]]) self.assertTrue(0 in game.seats_in_round) self.assertTrue(1 not in game.seats_in_round) self.assertTrue(2 in game.seats_in_round) # P3 plays (round should be reset) game.try_action(seat=2, cards=[]) self.assertTrue(0 in game.seats_in_round) self.assertTrue(1 in game.seats_in_round) self.assertTrue(2 in game.seats_in_round)
def testStartGameShouldSetProperties(self): plist = [mock.Mock(), mock.Mock()] game = tienlen.game.Game(players=plist) game.start() self.assertEqual(True, game.started) self.assertEqual(False, game.completed)
def testNextToActShouldBeFirstSeatedPlayer(self): game = tienlen.game.Game(players=[None, None, mock.Mock(), mock.Mock()]) game.start() self.assertEqual(2, game.next_to_act_seat)