Red-DiscordBot/tests/core/test_version.py
palmtree5 3254698c78
Update deps, allow Python 3.9, drop Fedora 32 (#5121)
* Update deps + allow Python 3.9

* Add in updates from Jack's branch

* Fix multiple target for cross-reference warnings

* Update a few more Python 3.8 occurrences

* Bump further

* Don't install tox in CodeQL environment

* Bump Python version in docs to 3.9.7

* more bumps

* Add missing pin

* Stop using the deprecated distro.linux_distribution()

* Suppress deprecation warning

* Fix OpenSUSE Leap instructions

* Drop Fedora 32

* Add Python 3.10-dev to CI

* meh

Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
2021-09-06 18:43:29 +02:00

74 lines
2.3 KiB
Python

import importlib.metadata
import pkg_resources
import os
import sys
import pytest
from redbot import core
from redbot.core import VersionInfo
def test_version_working():
assert hasattr(core, "__version__")
assert core.__version__[0] == "3"
# When adding more of these, ensure they are added in ascending order of precedence
version_tests = (
"3.0.0a32.post10.dev12",
"3.0.0rc1.dev1",
"3.0.0rc1",
"3.0.0",
"3.0.1",
"3.0.1.post1.dev1",
"3.0.1.post1",
"2018.10.6b21",
)
def test_version_info_str_parsing():
for version_str in version_tests:
assert version_str == str(VersionInfo.from_str(version_str))
def test_version_info_lt():
for next_idx, cur in enumerate(version_tests[:-1], start=1):
cur_test = VersionInfo.from_str(cur)
next_test = VersionInfo.from_str(version_tests[next_idx])
assert cur_test < next_test
def test_version_info_gt():
assert VersionInfo.from_str(version_tests[1]) > VersionInfo.from_str(version_tests[0])
def test_python_version_has_lower_bound():
"""
Due to constant issues in support with Red being installed on a Python version that was not
supported by any Red version, it is important that we have both an upper and lower bound set.
"""
requires_python = importlib.metadata.metadata("Red-DiscordBot")["Requires-Python"]
assert requires_python is not None
# `pkg_resources` needs a regular requirement string, so "x" serves as requirement's name here
req = pkg_resources.Requirement.parse(f"x{requires_python}")
assert any(op in (">", ">=") for op, version in req.specs)
@pytest.mark.skipif(
os.getenv("TOX_RED", False) and sys.version_info >= (3, 10),
reason="Testing on yet to be supported Python version.",
)
def test_python_version_has_upper_bound():
"""
Due to constant issues in support with Red being installed on a Python version that was not
supported by any Red version, it is important that we have both an upper and lower bound set.
"""
requires_python = importlib.metadata.metadata("Red-DiscordBot")["Requires-Python"]
assert requires_python is not None
# `pkg_resources` needs a regular requirement string, so "x" serves as requirement's name here
req = pkg_resources.Requirement.parse(f"x{requires_python}")
assert any(op in ("<", "<=") for op, version in req.specs)