예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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))
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
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)
예제 #15
0
 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)
예제 #16
0
 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])