attrs/tests/test_version_info.py

61 lines
1.6 KiB
Python

from __future__ import absolute_import, division, print_function
import pytest
from attr import VersionInfo
from attr._compat import PY2
@pytest.fixture(name="vi")
def fixture_vi():
return VersionInfo(19, 2, 0, "final")
class TestVersionInfo:
def test_from_string_no_releaselevel(self, vi):
"""
If there is no suffix, the releaselevel becomes "final" by default.
"""
assert vi == VersionInfo._from_version_string("19.2.0")
def test_suffix_is_preserved(self):
"""
If there is a suffix, it's preserved.
"""
assert (
"dev0"
== VersionInfo._from_version_string("19.2.0.dev0").releaselevel
)
@pytest.mark.skipif(
PY2, reason="Python 2 is too YOLO to care about comparability."
)
@pytest.mark.parametrize("other", [(), (19, 2, 0, "final", "garbage")])
def test_wrong_len(self, vi, other):
"""
Comparing with a tuple that has the wrong length raises an error.
"""
assert vi != other
with pytest.raises(TypeError):
vi < other
@pytest.mark.parametrize("other", [[19, 2, 0, "final"]])
def test_wrong_type(self, vi, other):
"""
Only compare to other VersionInfos or tuples.
"""
assert vi != other
def test_order(self, vi):
"""
Ordering works as expected.
"""
assert vi < (20,)
assert vi < (19, 2, 1)
assert vi > (0,)
assert vi <= (19, 2)
assert vi >= (19, 2)
assert vi > (19, 2, 0, "dev0")
assert vi < (19, 2, 0, "post1")