Mercurial > hg
changeset 15412:59fe460bb0f0
tests: rewrite inline Python support
Tests with inline Python could turn '>>>' into their underlying python
invocation if the test got updated with -i.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 03 Nov 2011 14:30:00 -0500 |
parents | afc02adf4ded |
children | 8e60433e070a |
files | tests/run-tests.py |
diffstat | 1 files changed, 29 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/run-tests.py Thu Nov 03 12:58:30 2011 -0500 +++ b/tests/run-tests.py Thu Nov 03 14:30:00 2011 -0500 @@ -521,26 +521,6 @@ def stringescape(s): return escapesub(escapef, s) -def transformtst(lines): - inblock = False - for l in lines: - if inblock: - if l.startswith(' $ ') or not l.startswith(' '): - inblock = False - yield ' > EOF\n' - yield l - else: - yield ' > ' + l[2:] - else: - if l.startswith(' >>> '): - inblock = True - yield ' $ %s -m heredoctest <<EOF\n' % PYTHON - yield ' > ' + l[2:] - else: - yield l - if inblock: - yield ' > EOF\n' - def tsttest(test, wd, options, replacements): t = open(test) out = [] @@ -550,10 +530,24 @@ pos = prepos = -1 after = {} expected = {} - for n, l in enumerate(transformtst(t)): + inpython = False + for n, l in enumerate(t): if not l.endswith('\n'): l += '\n' - if l.startswith(' $ '): # commands + if l.startswith(' >>> '): + if not inpython: + # we've just entered a Python block, add the header + inpython = True + script.append('echo %s %s $?\n' % (salt, n)) + script.append('%s -m heredoctest <<EOF\n' % PYTHON) + prepos = pos + pos = n + after.setdefault(prepos, []).append(l) + script.append(l[2:]) + elif l.startswith(' $ '): # commands + if inpython: + script.append("EOF\n") + inpython = False after.setdefault(pos, []).append(l) prepos = pos pos = n @@ -563,12 +557,22 @@ after.setdefault(prepos, []).append(l) script.append(l[4:]) elif l.startswith(' '): # results - # queue up a list of expected results - expected.setdefault(pos, []).append(l[2:]) + 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:]) else: + if inpython: + script.append("EOF\n") + inpython = False # non-command/result - queue up for merged output after.setdefault(pos, []).append(l) + if inpython: + script.append("EOF\n") + t.close() script.append('echo %s %s $?\n' % (salt, n + 1)) @@ -853,7 +857,7 @@ refout = None # to match "out is None" elif os.path.exists(ref): f = open(ref, "r") - refout = list(transformtst(splitnewlines(f.read()))) + refout = list(splitnewlines(f.read())) f.close() else: refout = []