run-tests: drop required (feature !) style lines when the output is missing
Essentially, these were acting as a verbose (?) flag, since they weren't being
dropped when required. Foozy has a nice description [1]. Basically, a couple
more places needed to check the features before treating it as optional.
I don't like how test-run-tests.py had to be hacked, but _hghave() can't be made
a static method. The test change was a change while developing `debugssl`,
prior to tightening up the cases where the message is printed, that this fix
would have caught.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/101941.html
--- a/tests/run-tests.py Mon Jul 24 10:34:32 2017 +0200
+++ b/tests/run-tests.py Tue Jul 18 00:12:44 2017 -0400
@@ -1359,7 +1359,7 @@
while i < len(els):
el = els[i]
- r = TTest.linematch(el, lout)
+ r = self.linematch(el, lout)
if isinstance(r, str):
if r == '+glob':
lout = el[:-1] + ' (glob)\n'
@@ -1385,9 +1385,7 @@
if m:
conditions = [c for c in m.group(2).split(' ')]
- if self._hghave(conditions)[0]:
- lout = el
- else:
+ if not self._hghave(conditions)[0]:
optional.append(i)
i += 1
@@ -1416,9 +1414,16 @@
while expected.get(pos, None):
el = expected[pos].pop(0)
if el:
- if (not optline.match(el)
- and not el.endswith(b" (?)\n")):
- break
+ if not el.endswith(b" (?)\n"):
+ m = optline.match(el)
+ if m:
+ conditions = [c for c in m.group(2).split(' ')]
+
+ if self._hghave(conditions)[0]:
+ # Don't append as optional line
+ continue
+ else:
+ break
postout.append(b' ' + el)
if lcmd:
@@ -1481,8 +1486,7 @@
res += re.escape(c)
return TTest.rematch(res, l)
- @staticmethod
- def linematch(el, l):
+ def linematch(self, el, l):
retry = False
if el == l: # perfect match (fast)
return True
@@ -1493,8 +1497,11 @@
else:
m = optline.match(el)
if m:
+ conditions = [c for c in m.group(2).split(' ')]
+
el = m.group(1) + b"\n"
- retry = "retry"
+ if not self._hghave(conditions)[0]:
+ retry = "retry" # Not required by listed features
if el.endswith(b" (esc)\n"):
if PYTHON3:
--- a/tests/test-https.t Mon Jul 24 10:34:32 2017 +0200
+++ b/tests/test-https.t Tue Jul 18 00:12:44 2017 -0400
@@ -624,7 +624,6 @@
$ P="$CERTSDIR" hg id https://localhost:$HGPORT/
warning: connecting to localhost using legacy security technology (TLS 1.0); see https://mercurial-scm.org/wiki/SecureConnections for more info (?)
- (the full certificate chain may not be available locally; see "hg help debugssl") (windows !)
abort: error: *handshake failure* (glob)
[255]
--- a/tests/test-run-tests.py Mon Jul 24 10:34:32 2017 +0200
+++ b/tests/test-run-tests.py Tue Jul 18 00:12:44 2017 -0400
@@ -39,7 +39,8 @@
and output.endswith(b'\n')), 'missing newline'
assert not re.search(br'[^ \w\\/\r\n()*?]', expected + output), \
b'single backslash or unknown char'
- match = run_tests.TTest.linematch(expected, output)
+ test = run_tests.TTest('test-run-test.t', '.', '.')
+ match = test.linematch(expected, output)
if isinstance(match, str):
return 'special: ' + match
elif isinstance(match, bytes):
--- a/tests/test-run-tests.t Mon Jul 24 10:34:32 2017 +0200
+++ b/tests/test-run-tests.t Tue Jul 18 00:12:44 2017 -0400
@@ -158,6 +158,57 @@
python hash seed: * (glob)
#endif
+ $ cat > test-failure.t << EOF
+ > $ true
+ > should go away (true !)
+ > $ true
+ > should stay (false !)
+ >
+ > Should remove first line, not second or third
+ > $ echo 'testing'
+ > baz*foo (glob) (true !)
+ > foobar*foo (glob) (false !)
+ > te*ting (glob) (true !)
+ >
+ > Should keep first two lines, remove third and last
+ > $ echo 'testing'
+ > test.ng (re) (true !)
+ > foo.ar (re) (false !)
+ > b.r (re) (true !)
+ > missing (?)
+ > awol (true !)
+ > EOF
+ $ rt test-failure.t
+
+ --- $TESTTMP/test-failure.t
+ +++ $TESTTMP/test-failure.t.err
+ @@ -1,11 +1,9 @@
+ $ true
+ - should go away (true !)
+ $ true
+ should stay (false !)
+
+ Should remove first line, not second or third
+ $ echo 'testing'
+ - baz*foo (glob) (true !)
+ foobar*foo (glob) (false !)
+ te*ting (glob) (true !)
+
+ @@ -13,6 +11,4 @@
+ $ echo 'testing'
+ test.ng (re) (true !)
+ foo.ar (re) (false !)
+ - b.r (re) (true !)
+ missing (?)
+ - awol (true !)
+
+ ERROR: test-failure.t output changed
+ !
+ Failed test-failure.t: output changed
+ # Ran 1 tests, 0 skipped, 1 failed.
+ python hash seed: * (glob)
+ [1]
+
basic failing test
$ cat > test-failure.t << EOF
> $ echo babar