summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2021-11-28 18:05:29 +0100
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-12-03 18:38:20 +0100
commitbb3c4467374a31b713099a14f800fa3d5b6a4650 (patch)
treedb47acadb5bc934acb2ae6476216a6069c7cae39
parentd145f7a8208119570acfbb49a4b09c5ec41437d7 (diff)
downloadpylint-git-bb3c4467374a31b713099a14f800fa3d5b6a4650.tar.gz
Add a warning in functional test update for bad python versions
-rw-r--r--pylint/testutils/functional/find_functional_tests.py2
-rw-r--r--pylint/testutils/functional/lint_module_output_update.py16
-rw-r--r--pylint/testutils/functional_test_file.py4
-rw-r--r--tests/testutils/test_lint_module_output_update.py12
4 files changed, 31 insertions, 3 deletions
diff --git a/pylint/testutils/functional/find_functional_tests.py b/pylint/testutils/functional/find_functional_tests.py
index 6eab2e9e8..27e5880da 100644
--- a/pylint/testutils/functional/find_functional_tests.py
+++ b/pylint/testutils/functional/find_functional_tests.py
@@ -22,7 +22,7 @@ def get_functional_test_files_from_directory(
assert (
len(filenames) <= REASONABLY_DISPLAYABLE_VERTICALLY
- ), f"{dirpath} contain too much functional tests files."
+ ), f"{dirpath} contains too many functional tests files."
for filename in filenames:
if filename != "__init__.py" and filename.endswith(".py"):
diff --git a/pylint/testutils/functional/lint_module_output_update.py b/pylint/testutils/functional/lint_module_output_update.py
index 113f6448f..dfb891189 100644
--- a/pylint/testutils/functional/lint_module_output_update.py
+++ b/pylint/testutils/functional/lint_module_output_update.py
@@ -3,7 +3,12 @@
import csv
import os
+from typing import Optional
+from _pytest.config import Config
+
+from pylint.constants import PY38_PLUS
+from pylint.testutils.functional.test_file import FunctionalTestFile
from pylint.testutils.lint_module_test import LintModuleTest
@@ -16,6 +21,17 @@ class LintModuleOutputUpdate(LintModuleTest):
csv.register_dialect("test", TestDialect)
+ def __init__(
+ self, test_file: FunctionalTestFile, config: Optional[Config] = None
+ ) -> None:
+ if not PY38_PLUS:
+ raise RuntimeError(
+ "You need at least python 3.8 for the functional test updater to work. "
+ "This is because python 3.8 includes a new AST parser, which amongst others "
+ "returns the end line and end column of most nodes."
+ )
+ super().__init__(test_file, config)
+
def _check_output_text(self, _, expected_output, actual_output):
if not expected_output and not actual_output:
if os.path.exists(self._test_file.expected_output):
diff --git a/pylint/testutils/functional_test_file.py b/pylint/testutils/functional_test_file.py
index 5a6cad2df..cb13cd21d 100644
--- a/pylint/testutils/functional_test_file.py
+++ b/pylint/testutils/functional_test_file.py
@@ -16,7 +16,7 @@ from pylint.testutils.functional import (
)
warnings.warn(
- "'pylint.testutils.functional_test_file' will be accessible by"
- " the 'pylint.testutils.functional' API in pylint 3.0",
+ "'pylint.testutils.functional_test_file' will be accessible from"
+ " the 'pylint.testutils.functional' namespace in pylint 3.0.",
DeprecationWarning,
)
diff --git a/tests/testutils/test_lint_module_output_update.py b/tests/testutils/test_lint_module_output_update.py
index bf566a473..9f581ce76 100644
--- a/tests/testutils/test_lint_module_output_update.py
+++ b/tests/testutils/test_lint_module_output_update.py
@@ -7,6 +7,7 @@ from typing import Callable, Tuple
import pytest
+from pylint.constants import PY38_PLUS
from pylint.testutils import FunctionalTestFile
from pylint.testutils.functional import LintModuleOutputUpdate
@@ -26,6 +27,15 @@ def lint_module_fixture(
return inner
+@pytest.mark.skipif(PY38_PLUS, reason="Requires python 3.7 or lower")
+def test_not_py38(tmp_path: Path) -> None:
+ with pytest.raises(RuntimeError, match="new, better AST in python 3.8"):
+ LintModuleOutputUpdate(
+ test_file=FunctionalTestFile(str(tmp_path), str(tmp_path / "filename.py"))
+ )
+
+
+@pytest.mark.skipif(not PY38_PLUS, reason="Requires python 3.8 or superior")
def test_lint_module_output_update_fail_before(
lint_module_fixture: Callable[[str], Tuple[Path, Path, LintModuleOutputUpdate]]
) -> None:
@@ -38,6 +48,7 @@ def test_lint_module_output_update_fail_before(
assert not expected_output_file.exists()
+@pytest.mark.skipif(not PY38_PLUS, reason="Requires python 3.8 or superior")
def test_lint_module_output_update_effective(
lint_module_fixture: Callable[[str], Tuple[Path, Path, LintModuleOutputUpdate]]
) -> None:
@@ -52,6 +63,7 @@ def test_lint_module_output_update_effective(
)
+@pytest.mark.skipif(not PY38_PLUS, reason="Requires python 3.8 or superior")
def test_lint_module_output_update_remove_useless_txt(
lint_module_fixture: Callable[[str], Tuple[Path, Path, LintModuleOutputUpdate]]
) -> None: