Mercurial > public > mercurial-scm > hg
comparison tests/run-tests.py @ 17777:af7c6bc48d8d
run-tests: alternative way of handling \r on Windows
After f71d60da58fb all \r was stripped from output on Windows, and the places
where a \r explicitly was expected it was accepted that it was missing. Ugly
hack.
Instead we now accept that an extra \r might appear at the end of lines on
Windows. That is more to the point and less ugly.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Mon, 15 Oct 2012 02:33:12 +0200 |
parents | 4871c1f343fa |
children | 80fe64581f3a |
comparison
equal
deleted
inserted
replaced
17776:072812e9f570 | 17777:af7c6bc48d8d |
---|---|
492 def stringescape(s): | 492 def stringescape(s): |
493 return escapesub(escapef, s) | 493 return escapesub(escapef, s) |
494 | 494 |
495 def rematch(el, l): | 495 def rematch(el, l): |
496 try: | 496 try: |
497 # ensure that the regex matches to the end of the string | 497 # use \Z to ensure that the regex matches to the end of the string |
498 return re.match(el + r'\Z', l) | 498 if os.name == 'nt': |
499 return re.match(el + r'\r?\n\Z', l) | |
500 return re.match(el + r'\n\Z', l) | |
499 except re.error: | 501 except re.error: |
500 # el is an invalid regex | 502 # el is an invalid regex |
501 return False | 503 return False |
502 | 504 |
503 def globmatch(el, l): | 505 def globmatch(el, l): |
523 | 525 |
524 def linematch(el, l): | 526 def linematch(el, l): |
525 if el == l: # perfect match (fast) | 527 if el == l: # perfect match (fast) |
526 return True | 528 return True |
527 if (el and | 529 if (el and |
528 (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l) or | 530 (el.endswith(" (re)\n") and rematch(el[:-6], l) or |
529 el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', l) or | 531 el.endswith(" (glob)\n") and globmatch(el[:-8], l) or |
530 el.endswith(" (esc)\n") and | 532 el.endswith(" (esc)\n") and |
531 (el[:-7].decode('string-escape') + '\n' == l or | 533 (el[:-7].decode('string-escape') + '\n' == l or |
532 el[:-7].decode('string-escape').replace('\r', '') + | 534 os.name == 'nt' and |
533 '\n' == l and os.name == 'nt'))): | 535 el[:-7].decode('string-escape') + '\n' == l))): |
534 return True | 536 return True |
535 return False | 537 return False |
536 | 538 |
537 def tsttest(test, wd, options, replacements): | 539 def tsttest(test, wd, options, replacements): |
538 # We generate a shell script which outputs unique markers to line | 540 # We generate a shell script which outputs unique markers to line |
883 (r':%s\b' % options.port, ':$HGPORT'), | 885 (r':%s\b' % options.port, ':$HGPORT'), |
884 (r':%s\b' % (options.port + 1), ':$HGPORT1'), | 886 (r':%s\b' % (options.port + 1), ':$HGPORT1'), |
885 (r':%s\b' % (options.port + 2), ':$HGPORT2'), | 887 (r':%s\b' % (options.port + 2), ':$HGPORT2'), |
886 ] | 888 ] |
887 if os.name == 'nt': | 889 if os.name == 'nt': |
888 replacements.append((r'\r\n', '\n')) | |
889 replacements.append( | 890 replacements.append( |
890 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or | 891 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or |
891 c in '/\\' and r'[/\\]' or | 892 c in '/\\' and r'[/\\]' or |
892 c.isdigit() and c or | 893 c.isdigit() and c or |
893 '\\' + c | 894 '\\' + c |