Mercurial > hg
annotate tests/test-config-parselist.py @ 50807:8ef9cdffad6a
journal: show that we do not track deletion
This was an oversight for the initial implementation.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 21 Jul 2023 15:28:52 +0200 |
parents | 6961eca0b3ee |
children |
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']) |