# HG changeset patch # User Manuel Jacob # Date 1593389112 -7200 # Node ID bd0f122f3f51939b2adc7d6f9d8611692b1ebdce # Parent 5c0d5b48e58c906728a0cf80039313c9be58089d run-tests: fix escapes with conditions Before this fix, escapes with conditions in tests failed like this on Python 3: $ $PYTHON -c 'from mercurial.utils.procutil import stdout; stdout.write(b"\xff")' - \xff (no-eol) (esc) (true !) + \xff (no-eol) (esc) The unicode_escape encoding decodes br'\xff' to u'\xff'. To convert the first 256 code points to bytes with the same ordinal, the latin-1 encoding must be used. Escapes without conditions already worked before on Python 3, but not through `el == l` a few lines below the changed line in run-tests.py. I didn’t investigate further. diff -r 5c0d5b48e58c -r bd0f122f3f51 tests/run-tests.py --- a/tests/run-tests.py Sun Jun 28 18:02:45 2020 +0200 +++ b/tests/run-tests.py Mon Jun 29 02:05:12 2020 +0200 @@ -2069,7 +2069,7 @@ if el.endswith(b" (esc)\n"): if PYTHON3: el = el[:-7].decode('unicode_escape') + '\n' - el = el.encode('utf-8') + el = el.encode('latin-1') else: el = el[:-7].decode('string-escape') + '\n' if el == l or os.name == 'nt' and el[:-1] + b'\r\n' == l: diff -r 5c0d5b48e58c -r bd0f122f3f51 tests/test-unified-test.t --- a/tests/test-unified-test.t Sun Jun 28 18:02:45 2020 +0200 +++ b/tests/test-unified-test.t Mon Jun 29 02:05:12 2020 +0200 @@ -75,6 +75,16 @@ crlf\r (esc) #endif +Escapes: + + $ $PYTHON -c 'from mercurial.utils.procutil import stdout; stdout.write(b"\xff")' + \xff (no-eol) (esc) + +Escapes with conditions: + + $ $PYTHON -c 'from mercurial.utils.procutil import stdout; stdout.write(b"\xff")' + \xff (no-eol) (esc) (true !) + Combining esc with other markups - and handling lines ending with \r instead of \n: $ printf 'foo/bar\r'