def test_no_players_left_in_game_movement(self):
     """
     Tests running a game with no players left in the game and that it exits out of the game in movement phase
     """
     players = [(RefTests.bad_player_invalid_move, 1), (RefTests.bad_player_invalid_move, 2)]
     ref = Referee()
     ref.initialize_and_run_game(3, 3, players)
     self.assertEqual(GamePhase.END_GAME, ref.current_game_state.get_game_phase())
     self.assertEqual([], ref.winners)
     self.assertListEqual([PlayerColor.RED, PlayerColor.WHITE], ref.kicked_players[KickedPlayerType.CHEATING])
 def test_run_larger_game(self):
     """
     Tests running a larger more non-trivial game
     """
     players = [(BasicPlayer(), 1), (BasicPlayer(), 2)]
     ref = Referee()
     ref.initialize_and_run_game(7, 4, players)
     self.assertEqual(GamePhase.END_GAME, ref.current_game_state.get_game_phase())
     self.assertTrue(PlayerColor.RED in ref.winners or PlayerColor.WHITE in ref.winners)
     self.assertGreater(ref.current_game_state.get_fish_for_player(PlayerColor.RED), 0)
     self.assertGreater(ref.current_game_state.get_fish_for_player(PlayerColor.WHITE), 0)
 def test_run_whole_basic_game_multiple_winners(self):
     """
     Test running a whole game and getting 2 winners
     """
     players = [(BasicPlayer(), 1), (BasicPlayer(), 2), (BasicPlayer(), 3)]
     ref = Referee()
     ref.initialize_and_run_game(3, 3, players)
     self.assertEqual(GamePhase.END_GAME, ref.current_game_state.get_game_phase())
     self.assertEqual([PlayerColor.RED, PlayerColor.WHITE, PlayerColor.BROWN], ref.winners)
     self.assertEqual([], ref.kicked_players[KickedPlayerType.FAILING])
     self.assertEqual([], ref.kicked_players[KickedPlayerType.CHEATING])
 def test_single_player_left_game(self):
     """
     Tests running a game when only a single player left
     """
     players = [(BasicPlayer(), 1), (RefTests.bad_player_invalid_placement, 2)]
     ref = Referee()
     ref.initialize_and_run_game(3, 3, players)
     self.assertEqual(GamePhase.END_GAME, ref.current_game_state.get_game_phase())
     self.assertEqual([PlayerColor.RED], ref.winners)
     self.assertGreater(ref.current_game_state.get_fish_for_player(PlayerColor.RED), 0)
     self.assertEqual([PlayerColor.WHITE], ref.kicked_players[KickedPlayerType.CHEATING])
 def test_run_whole_basic_game(self):
     """
     Test running a whole game and getting a winner
     """
     players = [(BasicPlayer(), 1), (BasicPlayer(), 2)]
     ref = Referee()
     ref.initialize_and_run_game(3, 3, players)
     # In this 3x3 board only one player can move so RED will always win
     self.assertEqual(GamePhase.END_GAME, ref.current_game_state.get_game_phase())
     self.assertEqual([PlayerColor.RED], ref.winners)
     self.assertEqual([], ref.kicked_players[KickedPlayerType.FAILING])
     self.assertEqual([], ref.kicked_players[KickedPlayerType.CHEATING])