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')