[PATCH] tests: asciify all output

Mads Kiilerich mads at kiilerich.com
Wed Sep 1 09:48:55 CDT 2010


# HG changeset patch
# User Mads Kiilerich <mads at kiilerich.com>
# Date 1283352508 -7200
# Node ID 48e8c92c6f9ca78f986870482ff0d1ae3961d21a
# Parent  a55e3c50868fc2e827f44187c7fd3f6c4e2f3f31
tests: asciify all output

This encodes all non-ascii and control code output from tests with python-style
\-escapes.

This avoids the problem with handling non-ascii test output as non-ascii.

This changes the output of some tests - but to the better, IMHO, even though it
makes it less sh-ish.

(Some people, when confronted with a problem, think "I know, I'll use regular
expressions." Now they have two problems.)

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -460,6 +460,15 @@
     vlog("# Running", cmd)
     return run(cmd, options)
 
+asciifyre = re.compile(r'[\x00-\x08\x0a-\x1f\\\x7f-\xff]', re.MULTILINE) # match \t=\x09 or not?
+def asciify(s):
+    def f(m):
+        c = m.group(0)
+        if c in '\r\n\t':
+            return {'\r': r'\r', '\n': '\n', '\t': r'\t'}[c]
+        return r'\x%02X' % ord(c)
+    return asciifyre.sub(f, s)
+
 def tsttest(test, options):
     t = open(test)
     out = []
@@ -514,6 +523,7 @@
                 postout += after.pop(pos)
             pos = int(l.split()[1])
         else:
+            l = asciify(l)
             el = None
             if pos in expected and expected[pos]:
                 el = expected[pos].pop(0)


More information about the Mercurial-devel mailing list