# HG changeset patch # User Jun Wu # Date 2017-08-20 16:46:27 # Node ID 6cc8f848b4c3de1d08a72214d71c3ac54ad3aa6e # Parent 39d253d088a978857e010d2887f3caa581fa5eef run-tests: make per-line condition support testcase names 7340465bd added multiple test cases support. The latter has a problem - output lines cannot be made conditional with `#if`: ``` # COUNTEREXAMPLE: DOES NOT WORK #testcases A B $ command-foo common ouput #if A A's ouput #else B's ouput #endif common ouput ``` That's not trivial to fix (even if it works in test, `run-tests.py -i` may be suboptimal because diff algorithm does not know how to skip the `#if` lines, even if it does, it may have trouble figuring out whether a changed line belongs to inside a `#if` block or outside). Matching output lines conditionally is useful. 4eec2f04a added per-line condition support for hghave. This patch extends that to also support test case names. Differential Revision: https://phab.mercurial-scm.org/D466 diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -1440,7 +1440,7 @@ class TTest(Test): conditions = [ c for c in m.group(2).split(b' ')] - if not self._hghave(conditions)[0]: + if not self._iftest(conditions): optional.append(i) i += 1 @@ -1474,7 +1474,7 @@ class TTest(Test): if m: conditions = [c for c in m.group(2).split(b' ')] - if self._hghave(conditions)[0]: + if self._iftest(conditions): # Don't append as optional line continue else: @@ -1555,7 +1555,7 @@ class TTest(Test): conditions = [c for c in m.group(2).split(b' ')] el = m.group(1) + b"\n" - if not self._hghave(conditions)[0]: + if not self._iftest(conditions): retry = "retry" # Not required by listed features if el.endswith(b" (esc)\n"): diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t --- a/tests/test-run-tests.t +++ b/tests/test-run-tests.t @@ -823,6 +823,20 @@ When "#testcases" is used in .t files 2 #endif + $ cat >> test-cases.t <<'EOF' + > #if a + > $ NAME=A + > #else + > $ NAME=B + > #endif + > $ echo $NAME + > A (a !) + > B (b !) + > EOF + $ rt test-cases.t + .. + # Ran 2 tests, 0 skipped, 0 failed. + $ rm test-cases.t (reinstall)