diff -r ff60498211f3 -r 4eec2f04a672 tests/run-tests.py --- a/tests/run-tests.py Wed Apr 05 22:59:44 2017 -0400 +++ b/tests/run-tests.py Wed Apr 05 23:17:27 2017 -0400 @@ -497,6 +497,12 @@ # 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 @@ 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 @@ # 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 @@ 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'