# HG changeset patch # User Mads Kiilerich # Date 2012-10-15 00:33:12 # Node ID af7c6bc48d8d7a58c621e03bb98b1d5f5e0da53b # Parent 072812e9f5701874ebe8cdae0136c3abad0bf905 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. diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -494,8 +494,10 @@ def stringescape(s): def rematch(el, l): try: - # ensure that the regex matches to the end of the string - return re.match(el + r'\Z', l) + # use \Z to ensure that the regex matches to the end of the string + if os.name == 'nt': + return re.match(el + r'\r?\n\Z', l) + return re.match(el + r'\n\Z', l) except re.error: # el is an invalid regex return False @@ -525,12 +527,12 @@ def linematch(el, l): if el == l: # perfect match (fast) return True if (el and - (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l) or - el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', l) or + (el.endswith(" (re)\n") and rematch(el[:-6], l) or + el.endswith(" (glob)\n") and globmatch(el[:-8], l) or el.endswith(" (esc)\n") and (el[:-7].decode('string-escape') + '\n' == l or - el[:-7].decode('string-escape').replace('\r', '') + - '\n' == l and os.name == 'nt'))): + os.name == 'nt' and + el[:-7].decode('string-escape') + '\n' == l))): return True return False @@ -885,7 +887,6 @@ def runone(options, test): (r':%s\b' % (options.port + 2), ':$HGPORT2'), ] if os.name == 'nt': - replacements.append((r'\r\n', '\n')) replacements.append( (''.join(c.isalpha() and '[%s%s]' % (c.lower(), c.upper()) or c in '/\\' and r'[/\\]' or diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t --- a/tests/test-run-tests.t +++ b/tests/test-run-tests.t @@ -52,6 +52,16 @@ Literal match ending in " (re)": $ echo 'foo (re)' foo (re) +Windows: \r\n is handled like \n and can be escaped: + +#if windows + $ printf 'crlf\r\ncr\r\tcrlf\r\ncrcrlf\r\r\n' + crlf + cr\r (no-eol) (esc) + \tcrlf (esc) + crcrlf\r (esc) +#endif + testing hghave $ "$TESTDIR/hghave" true