104 lines
3.6 KiB
Python
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"
|