summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-06 14:52:41 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-10 19:29:59 +0900
commit5d6cad8f5f76be2e46c748f9eb770b84ec18f7e1 (patch)
tree8950ceb79ca5b8c5703f7a95adc7c3e004c1a6e7
parent110396429bd972536217fa5b1a8603db1a950b22 (diff)
downloadbuildstream-5d6cad8f5f76be2e46c748f9eb770b84ec18f7e1.tar.gz
tests/format/optionenum.py: Added enum option specific test cases
-rw-r--r--tests/format/option-enum-missing/element.bst1
-rw-r--r--tests/format/option-enum-missing/project.conf7
-rw-r--r--tests/format/option-enum/element-compare.bst6
-rw-r--r--tests/format/option-enum/element.bst8
-rw-r--r--tests/format/option-enum/project.conf19
-rw-r--r--tests/format/optionenum.py121
6 files changed, 162 insertions, 0 deletions
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