from contextlib import contextmanager import os import pytest from buildstream._project import Project from buildstream._exceptions import LoadError from buildstream.exceptions import LoadErrorReason from buildstream._pipeline import Pipeline from tests.testutils import dummy_context DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "pluginloading",) @contextmanager def create_pipeline(tmpdir, basedir, target): with dummy_context() as context: context.deploydir = os.path.join(str(tmpdir), "deploy") context.casdir = os.path.join(str(tmpdir), "cas") project = Project(basedir, context) pipeline = Pipeline(context, project, None) (targets,) = pipeline.load([(target,)]) yield targets @pytest.mark.datafiles(os.path.join(DATA_DIR, "customsource")) def test_customsource(datafiles, tmpdir): basedir = str(datafiles) with create_pipeline(tmpdir, basedir, "simple.bst") as targets: assert targets[0].get_kind() == "autotools" @pytest.mark.datafiles(os.path.join(DATA_DIR, "customelement")) def test_customelement(datafiles, tmpdir): basedir = str(datafiles) with create_pipeline(tmpdir, basedir, "simple.bst") as targets: assert targets[0].get_kind() == "foo" @pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionsource")) def test_badversionsource(datafiles, tmpdir): basedir = str(datafiles) with pytest.raises(LoadError) as exc, create_pipeline(tmpdir, basedir, "simple.bst"): pass assert exc.value.reason == LoadErrorReason.UNSUPPORTED_PLUGIN @pytest.mark.datafiles(os.path.join(DATA_DIR, "badversionelement")) def test_badversionelement(datafiles, tmpdir): basedir = str(datafiles) with pytest.raises(LoadError) as exc, create_pipeline(tmpdir, basedir, "simple.bst"): pass assert exc.value.reason == LoadErrorReason.UNSUPPORTED_PLUGIN