""" 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()