##// END OF EJS Templates
util: make new timedcmstats class Python 3 compatible
util: make new timedcmstats class Python 3 compatible

File last commit:

r38572:f83600ef default
r38848:9d49bb11 default
Show More
test-run-tests.py
108 lines | 2.8 KiB | text/x-python | PythonLexer
/ tests / test-run-tests.py
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 """test line matching with some failing examples and some which warn
run-test.t only checks positive matches and can not see warnings
(both by design)
"""
Pulkit Goyal
tests: make test-run-tests use absolute_import
r28917 from __future__ import absolute_import, print_function
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
Pulkit Goyal
tests: make test-run-tests use absolute_import
r28917 import doctest
import os
import re
Simon Heimberg
tests: fix test-run-tests.py on OS X...
r20284 # this is hack to make sure no escape characters are inserted into the output
if 'TERM' in os.environ:
del os.environ['TERM']
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 run_tests = __import__('run-tests')
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 def prn(ex):
m = ex.args[0]
if isinstance(m, str):
print(m)
else:
print(m.decode('utf-8'))
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 def lm(expected, output):
r"""check if output matches expected
does it generally work?
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'H*e (glob)\n', b'Here\n')
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 True
fail on bad test data
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> try: lm(b'a\n',b'a')
... except AssertionError as ex: print(ex)
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 missing newline
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> try: lm(b'single backslash\n', b'single \backslash\n')
... except AssertionError as ex: prn(ex)
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 single backslash or unknown char
"""
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 assert (expected.endswith(b'\n')
and output.endswith(b'\n')), 'missing newline'
assert not re.search(br'[^ \w\\/\r\n()*?]', expected + output), \
b'single backslash or unknown char'
Augie Fackler
tests: fix up test-run-tests failures on Python 3.6...
r33676 test = run_tests.TTest(b'test-run-test.t', b'.', b'.')
Martin von Zweigbergk
tests: don't allow reodering of glob/re lines across non-glob/re lines...
r38572 match, exact = test.linematch(expected, output)
Simon Heimberg
run-tests: suggest to append glob when only path sep does not match...
r20273 if isinstance(match, str):
return 'special: ' + match
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 elif isinstance(match, bytes):
return 'special: ' + match.decode('utf-8')
Simon Heimberg
run-tests: suggest to append glob when only path sep does not match...
r20273 else:
return bool(match) # do not return match object
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
def wintests():
r"""test matching like running on windows
enable windows matching on any os
>>> _osaltsep = os.altsep
>>> os.altsep = True
Matt Harbison
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too...
r35382 >>> _osname = os.name
>>> os.name = 'nt'
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
valid match on windows
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'g/a*/d (glob)\n', b'g\\abc/d\n')
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 True
direct matching, glob unnecessary
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'g/b (glob)\n', b'g/b\n')
Simon Heimberg
run-tests: print more information on unnecessary glob matching...
r20274 'special: -glob'
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
missing glob
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d/fg\n')
Matt Harbison
run-tests: accept '\' vs '/' path differences without '(glob)'...
r35383 True
Matt Harbison
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too...
r35382 >>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d\\fg\r\n')
Matt Harbison
run-tests: accept '\' vs '/' path differences without '(glob)'...
r35383 True
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
restore os.altsep
>>> os.altsep = _osaltsep
Matt Harbison
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too...
r35382 >>> os.name = _osname
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 """
Simon Heimberg
tests: fix test-run-tests.py on OS X...
r20284 pass
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
def otherostests():
r"""test matching like running on non-windows os
disable windows matching on any os
>>> _osaltsep = os.altsep
>>> os.altsep = False
Matt Harbison
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too...
r35382 >>> _osname = os.name
>>> os.name = 'nt'
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271
backslash does not match slash
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'h/a* (glob)\n', b'h\\ab\n')
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 False
direct matching glob can not be recognized
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'h/b (glob)\n', b'h/b\n')
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 True
missing glob can not not be recognized
Augie Fackler
test-run-tests: fix for Python 3.5...
r25061 >>> lm(b'/h/c/df/g/\n', b'\\h/c\\df/g\\\n')
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 False
restore os.altsep
>>> os.altsep = _osaltsep
Matt Harbison
run-tests: suggest a (glob) for os.path.sep mismatches with '\r\n' EOL too...
r35382 >>> os.name = _osname
Simon Heimberg
tests: new test for line matching functions in run-tests...
r20271 """
pass
if __name__ == '__main__':
doctest.testmod()