summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-04 21:04:38 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-10-10 19:29:59 +0900
commitfaa8b765ede18c4872e181e8252db3f67988944a (patch)
tree8abdeee04b5a56d6b7201c5f46d23c7811307192
parentc986ab45d9325dbe5dd242291e40d157f238eea9 (diff)
downloadbuildstream-faa8b765ede18c4872e181e8252db3f67988944a.tar.gz
tests/format/options.py: General tests for project options
-rw-r--r--tests/format/options.py228
-rw-r--r--tests/format/options/compound-and-condition/element.bst1
-rw-r--r--tests/format/options/compound-and-condition/project.conf18
-rw-r--r--tests/format/options/compound-or-condition/element.bst1
-rw-r--r--tests/format/options/compound-or-condition/project.conf18
-rw-r--r--tests/format/options/deep-nesting/element-deeper.bst11
-rw-r--r--tests/format/options/deep-nesting/element.bst8
-rw-r--r--tests/format/options/deep-nesting/project.conf6
-rw-r--r--tests/format/options/invalid-condition/element.bst1
-rw-r--r--tests/format/options/invalid-condition/project.conf13
-rw-r--r--tests/format/options/invalid-expression/element.bst1
-rw-r--r--tests/format/options/invalid-expression/project.conf12
-rw-r--r--tests/format/options/invalid-type/element.bst1
-rw-r--r--tests/format/options/invalid-type/project.conf12
-rw-r--r--tests/format/options/nested-condition/element.bst1
-rw-r--r--tests/format/options/nested-condition/project.conf20
-rw-r--r--tests/format/options/simple-condition/element.bst1
-rw-r--r--tests/format/options/simple-condition/project.conf12
18 files changed, 365 insertions, 0 deletions
diff --git a/tests/format/options.py b/tests/format/options.py
new file mode 100644
index 000000000..dfc2b8340
--- /dev/null
+++ b/tests/format/options.py
@@ -0,0 +1,228 @@
+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.join(
+ os.path.dirname(os.path.realpath(__file__)),
+ 'options'
+)
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_invalid_option_type(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'invalid-type')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'opt', 'funny',
+ '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_invalid_option_cli(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'simple-condition')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'fart', 'funny',
+ '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_invalid_option_config(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'simple-condition')
+ cli.configure({
+ 'projects': {
+ 'test': {
+ 'options': {
+ 'fart': 'Hello'
+ }
+ }
+ }
+ })
+ 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_invalid_expression(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'invalid-expression')
+ 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.EXPRESSION_FAILED
+
+
+@pytest.mark.datafiles(DATA_DIR)
+def test_invalid_condition(cli, datafiles):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'invalid-condition')
+ 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)
+@pytest.mark.parametrize("opt_option,expected_prefix", [
+ ('False', '/usr'),
+ ('True', '/opt'),
+])
+def test_simple_conditional(cli, datafiles, opt_option, expected_prefix):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'simple-condition')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'opt', opt_option,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ assert loaded['prefix'] == expected_prefix
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("debug,logging,expected", [
+ ('False', 'False', 'False'),
+ ('True', 'False', 'False'),
+ ('False', 'True', 'False'),
+ ('True', 'True', 'True'),
+])
+def test_nested_conditional(cli, datafiles, debug, logging, expected):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'nested-condition')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'debug', debug,
+ '--option', 'logging', logging,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ assert loaded['debug'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("debug,logging,expected", [
+ ('False', 'False', 'False'),
+ ('True', 'False', 'False'),
+ ('False', 'True', 'False'),
+ ('True', 'True', 'True'),
+])
+def test_compound_and_conditional(cli, datafiles, debug, logging, expected):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'compound-and-condition')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'debug', debug,
+ '--option', 'logging', logging,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ assert loaded['debug'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("debug,logging,expected", [
+ ('False', 'False', 'False'),
+ ('True', 'False', 'True'),
+ ('False', 'True', 'True'),
+ ('True', 'True', 'True'),
+])
+def test_compound_or_conditional(cli, datafiles, debug, logging, expected):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'compound-or-condition')
+
+ # Test with the opt option set
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'debug', debug,
+ '--option', 'logging', logging,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ assert loaded['logging'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("option,expected", [
+ ('False', 'horsy'),
+ ('True', 'pony'),
+])
+def test_deep_nesting_level1(cli, datafiles, option, expected):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'deep-nesting')
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'pony', option,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{public}',
+ 'element.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ shallow_list = loaded['shallow-nest']
+ first_dict = shallow_list[0]
+
+ assert first_dict['animal'] == expected
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("option,expected", [
+ ('False', 'horsy'),
+ ('True', 'pony'),
+])
+def test_deep_nesting_level2(cli, datafiles, option, expected):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'deep-nesting')
+ result = cli.run(project=project, silent=True, args=[
+ '--option', 'pony', option,
+ 'show',
+ '--deps', 'none',
+ '--format', '%{public}',
+ 'element-deeper.bst'])
+ assert result.exit_code == 0
+ loaded = _yaml.load_data(result.output)
+ shallow_list = loaded['deep-nest']
+ deeper_list = shallow_list[0]
+ first_dict = deeper_list[0]
+
+ assert first_dict['animal'] == expected
diff --git a/tests/format/options/compound-and-condition/element.bst b/tests/format/options/compound-and-condition/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/compound-and-condition/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/compound-and-condition/project.conf b/tests/format/options/compound-and-condition/project.conf
new file mode 100644
index 000000000..650d017bd
--- /dev/null
+++ b/tests/format/options/compound-and-condition/project.conf
@@ -0,0 +1,18 @@
+name: test
+
+options:
+ debug:
+ type: bool
+ description: Whether debugging is enabled
+ default: False
+ logging:
+ type: bool
+ description: Whether logging is enabled
+ default: False
+
+variables:
+ debug: 'False'
+ (?):
+ # Debugging is not enabled unless logging is also enabled
+ - logging and debug:
+ debug: 'True'
diff --git a/tests/format/options/compound-or-condition/element.bst b/tests/format/options/compound-or-condition/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/compound-or-condition/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/compound-or-condition/project.conf b/tests/format/options/compound-or-condition/project.conf
new file mode 100644
index 000000000..c59cc64f3
--- /dev/null
+++ b/tests/format/options/compound-or-condition/project.conf
@@ -0,0 +1,18 @@
+name: test
+
+options:
+ debug:
+ type: bool
+ description: Whether debugging is enabled
+ default: False
+ logging:
+ type: bool
+ description: Whether logging is enabled
+ default: False
+
+variables:
+ logging: 'False'
+ (?):
+ # Logging is enabled if specified or if debugging is requested
+ - logging or debug:
+ logging: 'True'
diff --git a/tests/format/options/deep-nesting/element-deeper.bst b/tests/format/options/deep-nesting/element-deeper.bst
new file mode 100644
index 000000000..15574ad14
--- /dev/null
+++ b/tests/format/options/deep-nesting/element-deeper.bst
@@ -0,0 +1,11 @@
+kind: autotools
+
+# Yep, this is a list of lists of dictionaries.
+#
+public:
+ deep-nest:
+ -
+ - animal: horsy
+ (?):
+ - pony:
+ animal: pony
diff --git a/tests/format/options/deep-nesting/element.bst b/tests/format/options/deep-nesting/element.bst
new file mode 100644
index 000000000..fb0043ba1
--- /dev/null
+++ b/tests/format/options/deep-nesting/element.bst
@@ -0,0 +1,8 @@
+kind: autotools
+
+public:
+ shallow-nest:
+ - animal: horsy
+ (?):
+ - pony:
+ animal: pony
diff --git a/tests/format/options/deep-nesting/project.conf b/tests/format/options/deep-nesting/project.conf
new file mode 100644
index 000000000..d912cd19e
--- /dev/null
+++ b/tests/format/options/deep-nesting/project.conf
@@ -0,0 +1,6 @@
+name: test
+options:
+ pony:
+ type: bool
+ description: Whether a pony or not
+ default: False
diff --git a/tests/format/options/invalid-condition/element.bst b/tests/format/options/invalid-condition/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/invalid-condition/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/invalid-condition/project.conf b/tests/format/options/invalid-condition/project.conf
new file mode 100644
index 000000000..b31f35c95
--- /dev/null
+++ b/tests/format/options/invalid-condition/project.conf
@@ -0,0 +1,13 @@
+name: test
+
+options:
+ opt:
+ type: bool
+ description: Whether to build in an opt prefix
+ default: False
+
+variables:
+ (?):
+ - not: Allowed any adjacent keys beside the expression.
+ opt:
+ prefix: "/opt"
diff --git a/tests/format/options/invalid-expression/element.bst b/tests/format/options/invalid-expression/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/invalid-expression/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/invalid-expression/project.conf b/tests/format/options/invalid-expression/project.conf
new file mode 100644
index 000000000..ee0147232
--- /dev/null
+++ b/tests/format/options/invalid-expression/project.conf
@@ -0,0 +1,12 @@
+name: test
+
+options:
+ opt:
+ type: bool
+ description: Whether to build in an opt prefix
+ default: False
+
+variables:
+ (?):
+ - is defined pony:
+ prefix: "/opt"
diff --git a/tests/format/options/invalid-type/element.bst b/tests/format/options/invalid-type/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/invalid-type/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/invalid-type/project.conf b/tests/format/options/invalid-type/project.conf
new file mode 100644
index 000000000..b4280cdb6
--- /dev/null
+++ b/tests/format/options/invalid-type/project.conf
@@ -0,0 +1,12 @@
+name: test
+
+options:
+ opt:
+ type: funny
+ description: This aint really an option type
+ default: False
+
+variables:
+ (?):
+ - opt is funny:
+ prefix: "/opt"
diff --git a/tests/format/options/nested-condition/element.bst b/tests/format/options/nested-condition/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/nested-condition/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/nested-condition/project.conf b/tests/format/options/nested-condition/project.conf
new file mode 100644
index 000000000..104b89571
--- /dev/null
+++ b/tests/format/options/nested-condition/project.conf
@@ -0,0 +1,20 @@
+name: test
+
+options:
+ debug:
+ type: bool
+ description: Whether debugging is enabled
+ default: False
+ logging:
+ type: bool
+ description: Whether logging is enabled
+ default: False
+
+variables:
+ debug: 'False'
+ (?):
+ - logging:
+ # Debugging is not enabled unless logging is also enabled
+ (?):
+ - debug:
+ debug: 'True'
diff --git a/tests/format/options/simple-condition/element.bst b/tests/format/options/simple-condition/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/options/simple-condition/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/options/simple-condition/project.conf b/tests/format/options/simple-condition/project.conf
new file mode 100644
index 000000000..b6bd29fb4
--- /dev/null
+++ b/tests/format/options/simple-condition/project.conf
@@ -0,0 +1,12 @@
+name: test
+
+options:
+ opt:
+ type: bool
+ description: Whether to build in an opt prefix
+ default: False
+
+variables:
+ (?):
+ - opt:
+ prefix: "/opt"