diff --git a/cppython/project.py b/cppython/project.py index ced9257..1f2af26 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -76,6 +76,16 @@ def generate_model(self, plugins: list[Type[Plugin]]) -> Type[PyProject]: __base__=PyProject, ) + def create_generators(self, plugins: list[Type[Generator]], pyproject: PyProject) -> list[Generator]: + """ + TODO + """ + _generators = [] + for plugin_type in plugins: + _generators.append(plugin_type(pyproject)) + + return _generators + class Project(API): """ @@ -116,10 +126,7 @@ def __init__( self.enabled = True self._interface = interface - - self._generators = [] - for plugin_type in plugins: - self._generators.append(plugin_type(pyproject)) + self._generators = builder.create_generators(plugins, pyproject) if self.configuration.verbose: interface.print("CPPython project initialized") diff --git a/pdm.lock b/pdm.lock index 3ba589a..0c31f8e 100644 --- a/pdm.lock +++ b/pdm.lock @@ -247,7 +247,7 @@ summary = "Module for decorators, wrappers and monkey patching." [metadata] lock_version = "3.1" -content_hash = "sha256:99e233e2e11b01fc8a5d15b1b222bb34f6082fa365d91a4eab0ad94bd4792b1a" +content_hash = "sha256:f53b6399862b1bc49a0ad0dc5017dfeb3c9348259b7b5fbabf9c7053678c9224" [metadata.files] "astroid 2.11.2" = [ diff --git a/tests/unit/test_project.py b/tests/unit/test_project.py index 06b4c0b..81d8e0f 100644 --- a/tests/unit/test_project.py +++ b/tests/unit/test_project.py @@ -2,7 +2,7 @@ Test the functions related to the internal interface implementation and the 'Interface' interface itself """ -from cppython_core.schema import Generator +from cppython_core.schema import Generator, GeneratorData, PyProject from pytest_mock import MockerFixture from cppython.data import default_pyproject @@ -40,7 +40,7 @@ def test_plugin_gather(self): assert len(plugins) == 0 - def test_generator_data_construction(self): + def test_generator_data_construction(self, mocker: MockerFixture): """ TODO """ @@ -48,3 +48,30 @@ def test_generator_data_construction(self): configuration = ProjectConfiguration() builder = ProjectBuilder(configuration) Model = builder.generate_model([]) + + assert Model.__base__ == PyProject + + generator = mocker.Mock(spec=Generator) + generator_data = mocker.Mock(spec=GeneratorData) + + generator.name.return_value = "mock" + generator.data_type.return_value = type(generator_data) + Model = builder.generate_model([generator]) + + assert Model.__base__ == PyProject + + def test_generator_creation(self, mocker: MockerFixture): + """ + TODO + """ + + configuration = ProjectConfiguration() + builder = ProjectBuilder(configuration) + generators = builder.create_generators([], default_pyproject) + + assert not generators + + generator = mocker.Mock(spec=Generator) + generators = builder.create_generators([generator], default_pyproject) + + assert len(generators) == 1