[PATCH RFC] run-tests: support per-line conditional output in tests
Matt Harbison
mharbison72 at gmail.com
Tue Apr 4 04:01:55 UTC 2017
# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1491275149 14400
# Mon Apr 03 23:05:49 2017 -0400
# Node ID cfefdb4546a3a38918303ed43447ebe93051de51
# Parent 81abd0d12c8641df666d356f6033d84cd55977a8
run-tests: support per-line conditional output in tests
Duplicating entire tests just because the output is different is both error
prone and can make the tests harder to read. This harnesses the existing '(?)'
infrastructure, both to improve readability, and because it seemed like the path
of least resistance.
I think this syntax seems natural. For example, this:
2 r4/.hg/cache/checkisexec (execbit ?)
pretty naturally reads as "checkisexec, if execbit". In some ways though, this
inverts the meaning of '?'. For '(?)', the line is purely optional. In the
example, it is mandatory iff execbit. Otherwise, it is carried forward as
optional, to preserve the test output. I tried it the other way, (listing
'no-exec' in the example), but that is too confusing to read.
The only thing that I haven't figured out yet is why the '(glob)' interferes
in the first hardlink.t hunk. If it is kept, that line falls to the bottom of
the (xxx ?) sequence on Windows. As it is, this test runs cleanly on Linux.
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -497,6 +497,9 @@
# sans \t, \n and \r
CDATA_EVIL = re.compile(br"[\000-\010\013\014\016-\037]")
+#optline = re.compile(b'(.*) \(([a-z0-9 +.]*) \?\)\n$')
+optline = re.compile(b'(.+) \((.+?) \?\)\n$')
+
def cdatasafe(data):
"""Make a string safe to include in a CDATA block.
@@ -1271,8 +1274,19 @@
if r:
els.pop(i)
break
- if el and el.endswith(b" (?)\n"):
- optional.append(i)
+ if el:
+ if el.endswith(b" (?)\n"):
+ optional.append(i)
+ else:
+ m = optline.match(el)
+ if m:
+ conditions = [c for c in m.group(2).split(' ')]
+
+ if self._hghave(conditions)[0]:
+ lout = el
+ else:
+ optional.append(i)
+
i += 1
if r:
@@ -1298,8 +1312,10 @@
# clean up any optional leftovers
while expected.get(pos, None):
el = expected[pos].pop(0)
- if el and not el.endswith(b" (?)\n"):
- break
+ if el:
+ if (not optline.match(el)
+ and not el.endswith(b" (?)\n")):
+ break
postout.append(b' ' + el)
if lcmd:
@@ -1371,6 +1387,12 @@
if el.endswith(b" (?)\n"):
retry = "retry"
el = el[:-5] + b"\n"
+ else:
+ m = optline.match(el)
+ if m:
+ el = m.group(1) + b"\n"
+ retry = "retry"
+
if el.endswith(b" (esc)\n"):
if PYTHON3:
el = el[:-7].decode('unicode_escape') + '\n'
diff --git a/tests/test-clone.t b/tests/test-clone.t
--- a/tests/test-clone.t
+++ b/tests/test-clone.t
@@ -31,10 +31,10 @@
default 10:a7949464abda
$ ls .hg/cache
branch2-served
- checkisexec
- checklink
- checklink-target
- checknoexec
+ checkisexec (execbit ?)
+ checklink (symlink ?)
+ checklink-target (symlink ?)
+ checknoexec (execbit ?)
rbc-names-v1
rbc-revs-v1
@@ -49,9 +49,9 @@
$ ls .hg/cache
branch2-served
- checkisexec
- checklink
- checklink-target
+ checkisexec (execbit ?)
+ checklink (symlink ?)
+ checklink-target (symlink ?)
$ cat a
a
diff --git a/tests/test-fileset.t b/tests/test-fileset.t
--- a/tests/test-fileset.t
+++ b/tests/test-fileset.t
@@ -441,10 +441,10 @@
M b2
A 1k
A 2k
- A b2link
+ A b2link (no-windows ?)
A bin
A c1
- A con.xml
+ A con.xml (no-windows ?)
R a2
$ hg status --change 2
M b2
@@ -452,10 +452,10 @@
M b2
A 1k
A 2k
- A b2link
+ A b2link (no-windows ?)
A bin
A c1
- A con.xml
+ A con.xml (no-windows ?)
R a2
$ hg status --change 4
A .hgsub
@@ -464,7 +464,7 @@
A dos
A mac
A mixed
- R con.xml
+ R con.xml (no-windows ?)
! a1
? b2.orig
? c3
@@ -551,9 +551,9 @@
------------
$ hg status --removed --rev 4
- R con.xml
+ R con.xml (no-windows ?)
$ fileset "status(4, 'wdir()', removed())"
- con.xml
+ con.xml (no-windows ?)
$ hg status --removed --rev 2
R a2
@@ -585,19 +585,19 @@
A .hgsubstate
A 1k
A 2k
- A b2link
+ A b2link (no-windows ?)
A bin
A c1
- A con.xml
+ A con.xml (no-windows ?)
$ fileset "status('0:1', '3:4', added())"
.hgsub
.hgsubstate
1k
2k
- b2link
+ b2link (no-windows ?)
bin
c1
- con.xml
+ con.xml (no-windows ?)
tests with empty value
----------------------
diff --git a/tests/test-hardlinks.t b/tests/test-hardlinks.t
--- a/tests/test-hardlinks.t
+++ b/tests/test-hardlinks.t
@@ -211,10 +211,10 @@
2 r4/.hg/00changelog.i
2 r4/.hg/branch
2 r4/.hg/cache/branch2-served
- 2 r4/.hg/cache/checkisexec
+ 2 r4/.hg/cache/checkisexec (execbit ?)
3 r4/.hg/cache/checklink (?)
- ? r4/.hg/cache/checklink-target (glob)
- 2 r4/.hg/cache/checknoexec
+ ? r4/.hg/cache/checklink-target (glob) (symlink ?)
+ 2 r4/.hg/cache/checknoexec (execbit ?)
2 r4/.hg/cache/rbc-names-v1
2 r4/.hg/cache/rbc-revs-v1
2 r4/.hg/dirstate
@@ -251,9 +251,9 @@
2 r4/.hg/00changelog.i
1 r4/.hg/branch
2 r4/.hg/cache/branch2-served
- 2 r4/.hg/cache/checkisexec
- 2 r4/.hg/cache/checklink-target
- 2 r4/.hg/cache/checknoexec
+ 2 r4/.hg/cache/checkisexec (execbit ?)
+ 2 r4/.hg/cache/checklink-target (symlink ?)
+ 2 r4/.hg/cache/checknoexec (execbit ?)
2 r4/.hg/cache/rbc-names-v1
2 r4/.hg/cache/rbc-revs-v1
1 r4/.hg/dirstate
diff --git a/tests/test-tags.t b/tests/test-tags.t
--- a/tests/test-tags.t
+++ b/tests/test-tags.t
@@ -672,9 +672,9 @@
$ ls tagsclient/.hg/cache
branch2-served
- checkisexec
- checklink
- checklink-target
+ checkisexec (execbit ?)
+ checklink (symlink ?)
+ checklink-target (symlink ?)
hgtagsfnodes1
rbc-names-v1
rbc-revs-v1
@@ -699,9 +699,9 @@
$ ls tagsclient/.hg/cache
branch2-served
- checkisexec
- checklink
- checklink-target
+ checkisexec (execbit ?)
+ checklink (symlink ?)
+ checklink-target (symlink ?)
hgtagsfnodes1
rbc-names-v1
rbc-revs-v1
More information about the Mercurial-devel
mailing list