run-tests: replace inline python handling with more native scheme
Normally changes in tests are reported like this in diffs:
$ cat foo
- a
+ b
Using -i mode lets us update tests when the new results are correct
and/or populate tests with their output.
But with the standard doctest framework, inline Python sections in
tests changes instead result in a big failure report that's unhelpful.
So here, we replace the doctest calls with a simple compile/eval loop.
[ original upstream message ]
--- a/tests/run-tests.py Thu Nov 03 15:18:10 2011 -0500
+++ b/tests/run-tests.py Mon Nov 07 13:46:41 2011 -0600
@@ -563,8 +563,11 @@
# up script results with our source. These markers include input
# line number and the last return code
salt = "SALT" + str(time.time())
- def addsalt(line):
- script.append('echo %s %s $?\n' % (salt, line))
+ def addsalt(line, inpython):
+ if inpython:
+ script.append('%s %d 0\n' % (salt, line))
+ else:
+ script.append('echo %s %s $?\n' % (salt, line))
# After we run the shell script, we re-unify the script output
# with non-active parts of the source, with synchronization by our
@@ -589,13 +592,17 @@
if not l.endswith('\n'):
l += '\n'
if l.startswith(' >>> '): # python inlines
+ after.setdefault(pos, []).append(l)
+ prepos = pos
+ pos = n
if not inpython:
# we've just entered a Python block, add the header
inpython = True
- addsalt(n)
+ addsalt(prepos, False) # make sure we report the exit code
script.append('%s -m heredoctest <<EOF\n' % PYTHON)
- prepos = pos
- pos = n
+ addsalt(n, True)
+ script.append(l[2:])
+ if l.startswith(' ... '): # python inlines
after.setdefault(prepos, []).append(l)
script.append(l[2:])
elif l.startswith(' $ '): # commands
@@ -605,18 +612,14 @@
after.setdefault(pos, []).append(l)
prepos = pos
pos = n
- addsalt(n)
+ addsalt(n, False)
script.append(l[4:])
elif l.startswith(' > '): # continuations
after.setdefault(prepos, []).append(l)
script.append(l[4:])
elif l.startswith(' '): # results
- if inpython:
- script.append(l[2:])
- after.setdefault(prepos, []).append(l)
- else:
- # queue up a list of expected results
- expected.setdefault(pos, []).append(l[2:])
+ # queue up a list of expected results
+ expected.setdefault(pos, []).append(l[2:])
else:
if inpython:
script.append("EOF\n")
@@ -626,7 +629,7 @@
if inpython:
script.append("EOF\n")
- addsalt(n + 1)
+ addsalt(n + 1, False)
# Write out the script and execute it
fd, name = tempfile.mkstemp(suffix='hg-tst')