test-config-parselist.py
52 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
/ tests / test-config-parselist.py
|
r48762 | """ | ||
List-valued configuration keys have an ad-hoc microsyntax. From `hg help config`: | ||||
> List values are separated by whitespace or comma, except when values are | ||||
> placed in double quotation marks: | ||||
> | ||||
> allow_read = "John Doe, PhD", brian, betty | ||||
> | ||||
> Quotation marks can be escaped by prefixing them with a backslash. Only | ||||
> quotation marks at the beginning of a word is counted as a quotation | ||||
> (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``). | ||||
That help documentation is fairly light on details, the actual parser has many | ||||
other edge cases. This test tries to cover them. | ||||
""" | ||||
from mercurial.utils import stringutil | ||||
def assert_parselist(input, expected): | ||||
result = stringutil.parselist(input) | ||||
if result != expected: | ||||
raise AssertionError( | ||||
"parse_input(%r)\n got %r\nexpected %r" | ||||
% (input, result, expected) | ||||
) | ||||
# Keep these Python tests in sync with the Rust ones in `rust/hg-core/src/config/values.rs` | ||||
assert_parselist(b'', []) | ||||
assert_parselist(b',', []) | ||||
assert_parselist(b'A', [b'A']) | ||||
assert_parselist(b'B,B', [b'B', b'B']) | ||||
assert_parselist(b', C, ,C,', [b'C', b'C']) | ||||
assert_parselist(b'"', [b'"']) | ||||
assert_parselist(b'""', [b'', b'']) | ||||
assert_parselist(b'D,"', [b'D', b'"']) | ||||
assert_parselist(b'E,""', [b'E', b'', b'']) | ||||
assert_parselist(b'"F,F"', [b'F,F']) | ||||
assert_parselist(b'"G,G', [b'"G', b'G']) | ||||
assert_parselist(b'"H \\",\\"H', [b'"H', b',', b'H']) | ||||
assert_parselist(b'I,I"', [b'I', b'I"']) | ||||
assert_parselist(b'J,"J', [b'J', b'"J']) | ||||
assert_parselist(b'K K', [b'K', b'K']) | ||||
assert_parselist(b'"K" K', [b'K', b'K']) | ||||
assert_parselist(b'L\tL', [b'L', b'L']) | ||||
assert_parselist(b'"L"\tL', [b'L', b'', b'L']) | ||||
assert_parselist(b'M\x0bM', [b'M', b'M']) | ||||
assert_parselist(b'"M"\x0bM', [b'M', b'', b'M']) | ||||
assert_parselist(b'"N" , ,"', [b'N"']) | ||||
assert_parselist(b'" ,O, ', [b'"', b'O']) | ||||