From 8b718502a8de88cd93133188de0d37e2c6c129f0 Mon Sep 17 00:00:00 2001 From: Garen Dye Date: Fri, 24 Apr 2026 20:16:01 -0700 Subject: [PATCH] Fix whitespace handling in select-from-file parameters --- .../validators/pyxform/parameters_generic.py | 4 +++- tests/test_external_instances_for_selects.py | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pyxform/validators/pyxform/parameters_generic.py b/pyxform/validators/pyxform/parameters_generic.py index ee5769a6..7da825fe 100644 --- a/pyxform/validators/pyxform/parameters_generic.py +++ b/pyxform/validators/pyxform/parameters_generic.py @@ -26,7 +26,9 @@ def parse(raw_parameters: str) -> PARAMETERS_TYPE: ) k, v = param.split("=")[:2] key = maybe_strip(k.lower()) - params[key] = v if key in CASE_SENSITIVE_VALUES else maybe_strip(v.lower()) + params[key] = ( + maybe_strip(v) if key in CASE_SENSITIVE_VALUES else maybe_strip(v.lower()) + ) return params diff --git a/tests/test_external_instances_for_selects.py b/tests/test_external_instances_for_selects.py index c559bd37..09d1bfc4 100644 --- a/tests/test_external_instances_for_selects.py +++ b/tests/test_external_instances_for_selects.py @@ -265,6 +265,27 @@ def test_param_value_case_preserved(self): ], ) + def test_param_value_and_label_whitespace_trimmed_case_preserved(self): + """Should trim outer spaces for value/label params while preserving case.""" + md = """ + | survey | | | | | + | | type | name | label | parameters | + | | select_one_from_file cities{ext} | city | City | value = VAL , label = lBl | + | | select_multiple_from_file suburbs{ext} | suburbs | Suburbs | value = VAL , label = lBl | + """ + for ext, xp_city, xp_subs in self.xp_test_args: + with self.subTest(msg=ext): + self.assertPyxformXform( + name="test", + md=md.format(ext=ext), + xml__xpath_match=[ + xp_city.model_external_instance_and_bind(), + xp_subs.model_external_instance_and_bind(), + xp_city.body_itemset_nodeset_and_refs(value="VAL", label="lBl"), + xp_subs.body_itemset_nodeset_and_refs(value="VAL", label="lBl"), + ], + ) + def test_expected_error_message(self): """Should get helpful error when select_from_file is missing a file extension.""" md = """