Mercurial > hg
comparison tests/run-tests.py @ 33695:eeed23508383
run-tests: drop required (feature !) style lines when the output is missing
Essentially, these were acting as a verbose (?) flag, since they weren't being
dropped when required. Foozy has a nice description [1]. Basically, a couple
more places needed to check the features before treating it as optional.
I don't like how test-run-tests.py had to be hacked, but _hghave() can't be made
a static method. The test change was a change while developing `debugssl`,
prior to tightening up the cases where the message is printed, that this fix
would have caught.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/101941.html
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 18 Jul 2017 00:12:44 -0400 |
parents | cc96449f00c9 |
children | 1fa6023240f4 |
comparison
equal
deleted
inserted
replaced
33694:93422d0068f8 | 33695:eeed23508383 |
---|---|
1357 i = 0 | 1357 i = 0 |
1358 optional = [] | 1358 optional = [] |
1359 while i < len(els): | 1359 while i < len(els): |
1360 el = els[i] | 1360 el = els[i] |
1361 | 1361 |
1362 r = TTest.linematch(el, lout) | 1362 r = self.linematch(el, lout) |
1363 if isinstance(r, str): | 1363 if isinstance(r, str): |
1364 if r == '+glob': | 1364 if r == '+glob': |
1365 lout = el[:-1] + ' (glob)\n' | 1365 lout = el[:-1] + ' (glob)\n' |
1366 r = '' # Warn only this line. | 1366 r = '' # Warn only this line. |
1367 elif r == '-glob': | 1367 elif r == '-glob': |
1383 else: | 1383 else: |
1384 m = optline.match(el) | 1384 m = optline.match(el) |
1385 if m: | 1385 if m: |
1386 conditions = [c for c in m.group(2).split(' ')] | 1386 conditions = [c for c in m.group(2).split(' ')] |
1387 | 1387 |
1388 if self._hghave(conditions)[0]: | 1388 if not self._hghave(conditions)[0]: |
1389 lout = el | |
1390 else: | |
1391 optional.append(i) | 1389 optional.append(i) |
1392 | 1390 |
1393 i += 1 | 1391 i += 1 |
1394 | 1392 |
1395 if r: | 1393 if r: |
1414 else: | 1412 else: |
1415 # clean up any optional leftovers | 1413 # clean up any optional leftovers |
1416 while expected.get(pos, None): | 1414 while expected.get(pos, None): |
1417 el = expected[pos].pop(0) | 1415 el = expected[pos].pop(0) |
1418 if el: | 1416 if el: |
1419 if (not optline.match(el) | 1417 if not el.endswith(b" (?)\n"): |
1420 and not el.endswith(b" (?)\n")): | 1418 m = optline.match(el) |
1421 break | 1419 if m: |
1420 conditions = [c for c in m.group(2).split(' ')] | |
1421 | |
1422 if self._hghave(conditions)[0]: | |
1423 # Don't append as optional line | |
1424 continue | |
1425 else: | |
1426 break | |
1422 postout.append(b' ' + el) | 1427 postout.append(b' ' + el) |
1423 | 1428 |
1424 if lcmd: | 1429 if lcmd: |
1425 # Add on last return code. | 1430 # Add on last return code. |
1426 ret = int(lcmd.split()[1]) | 1431 ret = int(lcmd.split()[1]) |
1479 res += b'[/\\\\]' | 1484 res += b'[/\\\\]' |
1480 else: | 1485 else: |
1481 res += re.escape(c) | 1486 res += re.escape(c) |
1482 return TTest.rematch(res, l) | 1487 return TTest.rematch(res, l) |
1483 | 1488 |
1484 @staticmethod | 1489 def linematch(self, el, l): |
1485 def linematch(el, l): | |
1486 retry = False | 1490 retry = False |
1487 if el == l: # perfect match (fast) | 1491 if el == l: # perfect match (fast) |
1488 return True | 1492 return True |
1489 if el: | 1493 if el: |
1490 if el.endswith(b" (?)\n"): | 1494 if el.endswith(b" (?)\n"): |
1491 retry = "retry" | 1495 retry = "retry" |
1492 el = el[:-5] + b"\n" | 1496 el = el[:-5] + b"\n" |
1493 else: | 1497 else: |
1494 m = optline.match(el) | 1498 m = optline.match(el) |
1495 if m: | 1499 if m: |
1500 conditions = [c for c in m.group(2).split(' ')] | |
1501 | |
1496 el = m.group(1) + b"\n" | 1502 el = m.group(1) + b"\n" |
1497 retry = "retry" | 1503 if not self._hghave(conditions)[0]: |
1504 retry = "retry" # Not required by listed features | |
1498 | 1505 |
1499 if el.endswith(b" (esc)\n"): | 1506 if el.endswith(b" (esc)\n"): |
1500 if PYTHON3: | 1507 if PYTHON3: |
1501 el = el[:-7].decode('unicode_escape') + '\n' | 1508 el = el[:-7].decode('unicode_escape') + '\n' |
1502 el = el.encode('utf-8') | 1509 el = el.encode('utf-8') |