def test_init_board_2_player(self):
        """
        Test basic properties about initializing a game with 2 logical players
        """
        ref = Referee()
        players = [(BasicPlayer(), 1), (BasicPlayer(), 2)]
        ref._init_board(3, 3, players)

        # Test the amount of players, order according to default order and turn and phase
        self.assertEqual(4, ref.amount_penguins_per_player)
        self.assertEqual([PlayerColor.RED, PlayerColor.WHITE], list(ref.players.keys()))
        self.assertEqual(PlayerColor.RED, ref.current_game_state.get_current_turn())
        self.assertEqual(GamePhase.PLACE_PENGUINS, ref.current_game_state.get_game_phase())
        self.assertEqual([PlayerColor.RED, PlayerColor.WHITE], ref.current_game_state.get_player_order())
    def test_kick_player_place_penguins(self):
        """
        Test kicking a player in the place_penguins state
        """
        ref = Referee()
        players = [(BasicPlayer(), 1), (BasicPlayer(), 2), (BasicPlayer(), 3), (BasicPlayer(), 4)]
        ref._init_board(5, 5, players)
        ref._add_kicked_player(PlayerColor.RED, GamePhase.PLACE_PENGUINS, cheating=True)

        # Test kicking a player functionality works well
        self.assertEqual({KickedPlayerType.CHEATING: [PlayerColor.RED], KickedPlayerType.FAILING: []}, ref.kicked_players)
        self.assertEqual({KickedPlayerType.CHEATING: [PlayerColor.RED], KickedPlayerType.FAILING: []}, ref.kicked_players)
        self.assertFalse(PlayerColor.RED in ref.current_game_state.get_player_order())
        self.assertFalse(PlayerColor.RED in ref.players.keys())
 def set_up_game_phases(self, rows, columns, num_players=2, run_placement_phase=False, bad_player_obj=None):
     """
     Purpose: Set up basic game phases for use in testing movement and placement phases
     Signature: Int Int Int Bool PlayerInterface -> Referee
     """
     ref = Referee()
     players = []
     for i in range(num_players):
         if bad_player_obj and i == 0:
             append_obj = bad_player_obj, i + 1
         else:
             append_obj = BasicPlayer(), i + 1
         players.append(append_obj)
     ref._init_board(rows, columns, players)
     if run_placement_phase:
         ref._run_placement_phase()
     return ref