pytest-csv-params/tests/test_version_check.py

119 lines
4.1 KiB
Python

"""
We are checking the python version for the plugin.
"""
import sys
import pytest
from attr.exceptions import PythonTooOldError
from _ptcsvp.version import check_pytest_version, check_python_version
def build_version(p_version):
"""
Build a Version
"""
elements = []
for v_part in p_version.split("."):
try:
elements.append(int(v_part))
except ValueError:
elements.append(v_part)
return tuple(elements)
@pytest.mark.parametrize(
["p_version", "expect_error"],
[
("3.8", None),
("3.8.1", None),
("3.8.10", None),
("3.8.10.ray.x", None),
("3.9", None),
("3.9.2", None),
("3.9.21", None),
("3.9.21.pre.7", None),
("3.10", None),
("3.10.31", None),
("3.10.31.beta.7", None),
("3.11", None),
("3.11.12", None),
("3.11.12.alpha.4", None),
("3.12", None),
("3.12.22", None),
("3.12.22.final", None),
("3.12.22.final.0", None),
("2.7", (PythonTooOldError, "At least Python 3.8 required")),
("2.7.1", (PythonTooOldError, "At least Python 3.8 required")),
("2.7.9", (PythonTooOldError, "At least Python 3.8 required")),
("2.7.9.final", (PythonTooOldError, "At least Python 3.8 required")),
("2.7.9.final.6", (PythonTooOldError, "At least Python 3.8 required")),
("3.7", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.1", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.final", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.final.6", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.final.6.777", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.3.final.6.777", (PythonTooOldError, "At least Python 3.8 required")),
("3.7.3.7.final.6.777", (PythonTooOldError, "At least Python 3.8 required")),
("3", (PythonTooOldError, "At least Python 3.8 required")),
],
)
def test_python_version(mocker, p_version, expect_error):
"""
Test python versions
"""
mocker.patch.object(sys, "version_info", build_version(p_version))
if expect_error is not None:
with pytest.raises(expect_error[0]) as raised_exc:
check_python_version()
assert raised_exc.value.args[0] == expect_error[1]
else:
check_python_version()
@pytest.mark.parametrize(
["p_version", "expect_error"],
[
("7.1", None),
("7.1.1", None),
("7.1.1.2", None),
("7.1.1.2.3", None),
("7.1.1.455555", None),
("7.1.1.2-145", None),
("7.1.1.090909090990", None),
("7.2", None),
("7.2.5", None),
("7.2.5.6", None),
("7.2.5.6.3333333", None),
("7.2.5.6.333333333.4", None),
("8.0", None),
("8.0.1", None),
("8.0.beta", None),
("8.0.beta.3", None),
("8.0.2.3", None),
("7.0", (RuntimeError, "At least Pytest 7.1 required")),
("7.0.1", (RuntimeError, "At least Pytest 7.1 required")),
("7.0.111111", (RuntimeError, "At least Pytest 7.1 required")),
("7.0.111111.extra", (RuntimeError, "At least Pytest 7.1 required")),
("7.0.111111.extra.git-22", (RuntimeError, "At least Pytest 7.1 required")),
("7", (RuntimeError, "At least Pytest 7.1 required")),
("6", (RuntimeError, "At least Pytest 7.1 required")),
("6.1", (RuntimeError, "At least Pytest 7.1 required")),
("6.1.2", (RuntimeError, "At least Pytest 7.1 required")),
("6.1.2.final", (RuntimeError, "At least Pytest 7.1 required")),
("6.1.2.final.3", (RuntimeError, "At least Pytest 7.1 required")),
],
)
def test_pytest_version(mocker, p_version, expect_error):
"""
Test pytest versions
"""
mocker.patch.object(pytest, "__version__", p_version)
assert pytest.__version__ == p_version
if expect_error is not None:
with pytest.raises(expect_error[0]) as raised_exc:
check_pytest_version()
assert raised_exc.value.args[0] == expect_error[1]
else:
check_pytest_version()