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