def test_init_single_factory(self):
        """
        Test that action factory can be initialised with single sub factory
        """
        mock_model = mock(Model)
        mock_attack_factory = mock(AttackFactory)

        factory = ActionFactory(mock_model,
                                mock_attack_factory)

        factories = factory.get_sub_factories()
        assert_that(mock_attack_factory, is_in(factories))
    def test_init_factory_list(self):
        """
        Test that action factory can be initialised with list of factories
        """
        mock_model = mock(Model)
        mock_move_factory = mock(MoveFactory)
        mock_attack_factory = mock(AttackFactory)

        factory = ActionFactory(mock_model,
                                [mock_attack_factory,
                                    mock_move_factory])
        factories = factory.get_sub_factories()

        assert_that(mock_attack_factory, is_in(factories))
        assert_that(mock_move_factory, is_in(factories))
    def test_get_factory_by_type(self):
        """
        Test that factory can be found by using Parameters object
        """
        mock_model = mock(Model)
        mock_move_factory = mock(MoveFactory)
        mock_attack_factory = mock(AttackFactory)

        when(mock_attack_factory).can_handle(any()).thenReturn(True)
        when(mock_move_factory).can_handle(any()).thenReturn(False)

        factory = ActionFactory(mock_model,
                                [mock_attack_factory,
                                mock_move_factory])

        mock_parameters = mock(AttackParameters)

        sub_factory = factory.get_sub_factory(mock_parameters)

        assert_that(sub_factory, is_(same_instance(mock_attack_factory)))
Exemple #4
0
    def initialise_factories(self, context):
        """
        Initialises action factory, sub factories and various generators
        """
        effect_config = {}
        configurators = self.get_configurators(context.config_package,
                                               'init_effects')

        for configurator in configurators:
            effects = configurator(context)
            for effect in effects:
                effect_config[effect[0]] = effect[1]

        effect_factory = get_effect_creator(effect_config)

        pyherc.vtable["\ufdd0:create-effect"] = effect_factory

        drink_factory = DrinkFactory(effect_factory)

        inventory_factory = InventoryFactory(
            [PickUpFactory(),
             DropFactory(),
             EquipFactory(),
             UnEquipFactory()])

        spell_factory = SpellGenerator()

        spell_casting_factory = SpellCastingFactory(spell_factory,
                                                    effect_factory)

        mitosis_factory = MitosisFactory(self.creature_generator, self.rng, 60)

        metamorphosis_factory = MetamorphosisFactory(self.creature_generator,
                                                     self.rng)

        dig_factory = DigFactory(self.rng)

        trapping_factory = TrappingFactory(self.trap_generator)

        self.action_factory = ActionFactory(self.model, [
            drink_factory, inventory_factory, spell_casting_factory,
            mitosis_factory, metamorphosis_factory, dig_factory,
            trapping_factory
        ])

        set_action_factory(self.action_factory)

        self.rules_engine = RulesEngine(self.action_factory)
Exemple #5
0
    def build(self):
        """
        Build action factory

        :returns: action factory
        :rtype: ActionFactory
        """
        if self.use_real_drink_factory:
            self.factories.append((DrinkFactoryBuilder().with_effect_factory(
                self.effect_factory).build()))

        if self.use_real_inventory_factory:
            self.factories.append(
                InventoryFactory([
                    PickUpFactory(),
                    DropFactory(),
                    EquipFactory(),
                    UnEquipFactory()
                ]))

        if self.use_real_spellcasting_factory:
            self.factories.append(SpellCastingFactoryBuilder().build())

        if self.use_real_gain_domain_factory:
            self.factories.append(GainDomainFactoryBuilder().build())

        if self.use_real_mitosis_factory:
            self.factories.append(MitosisFactoryBuilder().build())

        if self.use_real_metamorphosis_factory:
            self.factories.append(MetamorphosisFactoryBuilder().build())

        if self.use_real_dig_factory:
            self.factories.append(DigFactoryBuilder().build())

        if self.use_real_trapping_factory:
            self.factories.append(TrappingFactoryBuilder().build())

        action_factory = ActionFactory(self.model, self.factories)
        return action_factory