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 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 testTryActionAreNotBetterThanCommonTurnShouldReturnFalse(self): plist = [mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() game.try_action(seat=0, cards=[plist[0].on_cards.call_args[0][0][12]]) result = game.try_action(seat=1, cards=[plist[1].on_cards.call_args[0][0][0]]) self.assertFalse(result.valid)
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 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 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 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 testTryActionNotValidHandTurnShouldReturnFalse(self): plist = [mock.MagicMock(), mock.MagicMock()] game = tienlen.game.Game(players=plist) game.start() result = game.try_action(seat=0, cards=[plist[0].on_cards.call_args[0][0][0], plist[0].on_cards.call_args[0][0][8]]) 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 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 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 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 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])