| import os |
| import pytest |
| |
| from pluginbase import PluginBase |
| from buildstream._elementfactory import ElementFactory |
| from buildstream._sourcefactory import SourceFactory |
| |
| from tests.testutils.setuptools import entry_fixture |
| |
| DATA_DIR = os.path.join( |
| os.path.dirname(os.path.realpath(__file__)), |
| 'third_party' |
| ) |
| |
| |
| # Simple fixture to create a PluginBase object that |
| # we use for loading plugins. |
| @pytest.fixture() |
| def plugin_fixture(): |
| return { |
| 'base': PluginBase(package='buildstream.plugins') |
| } |
| |
| |
| ################################################################## |
| # Tests # |
| ################################################################## |
| # Test that external element plugin loading works. |
| @pytest.mark.datafiles(os.path.join(DATA_DIR, 'third_party_element')) |
| def test_custom_pip_element(plugin_fixture, entry_fixture, datafiles): |
| origin_data = [{ |
| 'origin': 'local', |
| 'path': str(datafiles), |
| 'plugins': {'foop': 0} |
| }] |
| factory = ElementFactory(plugin_fixture['base'], origin_data) |
| assert(isinstance(factory, ElementFactory)) |
| |
| entry_fixture(datafiles, 'buildstream.plugins', 'third_party_element:foop') |
| |
| foo_type, _ = factory.lookup('foop') |
| assert(foo_type.__name__ == 'FooElement') |
| |
| |
| # Test that external source plugin loading works. |
| @pytest.mark.datafiles(os.path.join(DATA_DIR, 'third_party_source')) |
| def test_custom_pip_source(plugin_fixture, entry_fixture, datafiles): |
| origin_data = [{ |
| 'origin': 'local', |
| 'path': str(datafiles), |
| 'plugins': {'foop': 0} |
| }] |
| factory = SourceFactory(plugin_fixture['base'], origin_data) |
| assert(isinstance(factory, SourceFactory)) |
| |
| entry_fixture(datafiles, 'buildstream.plugins', 'third_party_source:foop') |
| |
| foo_type, _ = factory.lookup('foop') |
| assert(foo_type.__name__ == 'FooSource') |