Mercurial > hg-stable
changeset 28569:1ad0ddf8cccc
run-tests: teach _processoutput to handle multiple lines of churn
Instead of treating expected output as happening in a precise order,
and assuming that if a line is missing it will never happen,
assume that expected output is a prioritized list of likely matching
lines.
This means that if:
foo/bar (glob)
baz/bad (glob)
changes to:
baz/bad
foo/bar
instead of generating:
baz/bad
foo/bar
For which we've lost both (glob) markers,
we will match both lines and generate:
baz/bad (glob)
foo/bar (glob)
This retains any special annotations we have for lines.
author | timeless <timeless@mozdev.org> |
---|---|
date | Thu, 17 Mar 2016 20:52:06 +0000 |
parents | 4a908089fe29 |
children | 5508cf9a52fe |
files | tests/run-tests.py |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/run-tests.py Thu Mar 17 20:54:36 2016 +0000 +++ b/tests/run-tests.py Thu Mar 17 20:52:06 2016 +0000 @@ -1108,10 +1108,14 @@ lout += b' (no-eol)\n' # Find the expected output at the current position. - el = None + els = [None] if expected.get(pos, None): - el = expected[pos].pop(0) - if True: + els = expected[pos] + + i = 0 + while i < len(els): + el = els[i] + r = TTest.linematch(el, lout) if isinstance(r, str): if r == '+glob': @@ -1122,11 +1126,19 @@ r = '' # Warn only this line. elif r == "retry": postout.append(b' ' + el) - continue + els.pop(i) + break else: log('\ninfo, unknown linematch result: %r\n' % r) r = False + if r: + els.pop(i) + break + i += 1 + if r: + if r == "retry": + continue postout.append(b' ' + el) else: if self.NEEDESCAPE(lout):