| import os |
| import pytest |
| from buildstream import _yaml |
| from buildstream._exceptions import ErrorDomain, LoadErrorReason |
| from tests.testutils.runcli import cli |
| |
| # Project directory |
| DATA_DIR = os.path.dirname(os.path.realpath(__file__)) |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("target,option,value,expected", [ |
| # Test (var == [ "foo" ]) syntax |
| ('element.bst', 'farm', 'pony', 'a pony'), |
| ('element.bst', 'farm', 'zebry', 'a zebry'), |
| ('element.bst', 'farm', 'pony, horsy', 'a pony and a horsy'), |
| ('element.bst', 'farm', 'zebry,horsy , pony', 'all the animals'), |
| |
| # Test ("literal" in var) syntax |
| ('element-in.bst', 'farm', 'zebry, horsy, pony', 'a zebry'), |
| |
| # Test ("literal" not in var) syntax |
| ('element-in.bst', 'farm', 'zebry, horsy', 'no pony'), |
| |
| # Test (var1 not in var2) syntax (where var1 is enum and var2 is flags) |
| ('element-in.bst', 'farm', 'zebry, pony', 'no horsy'), |
| ]) |
| def test_conditional_cli(cli, datafiles, target, option, value, expected): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-flags') |
| result = cli.run(project=project, silent=True, args=[ |
| '--option', option, value, |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| target]) |
| |
| result.assert_success() |
| loaded = _yaml.load_data(result.output) |
| assert loaded['result'] == expected |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("target,option,value,expected", [ |
| # Test 'var == [ "foo" ]' syntax |
| ('element.bst', 'farm', ['pony'], 'a pony'), |
| ('element.bst', 'farm', ['zebry'], 'a zebry'), |
| ('element.bst', 'farm', ['pony', 'horsy'], 'a pony and a horsy'), |
| ('element.bst', 'farm', ['zebry', 'horsy', 'pony'], 'all the animals'), |
| ]) |
| def test_conditional_config(cli, datafiles, target, option, value, expected): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-flags') |
| cli.configure({ |
| 'projects': { |
| 'test': { |
| 'options': { |
| option: value |
| } |
| } |
| } |
| }) |
| result = cli.run(project=project, silent=True, args=[ |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| target]) |
| |
| result.assert_success() |
| loaded = _yaml.load_data(result.output) |
| assert loaded['result'] == expected |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("cli_option", [ |
| ('giraffy'), # Not a valid animal for the farm option |
| ('horsy pony') # Does not include comma separators |
| ]) |
| def test_invalid_value_cli(cli, datafiles, cli_option): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-flags') |
| result = cli.run(project=project, silent=True, args=[ |
| '--option', 'farm', cli_option, |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| 'element.bst']) |
| result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA) |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("config_option", [ |
| ('pony'), # Not specified as a list |
| (['horsy', 'pony', 'giraffy']), # Invalid giraffy animal for farm option |
| ({'dic': 'tionary'}) # Dicts also dont make sense in the config for flags |
| ]) |
| def test_invalid_value_config(cli, datafiles, config_option): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-flags') |
| cli.configure({ |
| 'projects': { |
| 'test': { |
| 'options': { |
| 'farm': config_option |
| } |
| } |
| } |
| }) |
| result = cli.run(project=project, silent=True, args=[ |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| 'element.bst']) |
| result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA) |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| def test_missing_values(cli, datafiles): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-flags-missing') |
| result = cli.run(project=project, silent=True, args=[ |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| 'element.bst']) |
| result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA) |