51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
import pytest
|
|
from semver import SemVer, SemVerError
|
|
|
|
def test_parse_basic():
|
|
v = SemVer.parse("1.2.3")
|
|
assert (v.major, v.minor, v.patch) == (1,2,3)
|
|
assert v.pre == () and v.build == ()
|
|
|
|
def test_str_roundtrip():
|
|
for s in ["1.2.3", "1.2.3-rc.1", "1.2.3+build.5", "1.2.3-rc.1+build.5", "0.0.0"]:
|
|
assert str(SemVer.parse(s)) == s
|
|
|
|
def test_prerelease_order():
|
|
assert SemVer.parse("1.0.0-alpha") < SemVer.parse("1.0.0-alpha.1")
|
|
assert SemVer.parse("1.0.0-alpha.1") < SemVer.parse("1.0.0-alpha.beta")
|
|
assert SemVer.parse("1.0.0-alpha.beta") < SemVer.parse("1.0.0-beta")
|
|
assert SemVer.parse("1.0.0-beta") < SemVer.parse("1.0.0-beta.2")
|
|
assert SemVer.parse("1.0.0-beta.2") < SemVer.parse("1.0.0-beta.11")
|
|
assert SemVer.parse("1.0.0-beta.11") < SemVer.parse("1.0.0-rc.1")
|
|
assert SemVer.parse("1.0.0-rc.1") < SemVer.parse("1.0.0")
|
|
|
|
def test_numeric_vs_string_id():
|
|
# numeric identifiers always have lower precedence than non-numeric
|
|
assert SemVer.parse("1.0.0-1") < SemVer.parse("1.0.0-alpha")
|
|
|
|
def test_build_ignored_equality():
|
|
assert SemVer.parse("1.0.0+foo") == SemVer.parse("1.0.0+bar")
|
|
assert hash(SemVer.parse("1.0.0+foo")) == hash(SemVer.parse("1.0.0+bar"))
|
|
|
|
def test_leading_zero_rejected():
|
|
with pytest.raises(SemVerError):
|
|
SemVer.parse("1.0.0-01")
|
|
with pytest.raises(SemVerError):
|
|
SemVer.parse("1.0.0+01")
|
|
|
|
def test_invalid():
|
|
for s in ["", "1.2", "1.2.3.4", "a.b.c", "1.2.3-", " 1.2.3", "1.2.3 "]:
|
|
with pytest.raises(SemVerError):
|
|
SemVer.parse(s)
|
|
|
|
def test_bump():
|
|
v = SemVer.parse("1.2.3-rc.1+build")
|
|
assert str(v.bump("patch")) == "1.2.4"
|
|
assert str(v.bump("minor")) == "1.3.0"
|
|
assert str(v.bump("major")) == "2.0.0"
|
|
|
|
def test_sort():
|
|
versions = ["1.0.0", "2.0.0", "1.0.0-rc.1", "1.5.0", "1.0.0-alpha"]
|
|
parsed = sorted(SemVer.parse(x) for x in versions)
|
|
assert [str(x) for x in parsed] == ["1.0.0-alpha", "1.0.0-rc.1", "1.0.0", "1.5.0", "2.0.0"]
|