From 7fd499a903348955cbe120b058659f1fa6a29f1a Mon Sep 17 00:00:00 2001 From: Dave Bunten Date: Wed, 8 Feb 2023 14:01:58 -0700 Subject: Add import-based submodule detection for preferred-modules (#8186) Co-authored-by: Pierre Sassoulas --- tests/checkers/unittest_imports.py | 56 +++++++++++++++++++++- .../preferred_module/unpreferred_submodule.py | 3 ++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/regrtest_data/preferred_module/unpreferred_submodule.py (limited to 'tests') diff --git a/tests/checkers/unittest_imports.py b/tests/checkers/unittest_imports.py index 40aa8432a..8aa062cf4 100644 --- a/tests/checkers/unittest_imports.py +++ b/tests/checkers/unittest_imports.py @@ -123,7 +123,7 @@ class TestImportsChecker(CheckerTestCase): # test preferred-modules case with base module import Run( [ - f"{os.path.join(REGR_DATA, 'preferred_module')}", + f"{os.path.join(REGR_DATA, 'preferred_module/unpreferred_module.py')}", "-d all", "-e preferred-module", # prefer sys instead of os (for triggering test) @@ -138,6 +138,60 @@ class TestImportsChecker(CheckerTestCase): # assert there were no errors assert len(errors) == 0 + # test preferred-modules trigger case with submodules + Run( + [ + f"{os.path.join(REGR_DATA, 'preferred_module/unpreferred_submodule.py')}", + "-d all", + "-e preferred-module", + # prefer os.path instead of pathlib (for triggering test) + "--preferred-modules=os.path:pathlib", + ], + exit=False, + ) + output, errors = capsys.readouterr() + + # assert that we saw preferred-modules triggered + assert "Prefer importing 'pathlib' instead of 'os.path'" in output + # assert there were no errors + assert len(errors) == 0 + + # test preferred-modules ignore case with submodules + Run( + [ + f"{os.path.join(REGR_DATA, 'preferred_module/unpreferred_submodule.py')}", + "-d all", + "-e preferred-module", + # prefer pathlib instead of os.stat (for untriggered test) + "--preferred-modules=os.stat:pathlib", + ], + exit=False, + ) + output, errors = capsys.readouterr() + + # assert that we didn't see preferred-modules triggered + assert "Your code has been rated at 10.00/10" in output + # assert there were no errors + assert len(errors) == 0 + + # test preferred-modules base module for implemented submodule (from ... import) + Run( + [ + f"{os.path.join(REGR_DATA, 'preferred_module/unpreferred_submodule.py')}", + "-d all", + "-e preferred-module", + # prefer pathlib instead of os (for triggering test) + "--preferred-modules=os:pathlib", + ], + exit=False, + ) + output, errors = capsys.readouterr() + + # assert that we saw preferred-modules triggered with base module + assert "Prefer importing 'pathlib' instead of 'os'" in output + # assert there were no errors + assert len(errors) == 0 + @staticmethod def test_allow_reexport_package(capsys: CaptureFixture[str]) -> None: """Test --allow-reexport-from-package option.""" diff --git a/tests/regrtest_data/preferred_module/unpreferred_submodule.py b/tests/regrtest_data/preferred_module/unpreferred_submodule.py new file mode 100644 index 000000000..22c61ffbe --- /dev/null +++ b/tests/regrtest_data/preferred_module/unpreferred_submodule.py @@ -0,0 +1,3 @@ +from os import path, getrandom + +path(".") -- cgit v1.2.1