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