run-tests: defer leftover (?) cleanup until after all output is exhausted
authorMatt Harbison <matt_harbison@yahoo.com>
Sun, 28 Feb 2016 23:21:28 -0500
changeset 28317 8de70574be2c
parent 28316 c0cecc153d25
child 28318 564a354f7f35
run-tests: defer leftover (?) cleanup until after all output is exhausted Previously, after matching a single line, any contiguous subsequent lines ending with (?) would be added to the output and removed from the expected output. This is a problem if the subsequent test output would have matched the consumed (?) line, because it kept the optional line and then added a duplicate without the (?) [1]. Instead, wait until there is nothing more to match before handling the leftovers. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-February/080197.html
tests/run-tests.py
tests/test-run-tests.t
--- a/tests/run-tests.py	Sun Feb 28 23:16:30 2016 -0500
+++ b/tests/run-tests.py	Sun Feb 28 23:21:28 2016 -0500
@@ -1138,14 +1138,13 @@
                     elif warnonly == 1: # Is "not yet" and line is warn only.
                         warnonly = 2 # Yes do warn.
                 break
-
-            # clean up any optional leftovers
-            while expected.get(pos, None):
-                el = expected[pos].pop(0)
-                if not el.endswith(b" (?)\n"):
-                    expected[pos].insert(0, el)
-                    break
-                postout.append(b'  ' + el)
+            else:
+                # clean up any optional leftovers
+                while expected.get(pos, None):
+                    el = expected[pos].pop(0)
+                    if el and not el.endswith(b" (?)\n"):
+                        break
+                    postout.append(b'  ' + el)
 
             if lcmd:
                 # Add on last return code.
--- a/tests/test-run-tests.t	Sun Feb 28 23:16:30 2016 -0500
+++ b/tests/test-run-tests.t	Sun Feb 28 23:21:28 2016 -0500
@@ -52,6 +52,12 @@
   >   never happens (?)
   >   xyzzy
   >   nor this (?)
+  >   $ printf 'abc\ndef\nxyz\n'
+  >   123 (?)
+  >   abc
+  >   def (?)
+  >   456 (?)
+  >   xyz
   > EOF
 
   $ rt
@@ -286,6 +292,12 @@
   xyzzy
   + echo *SALT* 6 0 (glob)
   *SALT* 6 0 (glob)
+  + printf *abc\ndef\nxyz\n* (glob)
+  abc
+  def
+  xyz
+  + echo *SALT* 12 0 (glob)
+  *SALT* 12 0 (glob)
   .
   # Ran 2 tests, 0 skipped, 0 warned, 0 failed.