From 06f03d487e3f0646c97311dfaa6fc2faa912f6bb Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Sun, 2 Oct 2022 15:16:37 +0200 Subject: [PATCH] PICARD-2568: Fix $cleanmulti with hidden variables --- picard/script/functions.py | 2 +- test/test_script.py | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/picard/script/functions.py b/picard/script/functions.py index 1df73ddcc..1c6ff99c0 100644 --- a/picard/script/functions.py +++ b/picard/script/functions.py @@ -1515,5 +1515,5 @@ _Since Picard 2.8_""" def func_cleanmulti(parser, multi): name = normalize_tagname(multi) values = [str(value) for value in parser.context.getall(name) if value or value == 0] - parser.context[multi] = values + parser.context[name] = values return "" diff --git a/test/test_script.py b/test/test_script.py index ec8a0ee76..29e0c6c35 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -1830,7 +1830,17 @@ class ScriptParserTest(PicardTestCase): self.assertScriptResultEquals("$cleanmulti(bar)%bar%", "one; two", context) self.assertScriptResultEquals("$cleanmulti(baz)%baz%", "one; two", context) - # Text clean with only empty string elements + def test_cmd_cleanmulti_with_hidden_var(self): + context = Metadata() + context["~foo"] = ["one", "", "two"] + + # Confirm initial values + self.assertScriptResultEquals("%_foo%", "one; ; two", context) + # Test cleaned values + self.assertScriptResultEquals("$cleanmulti(_foo)%_foo%", "one; two", context) + + def test_cmd_cleanmulti_only_empty_strings(self): + context = Metadata() context["foo"] = ["", "", ""] # Confirm initial values @@ -1838,7 +1848,8 @@ class ScriptParserTest(PicardTestCase): # Test cleaned values self.assertScriptResultEquals("$cleanmulti(foo)%foo%", "", context) - # Test clean with indirect argument + def test_cmd_cleanmulti_indirect_argument(self): + context = Metadata() context["foo"] = ["", "one", "two"] context["bar"] = "foo" @@ -1847,7 +1858,8 @@ class ScriptParserTest(PicardTestCase): # Test cleaned values self.assertScriptResultEquals("$cleanmulti(%bar%)%foo%", "one; two", context) - # Test clean with non-multi argument + def test_cmd_cleanmulti_non_multi_argument(self): + context = Metadata() context["foo"] = "one" context["bar"] = "one; ; two" context["baz"] = "" @@ -1861,7 +1873,7 @@ class ScriptParserTest(PicardTestCase): self.assertScriptResultEquals("$cleanmulti(bar)%bar%", "one; ; two", context) self.assertScriptResultEquals("$cleanmulti(baz)%baz%", "", context) - # Tests with invalid number of arguments + def test_cmd_cleanmulti_invalid_number_of_arguments(self): areg = r"^\d+:\d+:\$cleanmulti: Wrong number of arguments for \$cleanmulti: Expected exactly 1, " with self.assertRaisesRegex(ScriptError, areg): self.parser.eval("$cleanmulti()")