576 |
576 |
577 def pytest(test, wd, options, replacements, env): |
577 def pytest(test, wd, options, replacements, env): |
578 py3kswitch = options.py3k_warnings and ' -3' or '' |
578 py3kswitch = options.py3k_warnings and ' -3' or '' |
579 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test) |
579 cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test) |
580 vlog("# Running", cmd) |
580 vlog("# Running", cmd) |
|
581 if os.name == 'nt': |
|
582 replacements.append((r'\r\n', '\n')) |
581 return run(cmd, wd, options, replacements, env) |
583 return run(cmd, wd, options, replacements, env) |
582 |
584 |
583 needescape = re.compile(r'[\x00-\x08\x0b-\x1f\x7f-\xff]').search |
585 needescape = re.compile(r'[\x00-\x08\x0b-\x1f\x7f-\xff]').search |
584 escapesub = re.compile(r'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub |
586 escapesub = re.compile(r'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub |
585 escapemap = dict((chr(i), r'\x%02x' % i) for i in range(256)) |
587 escapemap = dict((chr(i), r'\x%02x' % i) for i in range(256)) |
590 return escapesub(escapef, s) |
592 return escapesub(escapef, s) |
591 |
593 |
592 def rematch(el, l): |
594 def rematch(el, l): |
593 try: |
595 try: |
594 # use \Z to ensure that the regex matches to the end of the string |
596 # use \Z to ensure that the regex matches to the end of the string |
|
597 if os.name == 'nt': |
|
598 return re.match(el + r'\r?\n\Z', l) |
595 return re.match(el + r'\n\Z', l) |
599 return re.match(el + r'\n\Z', l) |
596 except re.error: |
600 except re.error: |
597 # el is an invalid regex |
601 # el is an invalid regex |
598 return False |
602 return False |
599 |
603 |
627 if el == l: # perfect match (fast) |
631 if el == l: # perfect match (fast) |
628 return True |
632 return True |
629 if el: |
633 if el: |
630 if el.endswith(" (esc)\n"): |
634 if el.endswith(" (esc)\n"): |
631 el = el[:-7].decode('string-escape') + '\n' |
635 el = el[:-7].decode('string-escape') + '\n' |
|
636 if el == l or os.name == 'nt' and el[:-1] + '\r\n' == l: |
|
637 return True |
632 if (el.endswith(" (re)\n") and rematch(el[:-6], l) or |
638 if (el.endswith(" (re)\n") and rematch(el[:-6], l) or |
633 el.endswith(" (glob)\n") and globmatch(el[:-8], l)): |
639 el.endswith(" (glob)\n") and globmatch(el[:-8], l)): |
634 return True |
640 return True |
635 return False |
641 return False |
636 |
642 |
945 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or |
951 (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or |
946 c in '/\\' and r'[/\\]' or |
952 c in '/\\' and r'[/\\]' or |
947 c.isdigit() and c or |
953 c.isdigit() and c or |
948 '\\' + c |
954 '\\' + c |
949 for c in testtmp), '$TESTTMP')) |
955 for c in testtmp), '$TESTTMP')) |
950 replacements.append((r'\r\n', '\n')) |
|
951 else: |
956 else: |
952 replacements.append((re.escape(testtmp), '$TESTTMP')) |
957 replacements.append((re.escape(testtmp), '$TESTTMP')) |
953 |
958 |
954 env = createenv(options, testtmp, threadtmp, port) |
959 env = createenv(options, testtmp, threadtmp, port) |
955 createhgrc(env['HGRCPATH'], options) |
960 createhgrc(env['HGRCPATH'], options) |