annotate tests/test-config-parselist.py @ 51711:832a1aeb576f

pytype: only try the hacky way of finding PYTHON if not provided This allows us to work in more environments, like when using pyenv. This syntax is compatible with all POSIX shells.
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 23 Jul 2024 12:10:31 +0200
parents 6961eca0b3ee
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47950
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
1 """
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
2 List-valued configuration keys have an ad-hoc microsyntax. From `hg help config`:
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
3
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
4 > List values are separated by whitespace or comma, except when values are
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
5 > placed in double quotation marks:
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
6 >
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
7 > allow_read = "John Doe, PhD", brian, betty
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
8 >
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
9 > Quotation marks can be escaped by prefixing them with a backslash. Only
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
10 > quotation marks at the beginning of a word is counted as a quotation
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
11 > (e.g., ``foo"bar baz`` is the list of ``foo"bar`` and ``baz``).
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
12
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
13 That help documentation is fairly light on details, the actual parser has many
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
14 other edge cases. This test tries to cover them.
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
15 """
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
16
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
17 from mercurial.utils import stringutil
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
18
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
19
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
20 def assert_parselist(input, expected):
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
21 result = stringutil.parselist(input)
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
22 if result != expected:
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
23 raise AssertionError(
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
24 "parse_input(%r)\n got %r\nexpected %r"
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
25 % (input, result, expected)
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
26 )
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
27
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
28
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
29 # Keep these Python tests in sync with the Rust ones in `rust/hg-core/src/config/values.rs`
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
30
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
31 assert_parselist(b'', [])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
32 assert_parselist(b',', [])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
33 assert_parselist(b'A', [b'A'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
34 assert_parselist(b'B,B', [b'B', b'B'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
35 assert_parselist(b', C, ,C,', [b'C', b'C'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
36 assert_parselist(b'"', [b'"'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
37 assert_parselist(b'""', [b'', b''])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
38 assert_parselist(b'D,"', [b'D', b'"'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
39 assert_parselist(b'E,""', [b'E', b'', b''])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
40 assert_parselist(b'"F,F"', [b'F,F'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
41 assert_parselist(b'"G,G', [b'"G', b'G'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
42 assert_parselist(b'"H \\",\\"H', [b'"H', b',', b'H'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
43 assert_parselist(b'I,I"', [b'I', b'I"'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
44 assert_parselist(b'J,"J', [b'J', b'"J'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
45 assert_parselist(b'K K', [b'K', b'K'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
46 assert_parselist(b'"K" K', [b'K', b'K'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
47 assert_parselist(b'L\tL', [b'L', b'L'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
48 assert_parselist(b'"L"\tL', [b'L', b'', b'L'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
49 assert_parselist(b'M\x0bM', [b'M', b'M'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
50 assert_parselist(b'"M"\x0bM', [b'M', b'', b'M'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
51 assert_parselist(b'"N" , ,"', [b'N"'])
6961eca0b3ee rhg: Port Python’s `ui.configlist` as `Config::get_list`
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
52 assert_parselist(b'" ,O, ', [b'"', b'O'])