run-tests: make per-line condition support testcase names
authorJun Wu <quark@fb.com>
Sun, 20 Aug 2017 09:46:27 -0700
changeset 33952 6cc8f848b4c3
parent 33951 39d253d088a9
child 33953 8e472f3b7c63
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
tests/run-tests.py
tests/test-run-tests.t
--- a/tests/run-tests.py	Fri Aug 25 13:49:17 2017 -0700
+++ b/tests/run-tests.py	Sun Aug 20 09:46:27 2017 -0700
@@ -1440,7 +1440,7 @@
                                 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 @@
                             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 @@
                     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"):
--- a/tests/test-run-tests.t	Fri Aug 25 13:49:17 2017 -0700
+++ b/tests/test-run-tests.t	Sun Aug 20 09:46:27 2017 -0700
@@ -823,6 +823,20 @@
     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)