fune/tools/lint/test/test_flake8.py
Marco Castelluccio 6217704534 Bug 1803510 - Set up isort as a separate linter. r=linter-reviewers,ahal DONTBUILD
This makes it possible to use the resolve all configs option and set up
different first party modules for different directories.

The downside is that configuration options (e.g. profile = black) have to
be repeated in every .isort.cfg file, because isort never merges configuration
files.

Differential Revision: https://phabricator.services.mozilla.com/D163567
2022-12-16 10:40:45 +00:00

117 lines
3.1 KiB
Python

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()