diff tests/run-tests.py @ 12375:02990e22150b

tests: require regexes in unified tests to be marked with " (re)" Consider this test: $ hg glog --template '{rev}:{node|short} "{desc}"\n' @ 2:20c4f79fd7ac "3" | | o 1:38f24201dcab "2" |/ o 0:2a18120dc1c9 "1" Because each line beginning with "|" can be compiled as a regular expression (equivalent to ".*|"), they will match any output. Similarly: $ echo foo The blank output line can be compiled as a regular expression and will also match any output. With this patch, none of the above output lines will be matched as regular expressions. A line must end in " (re)" in order to be matched as one. Lines are still matched literally first, so the following will pass: $ echo 'foo (re)' foo (re)
author Brodie Rao <brodie@bitheap.org>
date Wed, 22 Sep 2010 16:06:00 -0500
parents 4e7dd28db0dd
children 97ffc68f71d3
line wrap: on
line diff
--- a/tests/run-tests.py	Wed Sep 22 16:05:59 2010 -0500
+++ b/tests/run-tests.py	Wed Sep 22 16:06:00 2010 -0500
@@ -503,9 +503,6 @@
 
     def rematch(el, l):
         try:
-            # hack to deal with graphlog, which looks like bogus regexes
-            if el.startswith('|'):
-                el = '\\' + el
             # ensure that the regex matches to the end of the string
             return re.match(el + r'\Z', l)
         except re.error:
@@ -531,10 +528,10 @@
 
             if el == l: # perfect match (fast)
                 postout.append("  " + l)
-            elif el and el[2:] and rematch(el, l): # fallback regex match
-                postout.append("  " + el)
-            else: # mismatch - let diff deal with it
-                postout.append("  " + l)
+            elif el and el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l):
+                postout.append("  " + el) # fallback regex match
+            else:
+                postout.append("  " + l) # let diff deal with it
 
     if pos in after:
         postout += after.pop(pos)