debian-todo/tests/test_version.py
2026-02-01 14:02:53 +00:00

104 lines
3.6 KiB
Python

"""Tests for version parsing and normalization functions."""
import pytest
from debian_todo import (
parse_details,
is_prerelease_version,
normalize_upstream_version,
)
class TestParseDetails:
"""Tests for parse_details function."""
def test_with_current_version(self):
details = "1.2.3 (currently in unstable: 1.2.2-1)"
new, current = parse_details(details)
assert new == "1.2.3"
assert current == "1.2.2-1"
def test_without_current_version(self):
details = "1.2.3"
new, current = parse_details(details)
assert new == "1.2.3"
assert current is None
def test_with_epoch_in_current(self):
details = "2.0.0 (currently in unstable: 1:1.9.0-2)"
new, current = parse_details(details)
assert new == "2.0.0"
assert current == "1:1.9.0-2"
def test_strips_whitespace(self):
details = " 1.2.3 (currently in unstable: 1.2.2-1 ) "
new, current = parse_details(details)
assert new == "1.2.3"
assert current == "1.2.2-1"
def test_empty_string(self):
new, current = parse_details("")
assert new == ""
assert current is None
class TestIsPrereleaseVersion:
"""Tests for is_prerelease_version function."""
def test_alpha_version(self):
assert is_prerelease_version("1.0.0alpha1") is True
assert is_prerelease_version("1.0.0-alpha2") is True
assert is_prerelease_version("1.0.0.alpha") is True
def test_beta_version(self):
assert is_prerelease_version("1.0.0beta1") is True
assert is_prerelease_version("1.0.0-beta2") is True
assert is_prerelease_version("2.0b1") is True
def test_rc_version(self):
assert is_prerelease_version("1.0.0rc1") is True
assert is_prerelease_version("1.0.0-rc2") is True
assert is_prerelease_version("1.0.0.rc3") is True
def test_short_prerelease(self):
assert is_prerelease_version("1.0a1") is True
assert is_prerelease_version("1.0b2") is True
def test_stable_version(self):
assert is_prerelease_version("1.0.0") is False
assert is_prerelease_version("2.3.4") is False
assert is_prerelease_version("1.0.0-1") is False
def test_version_with_current(self):
assert is_prerelease_version("1.0.0rc1 (currently in unstable: 0.9.0-1)") is True
assert is_prerelease_version("1.0.0 (currently in unstable: 0.9.0-1)") is False
def test_case_insensitive(self):
assert is_prerelease_version("1.0.0Alpha1") is True
assert is_prerelease_version("1.0.0BETA1") is True
assert is_prerelease_version("1.0.0RC1") is True
class TestNormalizeUpstreamVersion:
"""Tests for normalize_upstream_version function."""
def test_simple_version(self):
assert normalize_upstream_version("1.2.3") == "1.2.3"
def test_strips_debian_revision(self):
assert normalize_upstream_version("1.2.3-1") == "1.2.3"
assert normalize_upstream_version("1.2.3-2ubuntu1") == "1.2.3"
def test_strips_epoch(self):
assert normalize_upstream_version("1:1.2.3") == "1.2.3"
assert normalize_upstream_version("2:1.2.3") == "1.2.3"
def test_strips_epoch_and_revision(self):
assert normalize_upstream_version("1:1.2.3-4") == "1.2.3"
def test_strips_whitespace(self):
assert normalize_upstream_version(" 1.2.3 ") == "1.2.3"
def test_version_with_hyphen_in_upstream(self):
# Only the last hyphen is treated as revision separator
assert normalize_upstream_version("1.2.3-beta-1") == "1.2.3-beta"