summaryrefslogtreecommitdiffstats
path: root/tools/lint/test/test_flake8.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lint/test/test_flake8.py')
-rw-r--r--tools/lint/test/test_flake8.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/tools/lint/test/test_flake8.py b/tools/lint/test/test_flake8.py
new file mode 100644
index 0000000000..d44e3828ed
--- /dev/null
+++ b/tools/lint/test/test_flake8.py
@@ -0,0 +1,117 @@
+import os
+
+import mozunit
+
+LINTER = "flake8"
+fixed = 0
+
+
+def test_lint_single_file(lint, paths):
+ results = lint(paths("bad.py"))
+ assert len(results) == 2
+ assert results[0].rule == "F401"
+ assert results[0].level == "error"
+ assert results[1].rule == "E501"
+ assert results[1].level == "error"
+ assert results[1].lineno == 5
+
+ # run lint again to make sure the previous results aren't counted twice
+ results = lint(paths("bad.py"))
+ assert len(results) == 2
+
+
+def test_lint_custom_config_ignored(lint, paths):
+ results = lint(paths("custom"))
+ assert len(results) == 2
+
+ results = lint(paths("custom/good.py"))
+ assert len(results) == 2
+
+
+def test_lint_fix(lint, create_temp_file):
+ global fixed
+ contents = """
+import distutils
+
+def foobar():
+ pass
+""".lstrip()
+
+ path = create_temp_file(contents, name="bad.py")
+ results = lint([path])
+ assert len(results) == 2
+
+ # Make sure the missing blank line is fixed, but the unused import isn't.
+ results = lint([path], fix=True)
+ assert len(results) == 1
+ assert fixed == 1
+
+ fixed = 0
+
+ # Also test with a directory
+ path = os.path.dirname(create_temp_file(contents, name="bad2.py"))
+ results = lint([path], fix=True)
+ # There should now be two files with 2 combined errors
+ assert len(results) == 2
+ assert fixed == 1
+ assert all(r.rule != "E501" for r in results)
+
+
+def test_lint_fix_uses_config(lint, create_temp_file):
+ contents = """
+foo = ['A list of strings', 'that go over 80 characters', 'to test if autopep8 fixes it']
+""".lstrip()
+
+ path = create_temp_file(contents, name="line_length.py")
+ lint([path], fix=True)
+
+ # Make sure autopep8 reads the global config under lintargs['root']. If it
+ # didn't, then the line-length over 80 would get fixed.
+ with open(path, "r") as fh:
+ assert fh.read() == contents
+
+
+def test_lint_excluded_file(lint, paths, config):
+ # First file is globally excluded, second one is from .flake8 config.
+ files = paths("bad.py", "subdir/exclude/bad.py", "subdir/exclude/exclude_subdir")
+ config["exclude"] = paths("bad.py")
+ results = lint(files, config)
+ print(results)
+ assert len(results) == 0
+
+ # Make sure excludes also apply when running from a different cwd.
+ cwd = paths("subdir")[0]
+ os.chdir(cwd)
+
+ results = lint(paths("subdir/exclude"))
+ print(results)
+ assert len(results) == 0
+
+
+def test_lint_excluded_file_with_glob(lint, paths, config):
+ config["exclude"] = paths("ext/*.configure")
+
+ files = paths("ext")
+ results = lint(files, config)
+ print(results)
+ assert len(results) == 0
+
+ files = paths("ext/bad.configure")
+ results = lint(files, config)
+ print(results)
+ assert len(results) == 0
+
+
+def test_lint_excluded_file_with_no_filter(lint, paths, config):
+ results = lint(paths("subdir/exclude"), use_filters=False)
+ print(results)
+ assert len(results) == 4
+
+
+def test_lint_uses_custom_extensions(lint, paths):
+ assert len(lint(paths("ext"))) == 1
+ assert len(lint(paths("ext/bad.configure"))) == 1
+
+
+if __name__ == "__main__":
+ mozunit.main()