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')