| Viewing file:  find_functional_tests.py (2.93 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
# 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
 # Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
 
 from __future__ import annotations
 
 import os
 from pathlib import Path
 
 from pylint.testutils.functional.test_file import FunctionalTestFile
 
 REASONABLY_DISPLAYABLE_VERTICALLY = 48
 """'Wet finger' number of files that are reasonable to display by an IDE."""
 SHOULD_BE_IN_THE_SAME_DIRECTORY = 5
 """'Wet finger' as in 'in my settings there are precisely this many'."""
 
 IGNORED_PARENT_DIRS = {
 "deprecated_relative_import",
 "ext",
 "regression",
 "regression_02",
 }
 """Direct parent directories that should be ignored."""
 
 IGNORED_PARENT_PARENT_DIRS = {
 "docparams",
 "deprecated_relative_import",
 "ext",
 }
 """Parents of direct parent directories that should be ignored."""
 
 
 def get_functional_test_files_from_directory(
 input_dir: Path | str,
 ) -> list[FunctionalTestFile]:
 """Get all functional tests in the input_dir."""
 suite = []
 
 _check_functional_tests_structure(Path(input_dir))
 
 for dirpath, dirnames, filenames in os.walk(input_dir):
 if dirpath.endswith("__pycache__"):
 continue
 dirnames.sort()
 filenames.sort()
 for filename in filenames:
 if filename != "__init__.py" and filename.endswith(".py"):
 suite.append(FunctionalTestFile(dirpath, filename))
 return suite
 
 
 def _check_functional_tests_structure(directory: Path) -> None:
 """Check if test directories follow correct file/folder structure."""
 # Ignore underscored directories
 if Path(directory).stem.startswith("_"):
 return
 
 files: set[Path] = set()
 dirs: set[Path] = set()
 
 # Collect all sub-directories and files in directory
 for file_or_dir in directory.iterdir():
 if file_or_dir.is_file():
 if file_or_dir.suffix == ".py" and not file_or_dir.stem.startswith("_"):
 files.add(file_or_dir)
 elif file_or_dir.is_dir():
 dirs.add(file_or_dir)
 _check_functional_tests_structure(file_or_dir)
 
 assert len(files) <= REASONABLY_DISPLAYABLE_VERTICALLY, (
 f"{directory} contains too many functional tests files "
 + f"({len(files)} > {REASONABLY_DISPLAYABLE_VERTICALLY})."
 )
 
 for file in files:
 possible_dir = file.parent / file.stem.split("_")[0]
 assert not possible_dir.exists(), f"{file} should go in {possible_dir}."
 
 # Exclude some directories as they follow a different structure
 if (
 not len(file.parent.stem) == 1  # First letter sub-directories
 and file.parent.stem not in IGNORED_PARENT_DIRS
 and file.parent.parent.stem not in IGNORED_PARENT_PARENT_DIRS
 ):
 assert file.stem.startswith(
 file.parent.stem
 ), f"{file} should not go in {file.parent}"
 
 |