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,12 @@ def vlog(*msg): # sans \t, \n and \r CDATA_EVIL = re.compile(br"[\000-\010\013\014\016-\037]") +# Match feature conditionalized output lines in the form, capturing the feature +# list in group 2, and the preceeding line output in group 1: +# +# output..output (feature !)\n +optline = re.compile(b'(.+) \((.+?) !\)\n$') + def cdatasafe(data): """Make a string safe to include in a CDATA block. @@ -1271,8 +1277,19 @@ class TTest(Test): 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 +1315,10 @@ class TTest(Test): # 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 +1390,12 @@ class TTest(Test): 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-run-tests.t b/tests/test-run-tests.t --- a/tests/test-run-tests.t +++ b/tests/test-run-tests.t @@ -39,6 +39,19 @@ error paths $ rm hg #endif +Features for testing optional lines +=================================== + + $ cat > hghaveaddon.py < import hghave + > @hghave.check("custom", "custom hghave feature") + > def has_custom(): + > return True + > @hghave.check("missing", "missing hghave feature") + > def has_missing(): + > return False + > EOF + an empty test ======================= @@ -67,6 +80,13 @@ a succesful test > def (?) > 456 (?) > xyz + > $ printf 'zyx\nwvu\ntsr\n' + > abc (?) + > zyx (custom !) + > wvu + > no_print (no-custom !) + > tsr (no-missing !) + > missing (missing !) > EOF $ rt @@ -341,6 +361,12 @@ Running In Debug Mode xyz + echo *SALT* 15 0 (glob) *SALT* 15 0 (glob) + + printf *zyx\nwvu\ntsr\n* (glob) + zyx + wvu + tsr + + echo *SALT* 22 0 (glob) + *SALT* 22 0 (glob) . # Ran 2 tests, 0 skipped, 0 warned, 0 failed.