diff --git a/helpers/dirty_json.py b/helpers/dirty_json.py index 8e7b210124..57d49503ce 100644 --- a/helpers/dirty_json.py +++ b/helpers/dirty_json.py @@ -401,7 +401,6 @@ def _parse_unquoted_string(self): ]: result += self.current_char self._advance() - self._advance() return result.strip() def _peek(self, n): diff --git a/tests/test_dirty_json.py b/tests/test_dirty_json.py index 2715366e98..95e10c8bb9 100644 --- a/tests/test_dirty_json.py +++ b/tests/test_dirty_json.py @@ -93,3 +93,18 @@ def test_value_can_still_end_before_quoted_key_when_comma_is_missing() -> None: parsed = DirtyJson.parse_string('{"first":"one" "second":"two"}') assert parsed == {"first": "one", "second": "two"} + + +@pytest.mark.parametrize( + ("payload", "expected"), + [ + ("[foo, bar, baz]", ["foo", "bar", "baz"]), + ('[foo, "bar"]', ["foo", "bar"]), + ('["foo", bar]', ["foo", "bar"]), + ("[foo]", ["foo"]), + ], +) +def test_unquoted_array_elements_are_all_kept(payload, expected) -> None: + # A bareword element must not consume its own trailing delimiter, which + # previously truncated the array after the first unquoted value. + assert DirtyJson.parse_string(payload) == expected