| import os |
| import pytest |
| from buildstream import _yaml |
| from buildstream._exceptions import ErrorDomain, LoadErrorReason |
| from buildstream.plugintestutils.runcli import cli |
| |
| # Project directory |
| DATA_DIR = os.path.dirname(os.path.realpath(__file__)) |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("target,option,expected", [ |
| # Test 'foo' syntax, and valid values of 'True' / 'False' |
| ('element.bst', 'True', 'a pony'), |
| ('element.bst', 'true', 'a pony'), |
| ('element.bst', 'False', 'not pony'), |
| ('element.bst', 'false', 'not pony'), |
| |
| # Test 'not foo' syntax |
| ('element-not.bst', 'False', 'not pony'), |
| ('element-not.bst', 'True', 'a pony'), |
| |
| # Test 'foo == True' syntax |
| ('element-equals.bst', 'False', 'not pony'), |
| ('element-equals.bst', 'True', 'a pony'), |
| |
| # Test 'foo != True' syntax |
| ('element-not-equals.bst', 'False', 'not pony'), |
| ('element-not-equals.bst', 'True', 'a pony'), |
| ]) |
| def test_conditional_cli(cli, datafiles, target, option, expected): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-bool') |
| result = cli.run(project=project, silent=True, args=[ |
| '--option', 'pony', option, |
| 'show', |
| '--deps', 'none', |
| '--format', '%{vars}', |
| target]) |
| result.assert_success() |
| |
| loaded = _yaml.load_data(result.output) |
| assert loaded['thepony'] == expected |
| |
| |
| # Test configuration of boolean option in the config file |
| # |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("target,option,expected", [ |
| ('element.bst', True, 'a pony'), |
| ('element.bst', False, 'not pony'), |
| ]) |
| def test_conditional_config(cli, datafiles, target, option, expected): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-bool') |
| cli.configure({ |
| 'projects': { |
| 'test': { |
| 'options': { |
| 'pony': option |
| } |
| } |
| } |
| }) |
| 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['thepony'] == expected |
| |
| |
| @pytest.mark.datafiles(DATA_DIR) |
| @pytest.mark.parametrize("cli_option", [ |
| ('falsey'), ('pony'), ('trUE') |
| ]) |
| def test_invalid_value_cli(cli, datafiles, cli_option): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-bool') |
| result = cli.run(project=project, silent=True, args=[ |
| '--option', 'pony', 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'), (['its', 'a', 'list']), ({'dic': 'tionary'}) |
| ]) |
| def test_invalid_value_config(cli, datafiles, config_option): |
| project = os.path.join(datafiles.dirname, datafiles.basename, 'option-bool') |
| cli.configure({ |
| 'projects': { |
| 'test': { |
| 'options': { |
| 'pony': 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) |