# HG changeset patch # User Matt Harbison # Date 1500351164 14400 # Node ID eeed235083837ba138c7a352a6de68fd7cd121e3 # Parent 93422d0068f8979b33a02e5003fd4b6c23413361 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 diff -r 93422d0068f8 -r eeed23508383 tests/run-tests.py --- 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: diff -r 93422d0068f8 -r eeed23508383 tests/test-https.t --- 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] diff -r 93422d0068f8 -r eeed23508383 tests/test-run-tests.py --- 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): diff -r 93422d0068f8 -r eeed23508383 tests/test-run-tests.t --- 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