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.
--- 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):