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