mirror of
https://github.com/facebook/sapling.git
synced 2024-10-16 19:57:18 +03:00
584656dff3
Summary: Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`. Then run `arc lint` again so some other autofixers like spellchecker etc. looked at the code base. Manually accept the changes whenever they make sense, or use a workaround (ex. changing "dict()" to "dict constructor") where autofix is false positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less interesting to fix (hgsubversion tests), or cannot be fixed without breaking OSS build (FBPYTHON4). Conflicted linters (test-check-module-imports.t, part of test-check-code.t, test-check-pyflakes.t) are removed or disabled. Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed. An issue of the auto-formatter is lines are no longer guarnateed to be <= 80 chars. But that seems less important comparing with the benefit auto-formatter provides. As we're here, also remove test-check-py3-compat.t, as it is currently broken if `PYTHON3=/bin/python3` is set. Reviewed By: wez, phillco, simpkins, pkaush, singhsrb Differential Revision: D8173629 fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
116 lines
2.8 KiB
Python
116 lines
2.8 KiB
Python
"""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)
|
|
"""
|
|
from __future__ import absolute_import, print_function
|
|
|
|
import doctest
|
|
import os
|
|
import re
|
|
|
|
|
|
# this is hack to make sure no escape characters are inserted into the output
|
|
if "TERM" in os.environ:
|
|
del os.environ["TERM"]
|
|
run_tests = __import__("run-tests")
|
|
|
|
|
|
def prn(ex):
|
|
m = ex.args[0]
|
|
if isinstance(m, str):
|
|
print(m)
|
|
else:
|
|
print(m.decode("utf-8"))
|
|
|
|
|
|
def lm(expected, output):
|
|
r"""check if output matches expected
|
|
|
|
does it generally work?
|
|
>>> lm(b'H*e (glob)\n', b'Here\n')
|
|
True
|
|
|
|
fail on bad test data
|
|
>>> try: lm(b'a\n',b'a')
|
|
... except AssertionError as ex: print(ex)
|
|
missing newline
|
|
>>> try: lm(b'single backslash\n', b'single \backslash\n')
|
|
... except AssertionError as ex: prn(ex)
|
|
single backslash or unknown char
|
|
"""
|
|
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"
|
|
test = run_tests.TTest(b"test-run-test.t", b".", b".")
|
|
match = test.linematch(expected, output)
|
|
if isinstance(match, str):
|
|
return "special: " + match
|
|
elif isinstance(match, bytes):
|
|
return "special: " + match.decode("utf-8")
|
|
else:
|
|
return bool(match) # do not return match object
|
|
|
|
|
|
def wintests():
|
|
r"""test matching like running on windows
|
|
|
|
enable windows matching on any os
|
|
>>> _osaltsep = os.altsep
|
|
>>> os.altsep = True
|
|
>>> _osname = os.name
|
|
>>> os.name = 'nt'
|
|
|
|
valid match on windows
|
|
>>> lm(b'g/a*/d (glob)\n', b'g\\abc/d\n')
|
|
True
|
|
|
|
direct matching, glob unnecessary
|
|
>>> lm(b'g/b (glob)\n', b'g/b\n')
|
|
'special: -glob'
|
|
|
|
missing glob
|
|
>>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d/fg\n')
|
|
True
|
|
>>> lm(b'/g/c/d/fg\n', b'\\g\\c\\d\\fg\r\n')
|
|
True
|
|
|
|
restore os.altsep
|
|
>>> os.altsep = _osaltsep
|
|
>>> os.name = _osname
|
|
"""
|
|
pass
|
|
|
|
|
|
def otherostests():
|
|
r"""test matching like running on non-windows os
|
|
|
|
disable windows matching on any os
|
|
>>> _osaltsep = os.altsep
|
|
>>> os.altsep = False
|
|
>>> _osname = os.name
|
|
>>> os.name = 'nt'
|
|
|
|
backslash does not match slash
|
|
>>> lm(b'h/a* (glob)\n', b'h\\ab\n')
|
|
False
|
|
|
|
direct matching glob can not be recognized
|
|
>>> lm(b'h/b (glob)\n', b'h/b\n')
|
|
True
|
|
|
|
missing glob can not not be recognized
|
|
>>> lm(b'/h/c/df/g/\n', b'\\h/c\\df/g\\\n')
|
|
False
|
|
|
|
restore os.altsep
|
|
>>> os.altsep = _osaltsep
|
|
>>> os.name = _osname
|
|
"""
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
doctest.testmod()
|