# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE import re from pathlib import Path from typing import Dict, Tuple, Type import pytest from pylint.checkers import BaseChecker from pylint.lint.expand_modules import _is_in_ignore_list_re, expand_modules from pylint.testutils import CheckerTestCase, set_config from pylint.utils.utils import get_global_option def test__is_in_ignore_list_re_match() -> None: patterns = [ re.compile(".*enchilada.*"), re.compile("unittest_.*"), re.compile(".*tests/.*"), ] assert _is_in_ignore_list_re("unittest_utils.py", patterns) assert _is_in_ignore_list_re("cheese_enchiladas.xml", patterns) assert _is_in_ignore_list_re("src/tests/whatever.xml", patterns) TEST_DIRECTORY = Path(__file__).parent.parent INIT_PATH = str(TEST_DIRECTORY / "lint/__init__.py") EXPAND_MODULES = str(TEST_DIRECTORY / "lint/unittest_expand_modules.py") this_file = { "basename": "lint.unittest_expand_modules", "basepath": EXPAND_MODULES, "isarg": True, "name": "lint.unittest_expand_modules", "path": EXPAND_MODULES, } this_file_from_init = { "basename": "lint", "basepath": INIT_PATH, "isarg": False, "name": "lint.unittest_expand_modules", "path": EXPAND_MODULES, } unittest_lint = { "basename": "lint", "basepath": INIT_PATH, "isarg": False, "name": "lint.unittest_lint", "path": str(TEST_DIRECTORY / "lint/unittest_lint.py"), } test_utils = { "basename": "lint", "basepath": INIT_PATH, "isarg": False, "name": "lint.test_utils", "path": str(TEST_DIRECTORY / "lint/test_utils.py"), } test_pylinter = { "basename": "lint", "basepath": INIT_PATH, "isarg": False, "name": "lint.test_pylinter", "path": str(TEST_DIRECTORY / "lint/test_pylinter.py"), } init_of_package = { "basename": "lint", "basepath": INIT_PATH, "isarg": True, "name": "lint", "path": INIT_PATH, } class TestExpandModules(CheckerTestCase): """Test the expand_modules function while allowing options to be set""" class Checker(BaseChecker): """This dummy checker is needed to allow options to be set""" name = "checker" msgs: Dict[str, Tuple[str, ...]] = {} options = (("An option", {"An option": "dict"}),) CHECKER_CLASS: Type = Checker @pytest.mark.parametrize( "files_or_modules,expected", [ ([__file__], [this_file]), ( [str(Path(__file__).parent)], [ init_of_package, test_pylinter, test_utils, this_file_from_init, unittest_lint, ], ), ], ) @set_config(ignore_paths="") def test_expand_modules(self, files_or_modules, expected): """Test expand_modules with the default value of ignore-paths""" ignore_list, ignore_list_re = [], [] modules, errors = expand_modules( files_or_modules, ignore_list, ignore_list_re, get_global_option(self.checker, "ignore-paths"), ) modules.sort(key=lambda d: d["name"]) assert modules == expected assert not errors @pytest.mark.parametrize( "files_or_modules,expected", [ ([__file__], []), ( [str(Path(__file__).parent)], [ init_of_package, ], ), ], ) @set_config(ignore_paths=".*/lint/.*") def test_expand_modules_with_ignore(self, files_or_modules, expected): """Test expand_modules with a non-default value of ignore-paths""" ignore_list, ignore_list_re = [], [] modules, errors = expand_modules( files_or_modules, ignore_list, ignore_list_re, get_global_option(self.checker, "ignore-paths"), ) modules.sort(key=lambda d: d["name"]) assert modules == expected assert not errors