class TestTournamentSelector(TestSelectorCommon):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.tournament_size = 3

        tournament_selector_configuration = EvolutionTournamentSelectorConfiguration()
        self.configuration.selectors.append(tournament_selector_configuration)
        tournament_selector_configuration.tournament_size = self.tournament_size

        self.sut = TournamentSelector()

    def test_tournament_selection_should_work(self):
        # Given:
        self.rule_population_mock.get_random_rules.return_value = [
            self.expected_rule, self.rule_2, self.rule_3]

        # When:
        selected_rule = self.sut.select(
            self.service_mock, self.grammar_statistics_mock, self.rule_population_mock)

        # Then:
        assert_that(selected_rule, is_(equal_to(self.expected_rule)))
        self.rule_population_mock.get_random_rules.assert_called_once_with(
            self.randomizer_mock, False, self.tournament_size)
        self.fitness_mock.get_keyfunc_getter.assert_called_once_with(self.grammar_statistics_mock)
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.tournament_size = 3

        tournament_selector_configuration = EvolutionTournamentSelectorConfiguration()
        self.configuration.selectors.append(tournament_selector_configuration)
        tournament_selector_configuration.tournament_size = self.tournament_size

        self.sut = TournamentSelector()