Example #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)
Example #2
0
 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)
Example #3
0
 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]))
Example #4
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)
Example #5
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)
Example #6
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)
Example #7
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)
Example #8
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)
Example #9
0
 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)
Example #10
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)
Example #11
0
 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)
Example #12
0
 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)
Example #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)
Example #14
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))
Example #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)
Example #16
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)
Example #17
0
 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()
Example #18
0
 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))
Example #19
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)
Example #20
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)
Example #21
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])
Example #22
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)
Example #23
0
 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)
Example #24
0
 def testNextToActShouldBeFirstSeatedPlayer(self):
     game = tienlen.game.Game(players=[None, None, mock.Mock(), mock.Mock()])
     game.start()
     self.assertEqual(2, game.next_to_act_seat)