run-tests: teach _processoutput to handle multiple lines of churn
authortimeless <timeless@mozdev.org>
Thu, 17 Mar 2016 20:52:06 +0000
changeset 28569 1ad0ddf8cccc
parent 28568 4a908089fe29
child 28570 5508cf9a52fe
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.
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):