# HG changeset patch # User timeless # Date 1458247926 0 # Node ID 1ad0ddf8cccca4c6285598499fbb31de49ddb8ca # Parent 4a908089fe29cb6242bf5c29310bcb9deb868eca 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. diff -r 4a908089fe29 -r 1ad0ddf8cccc tests/run-tests.py --- 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):