Skip to content

Commit 279c8cd

Browse files
committed
Add tests for versions in univers
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent b4dd2da commit 279c8cd

3 files changed

Lines changed: 231 additions & 67 deletions

File tree

src/univers/versions.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,13 +218,13 @@ def build(self):
218218
return self.value and self.value.build
219219

220220
def next_major(self):
221-
return self.value and self.value.next_major()
221+
return self.value and SemverVersion(str(self.value.next_major()))
222222

223223
def next_minor(self):
224-
return self.value and self.value.next_minor()
224+
return self.value and SemverVersion(str(self.value.next_minor()))
225225

226226
def next_patch(self):
227-
return self.value and self.value.next_patch()
227+
return self.value and SemverVersion(str(self.value.next_patch()))
228228

229229

230230
def is_even(s):
@@ -316,6 +316,14 @@ class MavenVersion(Version):
316316
def build_value(cls, string):
317317
return maven.Version(string)
318318

319+
@classmethod
320+
def is_valid(cls, string):
321+
try:
322+
cls.build_value(string)
323+
return True
324+
except ValueError:
325+
return False
326+
319327

320328
# We will use total ordering to sort the versions, since these versions also consider prereleases.
321329
class NugetVersion(Version):

tests/test_version_comparison.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -9,70 +9,6 @@
99
from univers import versions
1010

1111

12-
def test_version_comparison_for_semver_edge_case():
13-
assert versions.SemverVersion("1.0.0") == versions.SemverVersion("1.0")
14-
assert versions.SemverVersion("1.2.3+42") != versions.SemverVersion("1.2.3+23")
15-
assert versions.SemverVersion("1.2.3+42") > versions.SemverVersion("1.2.3+23")
16-
17-
18-
def test_version_comparison_for_golang_edge_case():
19-
assert versions.GolangVersion("1.0.0") == versions.GolangVersion("v1")
20-
assert versions.GolangVersion("1.0.0") == versions.GolangVersion("v1.0")
21-
assert versions.GolangVersion("1.0.0") == versions.GolangVersion("v1.0.0")
22-
assert versions.GolangVersion("v1.0") > versions.GolangVersion("v0.3.0")
23-
assert versions.GolangVersion("v0.1.0") < versions.GolangVersion("v0.3.0")
24-
assert versions.GolangVersion("v0.1") != versions.GolangVersion("v0.1.1")
25-
assert versions.GolangVersion("v0.1.1") >= versions.GolangVersion("v0.1")
26-
assert versions.GolangVersion("v0.1.1") >= versions.GolangVersion("v0.1.1")
27-
assert versions.GolangVersion("v0.1.1") <= versions.GolangVersion("v0.1.1")
28-
assert versions.GolangVersion("v0.1.1") <= versions.GolangVersion("v0.1.2")
29-
30-
31-
def test_version_comparison_for_pypi_edge_case():
32-
assert versions.PypiVersion("2.4") == versions.PypiVersion("2.4.0")
33-
assert versions.PypiVersion("2.5") > versions.PypiVersion("2.4.0")
34-
assert versions.PypiVersion("2.5") != versions.PypiVersion("2.4.0")
35-
assert versions.PypiVersion("2.4") < versions.PypiVersion("2.5.0")
36-
assert versions.PypiVersion("2.6") >= versions.PypiVersion("2.5.0")
37-
assert versions.PypiVersion("2.3") <= versions.PypiVersion("2.5.0")
38-
assert versions.PypiVersion("2.6") >= versions.PypiVersion("2.6.0")
39-
assert versions.PypiVersion("2.5") <= versions.PypiVersion("2.5.0")
40-
41-
42-
def test_version_comparison_for_golang_edge_case():
43-
assert versions.ComposerVersion("1.0.0") == versions.ComposerVersion("v1")
44-
assert versions.ComposerVersion("1.0.0") == versions.ComposerVersion("v1.0")
45-
assert versions.ComposerVersion("1.0.0") == versions.ComposerVersion("v1.0.0")
46-
assert versions.ComposerVersion("v1.0") > versions.ComposerVersion("v0.3.0")
47-
assert versions.ComposerVersion("v0.1.0") < versions.ComposerVersion("v0.3.0")
48-
assert versions.ComposerVersion("v0.1") != versions.ComposerVersion("v0.1.1")
49-
assert versions.ComposerVersion("v0.1.1") >= versions.ComposerVersion("v0.1")
50-
assert versions.ComposerVersion("v0.1.1") >= versions.ComposerVersion("v0.1.1")
51-
assert versions.ComposerVersion("v0.1.1") <= versions.ComposerVersion("v0.1.1")
52-
assert versions.ComposerVersion("v0.1.1") <= versions.ComposerVersion("v0.1.2")
53-
54-
55-
def test_version_comparison_for_nginx_edge_case():
56-
assert versions.NginxVersion("1.0.0") == versions.NginxVersion("1")
57-
assert versions.NginxVersion("1.0.0") == versions.NginxVersion("1.0")
58-
assert versions.NginxVersion("1.0.0") == versions.NginxVersion("1.0.0")
59-
assert versions.NginxVersion("1.0") > versions.NginxVersion("0.3.0")
60-
assert versions.NginxVersion("0.1.0") < versions.NginxVersion("0.3.0")
61-
assert versions.NginxVersion("0.1") != versions.NginxVersion("0.1.1")
62-
assert versions.NginxVersion("0.1.1") >= versions.NginxVersion("0.1")
63-
assert versions.NginxVersion("0.1.1") >= versions.NginxVersion("0.1.1")
64-
assert versions.NginxVersion("0.1.1") <= versions.NginxVersion("0.1.1")
65-
assert versions.NginxVersion("0.1.1") <= versions.NginxVersion("0.1.2")
66-
67-
68-
def test_version_comparison_for_gem_edge_case():
69-
assert versions.RubygemsVersion("1.3.0") == versions.RubygemsVersion("1.3")
70-
assert versions.RubygemsVersion("1.3.0") <= versions.RubygemsVersion("1.3")
71-
assert versions.RubygemsVersion("1.1.3") <= versions.RubygemsVersion("1.3")
72-
assert versions.RubygemsVersion("1.4.pre") >= versions.RubygemsVersion("1.3")
73-
assert versions.RubygemsVersion("1.4.pre") != versions.RubygemsVersion("1.4")
74-
75-
7612
@pytest.mark.parametrize(
7713
"version_class",
7814
[

tests/test_versions.py

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
#
2+
# Copyright (c) nexB Inc. and others.
3+
# SPDX-License-Identifier: Apache-2.0
4+
#
5+
# Visit https://aboutcode.org and https://github.com/nexB/univers for support and download.
6+
7+
from univers.version_constraint import VersionConstraint
8+
from univers.versions import AlpineLinuxVersion
9+
from univers.versions import ArchLinuxVersion
10+
from univers.versions import ComposerVersion
11+
from univers.versions import DebianVersion
12+
from univers.versions import EnhancedSemanticVersion
13+
from univers.versions import GentooVersion
14+
from univers.versions import GolangVersion
15+
from univers.versions import MavenVersion
16+
from univers.versions import NginxVersion
17+
from univers.versions import NugetVersion
18+
from univers.versions import PypiVersion
19+
from univers.versions import RpmVersion
20+
from univers.versions import RubygemsVersion
21+
from univers.versions import SemverVersion
22+
from univers.versions import Version
23+
24+
25+
def test_version():
26+
assert Version("1.2.3") == Version("1.2.3")
27+
assert Version("1.2.3") != Version("1.2.4")
28+
assert Version.is_valid("1.2.3")
29+
assert not Version.is_valid(None)
30+
assert Version.normalize("v1.2.3") == "1.2.3"
31+
assert Version("1.2.3").satisfies(VersionConstraint(comparator=">=", version=Version("1.2.3")))
32+
33+
34+
def test_pypi_version():
35+
assert PypiVersion("1.2.3") == PypiVersion("1.2.3")
36+
assert PypiVersion("1.2.3") != PypiVersion("1.2.4")
37+
assert PypiVersion("1") == PypiVersion("1.0")
38+
assert PypiVersion.is_valid("1.2.3")
39+
assert not PypiVersion.is_valid("1.2.3a-1-a")
40+
assert PypiVersion.normalize("v1.2.3") == "1.2.3"
41+
assert PypiVersion("1").satisfies(
42+
VersionConstraint(comparator=">=", version=PypiVersion("1.0.0"))
43+
)
44+
assert PypiVersion("2.4") == PypiVersion("2.4.0")
45+
assert PypiVersion("2.5") > PypiVersion("2.4.0")
46+
assert PypiVersion("2.5") != PypiVersion("2.4.0")
47+
assert PypiVersion("2.4") < PypiVersion("2.5.0")
48+
assert PypiVersion("2.6") >= PypiVersion("2.5.0")
49+
assert PypiVersion("2.3") <= PypiVersion("2.5.0")
50+
assert PypiVersion("2.6") >= PypiVersion("2.6.0")
51+
assert PypiVersion("2.5") <= PypiVersion("2.5.0")
52+
53+
54+
def test_enhanced_semantic_version():
55+
assert EnhancedSemanticVersion("1.2.3-pre.1+build.1") != EnhancedSemanticVersion(
56+
"1.2.3-pre.1+build.0"
57+
)
58+
assert EnhancedSemanticVersion("1.2.3-pre.1+build.1") > EnhancedSemanticVersion(
59+
"1.2.3-pre.1+build.0"
60+
)
61+
assert (
62+
EnhancedSemanticVersion("1.2.3-pre.1+build.1").precedence_key
63+
!= EnhancedSemanticVersion("1.2.3-pre.1+build.0").precedence_key
64+
)
65+
66+
67+
def test_semver_version():
68+
assert SemverVersion.is_valid("1.2.3")
69+
assert SemverVersion.is_valid("1.2.3-pre.1+build.1")
70+
version = SemverVersion("1.2.3-pre.1+build.1")
71+
assert version.major == 1
72+
assert version.minor == 2
73+
assert version.patch == 3
74+
assert version.prerelease == ("pre", "1")
75+
assert version.build == ("build", "1")
76+
assert version.next_major() == SemverVersion("2.0.0")
77+
assert version.next_minor() == SemverVersion("1.3.0")
78+
assert version.next_patch() == SemverVersion("1.2.3")
79+
assert SemverVersion("1.2.3").next_patch() == SemverVersion("1.2.4")
80+
assert version.satisfies(
81+
VersionConstraint(comparator=">=", version=SemverVersion("1.2.3-pre.1+build.1"))
82+
)
83+
assert SemverVersion("1.0.0") == SemverVersion("1.0")
84+
assert SemverVersion("1.2.3+42") != SemverVersion("1.2.3+23")
85+
assert SemverVersion("1.2.3+42") > SemverVersion("1.2.3+23")
86+
87+
88+
def test_nginx_version():
89+
assert NginxVersion("1.2").is_stable
90+
assert NginxVersion("1.2.3").is_stable
91+
assert not NginxVersion("1.3.0").is_stable
92+
assert NginxVersion("1.0.0") == NginxVersion("1")
93+
assert NginxVersion("1.0.0") == NginxVersion("1.0")
94+
assert NginxVersion("1.0.0") == NginxVersion("1.0.0")
95+
assert NginxVersion("1.0") > NginxVersion("0.3.0")
96+
assert NginxVersion("0.1.0") < NginxVersion("0.3.0")
97+
assert NginxVersion("0.1") != NginxVersion("0.1.1")
98+
assert NginxVersion("0.1.1") >= NginxVersion("0.1")
99+
assert NginxVersion("0.1.1") >= NginxVersion("0.1.1")
100+
assert NginxVersion("0.1.1") <= NginxVersion("0.1.1")
101+
assert NginxVersion("0.1.1") <= NginxVersion("0.1.2")
102+
103+
104+
def test_rubygems_version():
105+
assert RubygemsVersion("1.2.0") == RubygemsVersion("1.2")
106+
assert RubygemsVersion.is_valid("1.2ab")
107+
assert RubygemsVersion.is_valid("1.2.3.a.b.c.d")
108+
assert not RubygemsVersion.is_valid("aa")
109+
assert RubygemsVersion("1.3.0") == RubygemsVersion("1.3")
110+
assert RubygemsVersion("1.3.0") <= RubygemsVersion("1.3")
111+
assert RubygemsVersion("1.1.3") <= RubygemsVersion("1.3")
112+
assert RubygemsVersion("1.4.pre") >= RubygemsVersion("1.3")
113+
assert RubygemsVersion("1.4.pre") != RubygemsVersion("1.4")
114+
115+
116+
def test_arch_linux_version():
117+
assert ArchLinuxVersion("1.2.3-1") == ArchLinuxVersion("1.2.3-1")
118+
assert ArchLinuxVersion("1.2.3-1") != ArchLinuxVersion("1.2.3-2")
119+
assert ArchLinuxVersion("1.2.3-1") > ArchLinuxVersion("1.2.3-0")
120+
assert ArchLinuxVersion("1.2.3-1") < ArchLinuxVersion("1.2.3-2")
121+
assert ArchLinuxVersion("1.2.3-1") >= ArchLinuxVersion("1.2.3-1")
122+
assert ArchLinuxVersion("1.2.3-1") <= ArchLinuxVersion("1.2.3-1")
123+
124+
125+
def test_debian_version():
126+
assert DebianVersion("1.2.3-1") == DebianVersion("1.2.3-1")
127+
assert not DebianVersion.is_valid("n")
128+
assert DebianVersion.is_valid("1.2.3-1")
129+
assert DebianVersion("1.2.3-1") == DebianVersion("1.2.3-1")
130+
assert DebianVersion("1.2.3-1") != DebianVersion("1.2.3-2")
131+
assert DebianVersion("1.2.3-1") > DebianVersion("1.2.3-0")
132+
assert DebianVersion("1.2.3-1") < DebianVersion("1.2.3-2")
133+
assert DebianVersion("1.2.3-1") >= DebianVersion("1.2.3-1")
134+
assert DebianVersion("1.2.3-1") <= DebianVersion("1.2.3-1")
135+
136+
137+
def test_maven_version():
138+
assert MavenVersion("1.2.3") == MavenVersion("1.2.3")
139+
assert MavenVersion("1.2.3") != MavenVersion("1.2.4")
140+
assert MavenVersion("1") == MavenVersion("1.0")
141+
assert MavenVersion.is_valid("1.2.3")
142+
assert MavenVersion("1.2.3") == MavenVersion("1.2.3")
143+
assert MavenVersion("1.2.3") != MavenVersion("1.2.4")
144+
assert MavenVersion("1.2.3") > MavenVersion("1.2.2")
145+
assert MavenVersion("1.2.3") < MavenVersion("1.2.4")
146+
assert MavenVersion("1.2.3") >= MavenVersion("1.2.3")
147+
assert MavenVersion("1.2.3") <= MavenVersion("1.2.3")
148+
149+
150+
def test_nuget_version():
151+
assert NugetVersion("1.2.3") == NugetVersion("1.2.3")
152+
assert NugetVersion("1.2.3") != NugetVersion("1.2.4")
153+
assert NugetVersion("1") == NugetVersion("1.0")
154+
assert NugetVersion.is_valid("1.2.3")
155+
assert not NugetVersion.is_valid("1.2.3a-1-a")
156+
157+
158+
def test_rpm_version():
159+
assert RpmVersion("1.2.3-1") == RpmVersion("1.2.3-1")
160+
assert RpmVersion("1.2.3-1") != RpmVersion("1.2.3-2")
161+
assert RpmVersion("1.2.3-1") > RpmVersion("1.2.3-0")
162+
assert RpmVersion("1.2.3-1") < RpmVersion("1.2.3-2")
163+
assert RpmVersion("1.2.3-1") >= RpmVersion("1.2.3-1")
164+
assert RpmVersion("1.2.3-1") <= RpmVersion("1.2.3-1")
165+
166+
167+
def test_gentoo_version():
168+
assert GentooVersion("1.2.3") == GentooVersion("1.2.3")
169+
assert GentooVersion("1.2.3") != GentooVersion("1.2.4")
170+
assert GentooVersion.is_valid("1.2.3")
171+
assert not GentooVersion.is_valid("1.2.3a-1-a")
172+
173+
174+
def test_alpine_linux_version():
175+
assert AlpineLinuxVersion("1.2.3-r1") == AlpineLinuxVersion("1.2.3-r1")
176+
assert AlpineLinuxVersion("1.2.3-r1") != AlpineLinuxVersion("1.2.3-r2")
177+
assert AlpineLinuxVersion("1.2.3-r1") > AlpineLinuxVersion("1.2.3-r0")
178+
assert AlpineLinuxVersion("1.2.3-r1") < AlpineLinuxVersion("1.2.3-r2")
179+
assert AlpineLinuxVersion("1.2.3-r1") >= AlpineLinuxVersion("1.2.3-r1")
180+
assert AlpineLinuxVersion("1.2.3-r1") <= AlpineLinuxVersion("1.2.3-r1")
181+
assert AlpineLinuxVersion.is_valid("1.2.3-r1")
182+
assert not AlpineLinuxVersion.is_valid("007")
183+
184+
185+
def test_composer_version():
186+
assert ComposerVersion("1.2.3") == ComposerVersion("1.2.3")
187+
assert ComposerVersion("1.2.3") != ComposerVersion("1.2.4")
188+
assert ComposerVersion("1") == ComposerVersion("1.0")
189+
assert ComposerVersion("v1.0") == ComposerVersion("1.0")
190+
assert ComposerVersion.is_valid("1.2.3")
191+
assert ComposerVersion.is_valid("1.2.3a-1-a")
192+
assert ComposerVersion("1.0.0") == ComposerVersion("v1")
193+
assert ComposerVersion("1.0.0") == ComposerVersion("v1.0")
194+
assert ComposerVersion("1.0.0") == ComposerVersion("v1.0.0")
195+
assert ComposerVersion("v1.0") > ComposerVersion("v0.3.0")
196+
assert ComposerVersion("v0.1.0") < ComposerVersion("v0.3.0")
197+
assert ComposerVersion("v0.1") != ComposerVersion("v0.1.1")
198+
assert ComposerVersion("v0.1.1") >= ComposerVersion("v0.1")
199+
assert ComposerVersion("v0.1.1") >= ComposerVersion("v0.1.1")
200+
assert ComposerVersion("v0.1.1") <= ComposerVersion("v0.1.1")
201+
assert ComposerVersion("v0.1.1") <= ComposerVersion("v0.1.2")
202+
203+
204+
def test_golang_version():
205+
assert GolangVersion("1.2.3") == GolangVersion("1.2.3")
206+
assert GolangVersion("1.2.3") != GolangVersion("1.2.4")
207+
assert GolangVersion("1") == GolangVersion("1.0")
208+
assert GolangVersion("v1.0") == GolangVersion("1.0")
209+
assert GolangVersion.is_valid("1.2.3")
210+
assert GolangVersion.is_valid("1.2.3a-1-a")
211+
assert GolangVersion("1.0.0") == GolangVersion("v1")
212+
assert GolangVersion("1.0.0") == GolangVersion("v1.0")
213+
assert GolangVersion("1.0.0") == GolangVersion("v1.0.0")
214+
assert GolangVersion("v1.0") > GolangVersion("v0.3.0")
215+
assert GolangVersion("v0.1.0") < GolangVersion("v0.3.0")
216+
assert GolangVersion("v0.1") != GolangVersion("v0.1.1")
217+
assert GolangVersion("v0.1.1") >= GolangVersion("v0.1")
218+
assert GolangVersion("v0.1.1") >= GolangVersion("v0.1.1")
219+
assert GolangVersion("v0.1.1") <= GolangVersion("v0.1.1")
220+
assert GolangVersion("v0.1.1") <= GolangVersion("v0.1.2")

0 commit comments

Comments
 (0)