def test_duplicate_key(tmpdir): """Test pyflakes is working.""" p = tmpdir.join("foo.py") p.write('"""Docstring."""\n\naaa = {1: 5, 1: 6}\n') result = lint(p) assert result == [ LinterMessage( tool="pyflakes", message_id="W999", filename=str(p), lineno=3, charno=1, message="dictionary key 1 repeated with different values", extramessage="", ), LinterMessage( tool="flake8", message_id="F601", filename=str(p), lineno=3, charno=8, message="dictionary key 1 repeated with different values", extramessage="", ), LinterMessage( tool="flake8", message_id="F601", filename=str(p), lineno=3, charno=14, message="dictionary key 1 repeated with different values", extramessage="", ), ]
def test_str_message(): msg = LinterMessage( tool="foo", message_id="bar", filename="baz", lineno=1, charno=2, message="msg)", extramessage="extra msg", ) assert str(msg) == "baz:1:2: War [foo] msg) (extra msg)"
def test_lint_myself(): """Test no lint message for this project.""" source_dir = Path("python_dev_tools") print() results = [] for python_file in source_dir.rglob("*.py"): result = lint(python_file, all_warnings=True) print(python_file, result) results.extend(result) assert results == [ LinterMessage( tool="flake8", message_id="S404", filename="python_dev_tools/linters/common.py", lineno=4, charno=1, message= "Consider possible security implications associated with subprocess module.", extramessage="", ), LinterMessage( tool="flake8", message_id="T101", filename="python_dev_tools/linters/common.py", lineno=10, charno=3, message="fixme found (TODO)", extramessage="", ), LinterMessage( tool="flake8", message_id="S603", filename="python_dev_tools/linters/common.py", lineno=122, charno=1, message="subprocess call - check for execution of untrusted input.", extramessage="", ), ]
def test_no_docstring(tmpdir): p = tmpdir.join("foo.py") p.write("a = 3\n") result = lint(p) assert result == [ LinterMessage( tool="pydocstyle", message_id="D100", filename=str(p), lineno=1, charno=1, message="Missing docstring in public module", extramessage="at module level", ) ]
def test_long_line(tmpdir): p = tmpdir.join("foo.py") p.write('"""Docstring."""\n\n"' + 78 * "#" + '"\n') result = lint(p) assert result == [ LinterMessage( tool="pycodestyle", message_id="E501", filename=str(p), lineno=3, charno=80, message="line too long (80 > 79 characters)", extramessage="", ) ]
def test_complexity(tmpdir): """Test McCabe is working.""" p = tmpdir.join("foo.py") file_content = '"""Docstring."""\n\n' file_content += dedent(""" elements = [open(str(i)) for i in range(10)] def foo(): \"\"\"Docstring.\"\"\" if elements[0]: aaa = 1 elif elements[1]: aaa = 1 elif elements[2]: aaa = 1 elif elements[3]: aaa = 1 elif elements[4]: aaa = 1 elif elements[5]: aaa = 1 elif elements[6]: aaa = 1 elif elements[7]: aaa = 1 elif elements[8]: aaa = 1 elif elements[9]: aaa = 1 print(aaa) """) p.write(file_content) result = lint(p) assert result == [ LinterMessage( tool="McCabe", message_id="C901", filename=str(p), lineno=7, charno=0, message="too complex: 'foo' 11", extramessage="", ) ]