summaryrefslogtreecommitdiffstats
path: root/tools/lint/test/test_flake8.py
blob: 66befab4e7b849e2cdb1fae1d4dd2a51ab3e26a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import os

import mozunit

LINTER = "flake8"


def test_lint_single_file(lint, paths):
    results = lint(paths("bad.py"))
    assert len(results) == 2
    assert results[0].rule == "F401"
    assert results[1].rule == "E501"
    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):
    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

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