[PATCH RFC] run-tests: support per-line conditional output in tests
Matt Harbison
mharbison72 at gmail.com
Tue Apr 4 23:58:05 EDT 2017
On Tue, 04 Apr 2017 00:01:55 -0400, Matt Harbison <mharbison72 at gmail.com>
wrote:
> # 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.
Actually, this is an existing problem with '(?)' too. Changing (xxx ?) to
(?) without the *.py changes yields the same behavior.
> 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