-
-
Notifications
You must be signed in to change notification settings - Fork 4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ref: check that patterns in mypy stronglist actually exist (#70847)
I also renamed the test module to match the module name -- split that into a separate commit so github's per-commit diff reflects the changes there <!-- Describe your PR here. -->
- Loading branch information
1 parent
ff87f5e
commit 477548d
Showing
4 changed files
with
209 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,188 @@ | ||
import re | ||
|
||
from tools.mypy_helpers.check_stronglist import _glob_to_re, main | ||
|
||
|
||
def test_glob_to_re_exact_matches(): | ||
pat = re.compile(_glob_to_re("a.b.c")) | ||
assert pat.fullmatch("a.b.c") | ||
assert not pat.fullmatch("a.b.c.d") | ||
assert not pat.fullmatch("a_b_c") | ||
|
||
|
||
def test_glob_to_re_wildcards(): | ||
pat = re.compile(_glob_to_re("a.b.c.*")) | ||
assert pat.fullmatch("a.b.c") | ||
assert pat.fullmatch("a.b.c.d") | ||
assert not pat.fullmatch("a_b_c") | ||
|
||
|
||
def test_ok(tmp_path): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = ["a.b.c", "d.e.f", "g.h.i"] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["j.k.*"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("j/k").mkdir(parents=True) | ||
tmp_path.joinpath("j/k/l.py").touch() | ||
|
||
assert main((str(f),)) == 0 | ||
|
||
|
||
def test_errors_on_exact_module(tmp_path, capsys): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = ["a.b.c", "d.e.f", "g.h.i"] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.b.c", "d.e.f"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("a/b").mkdir(parents=True) | ||
tmp_path.joinpath("a/b/c.py").touch() | ||
tmp_path.joinpath("d/e").mkdir(parents=True) | ||
tmp_path.joinpath("d/e/f.py").touch() | ||
|
||
assert main((str(f),)) == 1 | ||
|
||
expected = f"""\ | ||
{f}: a.b.c is in the typing errors allowlist *and* stronglist | ||
{f}: d.e.f is in the typing errors allowlist *and* stronglist | ||
""" | ||
assert capsys.readouterr().out == expected | ||
|
||
|
||
def test_errors_on_globbed_module(tmp_path, capsys): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = ["a.b.c", "a.b.c.d", "a.b.c.e"] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.b.c.*"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("a/b/c").mkdir(parents=True) | ||
tmp_path.joinpath("a/b/c/d.py").touch() | ||
|
||
assert main((str(f),)) == 1 | ||
|
||
expected = f"""\ | ||
{f}: a.b.c is in the typing errors allowlist *and* stronglist | ||
{f}: a.b.c.d is in the typing errors allowlist *and* stronglist | ||
{f}: a.b.c.e is in the typing errors allowlist *and* stronglist | ||
""" | ||
assert capsys.readouterr().out == expected | ||
|
||
|
||
def test_stronglist_existence_file_missing(tmp_path, capsys): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = [] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.b"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
assert main((str(f),)) == 1 | ||
|
||
expected = f"""\ | ||
{f}: a.b in stronglist does not match any files! | ||
""" | ||
assert capsys.readouterr().out == expected | ||
|
||
|
||
def test_stronglist_existence_glob_missing(tmp_path, capsys): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = [] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.*"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
assert main((str(f),)) == 1 | ||
|
||
expected = f"""\ | ||
{f}: a.* in stronglist does not match any files! | ||
""" | ||
assert capsys.readouterr().out == expected | ||
|
||
|
||
def test_stronglist_existence_ok_src_layout(tmp_path): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = [] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.b"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("src/a").mkdir(parents=True) | ||
tmp_path.joinpath("src/a/b.py").touch() | ||
|
||
assert main((str(f),)) == 0 | ||
|
||
|
||
def test_stronglist_existence_ok_glob(tmp_path): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = [] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.*"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("a").mkdir(parents=True) | ||
tmp_path.joinpath("a/c.py").touch() | ||
|
||
assert main((str(f),)) == 0 | ||
|
||
|
||
def test_stronglist_existince_ok_init_py(tmp_path): | ||
src = """\ | ||
[[tool.mypy.overrides]] | ||
module = [] | ||
disable_error_code = ["misc"] | ||
[[tool.mypy.overrides]] | ||
module = ["a.b"] | ||
disallow_untyped_defs = true | ||
""" | ||
f = tmp_path.joinpath("f") | ||
f.write_text(src) | ||
|
||
tmp_path.joinpath("a/b").mkdir(parents=True) | ||
tmp_path.joinpath("a/b/__init__.py").touch() | ||
|
||
assert main((str(f),)) == 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters