From 5d6cad8f5f76be2e46c748f9eb770b84ec18f7e1 Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Fri, 6 Oct 2017 14:52:41 +0900 Subject: tests/format/optionenum.py: Added enum option specific test cases --- tests/format/option-enum-missing/element.bst | 1 + tests/format/option-enum-missing/project.conf | 7 ++ tests/format/option-enum/element-compare.bst | 6 ++ tests/format/option-enum/element.bst | 8 ++ tests/format/option-enum/project.conf | 19 ++++ tests/format/optionenum.py | 121 ++++++++++++++++++++++++++ 6 files changed, 162 insertions(+) create mode 100644 tests/format/option-enum-missing/element.bst create mode 100644 tests/format/option-enum-missing/project.conf create mode 100644 tests/format/option-enum/element-compare.bst create mode 100644 tests/format/option-enum/element.bst create mode 100644 tests/format/option-enum/project.conf create mode 100644 tests/format/optionenum.py diff --git a/tests/format/option-enum-missing/element.bst b/tests/format/option-enum-missing/element.bst new file mode 100644 index 000000000..3c29b4ea1 --- /dev/null +++ b/tests/format/option-enum-missing/element.bst @@ -0,0 +1 @@ +kind: autotools diff --git a/tests/format/option-enum-missing/project.conf b/tests/format/option-enum-missing/project.conf new file mode 100644 index 000000000..d6cd7049a --- /dev/null +++ b/tests/format/option-enum-missing/project.conf @@ -0,0 +1,7 @@ +name: test + +options: + empty: + type: enum + description: Invalid because no values are defined + values: [] diff --git a/tests/format/option-enum/element-compare.bst b/tests/format/option-enum/element-compare.bst new file mode 100644 index 000000000..c76b97719 --- /dev/null +++ b/tests/format/option-enum/element-compare.bst @@ -0,0 +1,6 @@ +kind: autotools +variables: + result: "different" + (?): + - brother == sister: + result: "same" diff --git a/tests/format/option-enum/element.bst b/tests/format/option-enum/element.bst new file mode 100644 index 000000000..4839b311a --- /dev/null +++ b/tests/format/option-enum/element.bst @@ -0,0 +1,8 @@ +kind: autotools +variables: + result: "a pony" + (?): + - brother == "zebry": + result: "a zebry" + - brother == "horsy": + result: "a horsy" diff --git a/tests/format/option-enum/project.conf b/tests/format/option-enum/project.conf new file mode 100644 index 000000000..0b8ea6d1e --- /dev/null +++ b/tests/format/option-enum/project.conf @@ -0,0 +1,19 @@ +name: test + +options: + brother: + type: enum + description: The kind of animal of the brother + values: + - pony + - horsy + - zebry + default: pony + sister: + type: enum + description: The kind of animal of the sister + values: + - pony + - horsy + - zebry + default: zebry diff --git a/tests/format/optionenum.py b/tests/format/optionenum.py new file mode 100644 index 000000000..5804a5fc1 --- /dev/null +++ b/tests/format/optionenum.py @@ -0,0 +1,121 @@ +import os +import pytest +from buildstream import _yaml +from buildstream import LoadError, 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', 'brother', 'pony', 'a pony'), + ('element.bst', 'brother', 'zebry', 'a zebry'), + ('element.bst', 'brother', 'horsy', 'a horsy'), + # Test 'var1 == var2' syntax + ('element-compare.bst', 'brother', 'horsy', 'different'), + ('element-compare.bst', 'brother', 'zebry', 'same'), + ('element-compare.bst', 'sister', 'pony', 'same'), +]) +def test_conditional_cli(cli, datafiles, target, option, value, expected): + project = os.path.join(datafiles.dirname, datafiles.basename, 'option-enum') + result = cli.run(project=project, silent=True, args=[ + '--option', option, value, + 'show', + '--deps', 'none', + '--format', '%{vars}', + target]) + + assert result.exit_code == 0 + 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', 'brother', 'pony', 'a pony'), + ('element.bst', 'brother', 'zebry', 'a zebry'), + ('element.bst', 'brother', 'horsy', 'a horsy'), + # Test 'var1 == var2' syntax + ('element-compare.bst', 'brother', 'horsy', 'different'), + ('element-compare.bst', 'brother', 'zebry', 'same'), + ('element-compare.bst', 'sister', 'pony', 'same'), +]) +def test_conditional_config(cli, datafiles, target, option, value, expected): + project = os.path.join(datafiles.dirname, datafiles.basename, 'option-enum') + cli.configure({ + 'projects': { + 'test': { + 'options': { + option: value + } + } + } + }) + result = cli.run(project=project, silent=True, args=[ + 'show', + '--deps', 'none', + '--format', '%{vars}', + target]) + + assert result.exit_code == 0 + loaded = _yaml.load_data(result.output) + assert loaded['result'] == expected + + +@pytest.mark.datafiles(DATA_DIR) +def test_invalid_value_cli(cli, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename, 'option-enum') + result = cli.run(project=project, silent=True, args=[ + '--option', 'brother', 'giraffy', + 'show', + '--deps', 'none', + '--format', '%{vars}', + 'element.bst']) + assert result.exit_code != 0 + assert result.exception + assert isinstance(result.exception, LoadError) + assert result.exception.reason == LoadErrorReason.INVALID_DATA + + +@pytest.mark.datafiles(DATA_DIR) +@pytest.mark.parametrize("config_option", [ + ('giraffy'), (['its', 'a', 'list']), ({'dic': 'tionary'}) +]) +def test_invalid_value_config(cli, datafiles, config_option): + project = os.path.join(datafiles.dirname, datafiles.basename, 'option-enum') + cli.configure({ + 'projects': { + 'test': { + 'options': { + 'brother': config_option + } + } + } + }) + result = cli.run(project=project, silent=True, args=[ + 'show', + '--deps', 'none', + '--format', '%{vars}', + 'element.bst']) + assert result.exit_code != 0 + assert result.exception + assert isinstance(result.exception, LoadError) + assert result.exception.reason == LoadErrorReason.INVALID_DATA + + +@pytest.mark.datafiles(DATA_DIR) +def test_missing_values(cli, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename, 'option-enum-missing') + result = cli.run(project=project, silent=True, args=[ + 'show', + '--deps', 'none', + '--format', '%{vars}', + 'element.bst']) + assert result.exit_code != 0 + assert result.exception + assert isinstance(result.exception, LoadError) + assert result.exception.reason == LoadErrorReason.INVALID_DATA -- cgit v1.2.1