view tests/test-config-parselist.py @ 52230:7a568296296e stable

windows: simply rely on the PATH adjustment to find python.exe in tests The shell script under a `.exe` name confused Windows outside MSYS and give us the following error: […]/python.exe is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher. This is necessary to get the wheel variant of the test run to work properly.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 10 Nov 2024 22:30:02 +0100
parents 6961eca0b3ee
children
line wrap: on
line source

"""
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'])