summaryrefslogtreecommitdiff
path: root/tests/yaml
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2017-11-07 17:55:22 +0000
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2017-11-08 08:03:15 +0000
commit34ba445fd1963acada0733c196483c98a57fd753 (patch)
tree2d7cbd9de644aa8b28a3576de483cbfe0e03f685 /tests/yaml
parent2780cdbde866a65108d10d030fe7d40015df1b27 (diff)
downloadbuildstream-34ba445fd1963acada0733c196483c98a57fd753.tar.gz
Allow overwriting a list with an empty list using (=) operatorsam/overwrite-list-with-empty-list
I found myself writing the following split rules for an element: public: bst: split-rules: runtime: (=): [] devel: (>): - | %{bindir}/* The aim was to put all of this element's binaries into the 'devel' domain, and make sure nothing went into the 'runtime' domain by replacing the built-in rules for that domain with an empty list. That wasn't working though because BuildStream was using [] (empty list) as a sentinel to mean "do nothing", which is fine for the prepend and append operators (prepending an empty list to a list has no effect) but is not really correct for the overwrite operator. This commit fixes that issue and adds a test.
Diffstat (limited to 'tests/yaml')
-rw-r--r--tests/yaml/data/listoverwriteempty.yaml3
-rw-r--r--tests/yaml/yaml.py14
2 files changed, 17 insertions, 0 deletions
diff --git a/tests/yaml/data/listoverwriteempty.yaml b/tests/yaml/data/listoverwriteempty.yaml
new file mode 100644
index 000000000..f97a1eafe
--- /dev/null
+++ b/tests/yaml/data/listoverwriteempty.yaml
@@ -0,0 +1,3 @@
+# Composited on top of basics.yaml, effectively deleting its children list
+children:
+ (=): []
diff --git a/tests/yaml/yaml.py b/tests/yaml/yaml.py
index 0aae28f08..a462e18df 100644
--- a/tests/yaml/yaml.py
+++ b/tests/yaml/yaml.py
@@ -213,6 +213,20 @@ def test_list_composition(datafiles, filename,
assert_provenance(prov_file, prov_line, prov_col, child, 'mood')
+# Test that overwriting a list with an empty list works as expected.
+@pytest.mark.datafiles(os.path.join(DATA_DIR))
+def test_list_deletion(datafiles):
+ base = os.path.join(datafiles.dirname, datafiles.basename, 'basics.yaml')
+ overlay = os.path.join(datafiles.dirname, datafiles.basename, 'listoverwriteempty.yaml')
+
+ base = _yaml.load(base, shortname='basics.yaml')
+ overlay = _yaml.load(overlay, shortname='listoverwriteempty.yaml')
+ _yaml.composite_dict(base, overlay)
+
+ children = _yaml.node_get(base, list, 'children')
+ assert len(children) == 0
+
+
# Tests for deep list composition
#
# Same as test_list_composition(), but adds an additional file