diff --git a/pylint/testutils/functional/test_file.py b/pylint/testutils/functional/test_file.py index 11addc72571..8aa0361d450 100644 --- a/pylint/testutils/functional/test_file.py +++ b/pylint/testutils/functional/test_file.py @@ -2,8 +2,9 @@ # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE import configparser +import sys from os.path import basename, exists, join -from typing import Dict, List, Tuple, Union +from typing import List, Tuple def parse_python_version(ver_str: str) -> Tuple[int, ...]: @@ -15,6 +16,33 @@ class NoFileError(Exception): pass +if sys.version_info >= (3, 8): + from typing import TypedDict +else: + from typing_extensions import TypedDict + + +class TestFileOptions(TypedDict): + min_pyver: Tuple[int, ...] + max_pyver: Tuple[int, ...] + min_pyver_end_position: Tuple[int, ...] + requires: List[str] + except_implementations: str # Type is actually comma separated list of string + exclude_platforms: str # Type is actually comma separated list of string + + +# mypy need something literal, we can't create this dynamically from TestFileOptions +POSSIBLE_TEST_OPTIONS = { + "min_pyver", + "max_pyver", + "min_pyver_end_position", + "requires", + "except_implementations", + "exclude_platforms", + "exclude_platforms", +} + + class FunctionalTestFile: """A single functional test case file with options.""" @@ -28,13 +56,13 @@ class FunctionalTestFile: def __init__(self, directory: str, filename: str) -> None: self._directory = directory self.base = filename.replace(".py", "") - self.options: Dict[str, Union[Tuple[int, ...], List[str]]] = { + self.options: TestFileOptions = { "min_pyver": (2, 5), "max_pyver": (4, 0), "min_pyver_end_position": (3, 8), "requires": [], - "except_implementations": [], - "exclude_platforms": [], + "except_implementations": "", + "exclude_platforms": "", } self._parse_options() @@ -51,7 +79,11 @@ def _parse_options(self) -> None: for name, value in cp.items("testoptions"): conv = self._CONVERTERS.get(name, lambda v: v) - self.options[name] = conv(value) + + assert ( + name in POSSIBLE_TEST_OPTIONS + ), f"[testoptions]' can only contains one of {POSSIBLE_TEST_OPTIONS}" + self.options[name] = conv(value) # type: ignore[misc] @property def option_file(self) -> str: diff --git a/tests/functional/f/fixme.rc b/tests/functional/f/fixme.rc index 6b903c1bdae..be1b23458e0 100644 --- a/tests/functional/f/fixme.rc +++ b/tests/functional/f/fixme.rc @@ -1,3 +1,5 @@ -[testoptions] +[MISCELLANEOUS] +# List of note tags to take in consideration, separated by a comma. notes=XXX,TODO,./TODO +# Regular expression of note tags to take in consideration. notes-rgx=FIXME(?!.*ISSUE-\d+)|TO.*DO diff --git a/tests/functional/r/regression/regression_issue_4631.rc b/tests/functional/r/regression/regression_issue_4631.rc index 44c9b77eed8..88cdb85bfa9 100644 --- a/tests/functional/r/regression/regression_issue_4631.rc +++ b/tests/functional/r/regression/regression_issue_4631.rc @@ -1,2 +1,2 @@ -[testoptions] +[MASTER] limit-inference-results=0 diff --git a/tests/functional/t/too/too_few_public_methods_excluded.rc b/tests/functional/t/too/too_few_public_methods_excluded.rc index 00c025832cf..b6a2cc9378a 100644 --- a/tests/functional/t/too/too_few_public_methods_excluded.rc +++ b/tests/functional/t/too/too_few_public_methods_excluded.rc @@ -1,4 +1,4 @@ -[testoptions] +[DESIGN] min-public-methods=10 # to combat inherited methods exclude-too-few-public-methods=json.*,^.*Control$ diff --git a/tests/functional/t/too/too_many_ancestors_ignored_parents.rc b/tests/functional/t/too/too_many_ancestors_ignored_parents.rc index 1d06dad25d6..aa652704b7d 100644 --- a/tests/functional/t/too/too_many_ancestors_ignored_parents.rc +++ b/tests/functional/t/too/too_many_ancestors_ignored_parents.rc @@ -1,3 +1,3 @@ -[testoptions] +[DESIGN] max-parents=2 ignored-parents=functional.t.too.too_many_ancestors_ignored_parents.E diff --git a/tests/functional/t/too/too_many_statements.rc b/tests/functional/t/too/too_many_statements.rc index d6d22f23725..19e0d5151fb 100644 --- a/tests/functional/t/too/too_many_statements.rc +++ b/tests/functional/t/too/too_many_statements.rc @@ -1,2 +1,2 @@ -[testoptions] +[DESIGN] max-statements=5