tests: enforce meaningful version checks (#15635)
Follow up to #15430 — would've made
https://github.com/python/mypy/pull/15566#issuecomment-1616170947
unnecessary.
diff --git a/mypy/test/data.py b/mypy/test/data.py
index f9bb951..47c96ce 100644
--- a/mypy/test/data.py
+++ b/mypy/test/data.py
@@ -167,13 +167,17 @@
version = tuple(int(x) for x in version_str.split("."))
except ValueError:
_item_fail(f"{version_str!r} is not a valid python version")
- if version < defaults.PYTHON3_VERSION:
- _item_fail(
- f"Version check against {version}; must be >= {defaults.PYTHON3_VERSION}"
- )
if compare_op == ">=":
+ if version <= defaults.PYTHON3_VERSION:
+ _item_fail(
+ f"{arg} always true since minimum runtime version is {defaults.PYTHON3_VERSION}"
+ )
version_check = sys.version_info >= version
elif compare_op == "==":
+ if version < defaults.PYTHON3_VERSION:
+ _item_fail(
+ f"{arg} always false since minimum runtime version is {defaults.PYTHON3_VERSION}"
+ )
if not 1 < len(version) < 4:
_item_fail(
f'Only minor or patch version checks are currently supported with "==": {version_str!r}'
diff --git a/mypy/test/meta/test_parse_data.py b/mypy/test/meta/test_parse_data.py
index cc1b4ff..6593dbc 100644
--- a/mypy/test/meta/test_parse_data.py
+++ b/mypy/test/meta/test_parse_data.py
@@ -67,3 +67,37 @@
f".test:{expected_lineno}: Invalid section header [unknownsection] in case 'abc'"
)
assert expected in actual
+
+ def test_bad_ge_version_check(self) -> None:
+ # Arrange
+ data = self._dedent(
+ """
+ [case abc]
+ s: str
+ [out version>=3.8]
+ abc
+ """
+ )
+
+ # Act
+ actual = self._run_pytest(data)
+
+ # Assert
+ assert "version>=3.8 always true since minimum runtime version is (3, 8)" in actual
+
+ def test_bad_eq_version_check(self) -> None:
+ # Arrange
+ data = self._dedent(
+ """
+ [case abc]
+ s: str
+ [out version==3.7]
+ abc
+ """
+ )
+
+ # Act
+ actual = self._run_pytest(data)
+
+ # Assert
+ assert "version==3.7 always false since minimum runtime version is (3, 8)" in actual