test-run-tests.py
116 lines
| 2.8 KiB
| text/x-python
|
PythonLexer
/ tests / test-run-tests.py
Simon Heimberg
|
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
|
r28917 | from __future__ import absolute_import, print_function | ||
Simon Heimberg
|
r20271 | |||
Pulkit Goyal
|
r28917 | import doctest | ||
import os | ||||
import re | ||||
Augie Fackler
|
r43346 | |||
Simon Heimberg
|
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
|
r20271 | run_tests = __import__('run-tests') | ||
Augie Fackler
|
r43346 | |||
Augie Fackler
|
r25061 | def prn(ex): | ||
m = ex.args[0] | ||||
if isinstance(m, str): | ||||
print(m) | ||||
else: | ||||
print(m.decode('utf-8')) | ||||
Augie Fackler
|
r43346 | |||
Simon Heimberg
|
r20271 | def lm(expected, output): | ||
r"""check if output matches expected | ||||
does it generally work? | ||||
Augie Fackler
|
r25061 | >>> lm(b'H*e (glob)\n', b'Here\n') | ||
Simon Heimberg
|
r20271 | True | ||
fail on bad test data | ||||
Augie Fackler
|
r25061 | >>> try: lm(b'a\n',b'a') | ||
... except AssertionError as ex: print(ex) | ||||
Simon Heimberg
|
r20271 | missing newline | ||
Augie Fackler
|
r25061 | >>> try: lm(b'single backslash\n', b'single \backslash\n') | ||
... except AssertionError as ex: prn(ex) | ||||
Simon Heimberg
|
r20271 | single backslash or unknown char | ||
""" | ||||
Augie Fackler
|
r43346 | 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
|
r33676 | test = run_tests.TTest(b'test-run-test.t', b'.', b'.') | ||
Martin von Zweigbergk
|
r38572 | match, exact = test.linematch(expected, output) | ||
Simon Heimberg
|
r20273 | if isinstance(match, str): | ||
return 'special: ' + match | ||||
Augie Fackler
|
r25061 | elif isinstance(match, bytes): | ||
return 'special: ' + match.decode('utf-8') | ||||
Simon Heimberg
|
r20273 | else: | ||
Augie Fackler
|
r43346 | return bool(match) # do not return match object | ||
Simon Heimberg
|
r20271 | |||
def wintests(): | ||||
r"""test matching like running on windows | ||||
enable windows matching on any os | ||||
>>> _osaltsep = os.altsep | ||||
>>> os.altsep = True | ||||
Matt Harbison
|
r35382 | >>> _osname = os.name | ||
>>> os.name = 'nt' | ||||
Simon Heimberg
|
r20271 | |||
valid match on windows | ||||
Augie Fackler
|
r25061 | >>> lm(b'g/a*/d (glob)\n', b'g\\abc/d\n') | ||
Simon Heimberg
|
r20271 | True | ||
direct matching, glob unnecessary | ||||
Augie Fackler
|
r25061 | >>> lm(b'g/b (glob)\n', b'g/b\n') | ||
Simon Heimberg
|
r20274 | 'special: -glob' | ||
Simon Heimberg
|
r20271 | |||
missing glob | ||||
Augie Fackler
|
r25061 | >>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d/fg\n') | ||
Matt Harbison
|
r35383 | True | ||
Matt Harbison
|
r35382 | >>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d\\fg\r\n') | ||
Matt Harbison
|
r35383 | True | ||
Simon Heimberg
|
r20271 | |||
restore os.altsep | ||||
>>> os.altsep = _osaltsep | ||||
Matt Harbison
|
r35382 | >>> os.name = _osname | ||
Simon Heimberg
|
r20271 | """ | ||
Simon Heimberg
|
r20284 | pass | ||
Simon Heimberg
|
r20271 | |||
Augie Fackler
|
r43346 | |||
Simon Heimberg
|
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
|
r35382 | >>> _osname = os.name | ||
>>> os.name = 'nt' | ||||
Simon Heimberg
|
r20271 | |||
backslash does not match slash | ||||
Augie Fackler
|
r25061 | >>> lm(b'h/a* (glob)\n', b'h\\ab\n') | ||
Simon Heimberg
|
r20271 | False | ||
direct matching glob can not be recognized | ||||
Augie Fackler
|
r25061 | >>> lm(b'h/b (glob)\n', b'h/b\n') | ||
Simon Heimberg
|
r20271 | True | ||
missing glob can not not be recognized | ||||
Augie Fackler
|
r25061 | >>> lm(b'/h/c/df/g/\n', b'\\h/c\\df/g\\\n') | ||
Simon Heimberg
|
r20271 | False | ||
restore os.altsep | ||||
>>> os.altsep = _osaltsep | ||||
Matt Harbison
|
r35382 | >>> os.name = _osname | ||
Simon Heimberg
|
r20271 | """ | ||
pass | ||||
Augie Fackler
|
r43346 | |||
Simon Heimberg
|
r20271 | if __name__ == '__main__': | ||
doctest.testmod() | ||||