Skip to content

Commit 6809ac9

Browse files
committed
Split test suite into separate files
1 parent 9a38a93 commit 6809ac9

10 files changed

+626
-578
lines changed

tests/test_bump.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import pytest
2+
from semver import (
3+
bump_build,
4+
bump_major,
5+
bump_minor,
6+
bump_patch,
7+
bump_prerelease,
8+
parse_version_info,
9+
)
10+
11+
12+
def test_should_bump_major():
13+
assert bump_major("3.4.5") == "4.0.0"
14+
15+
16+
def test_should_bump_minor():
17+
assert bump_minor("3.4.5") == "3.5.0"
18+
19+
20+
def test_should_bump_patch():
21+
assert bump_patch("3.4.5") == "3.4.6"
22+
23+
24+
def test_should_versioninfo_bump_major_and_minor():
25+
v = parse_version_info("3.4.5")
26+
expected = parse_version_info("4.1.0")
27+
assert v.bump_major().bump_minor() == expected
28+
29+
30+
def test_should_versioninfo_bump_minor_and_patch():
31+
v = parse_version_info("3.4.5")
32+
expected = parse_version_info("3.5.1")
33+
assert v.bump_minor().bump_patch() == expected
34+
35+
36+
def test_should_versioninfo_bump_patch_and_prerelease():
37+
v = parse_version_info("3.4.5-rc.1")
38+
expected = parse_version_info("3.4.6-rc.1")
39+
assert v.bump_patch().bump_prerelease() == expected
40+
41+
42+
def test_should_versioninfo_bump_patch_and_prerelease_with_token():
43+
v = parse_version_info("3.4.5-dev.1")
44+
expected = parse_version_info("3.4.6-dev.1")
45+
assert v.bump_patch().bump_prerelease("dev") == expected
46+
47+
48+
def test_should_versioninfo_bump_prerelease_and_build():
49+
v = parse_version_info("3.4.5-rc.1+build.1")
50+
expected = parse_version_info("3.4.5-rc.2+build.2")
51+
assert v.bump_prerelease().bump_build() == expected
52+
53+
54+
def test_should_versioninfo_bump_prerelease_and_build_with_token():
55+
v = parse_version_info("3.4.5-rc.1+b.1")
56+
expected = parse_version_info("3.4.5-rc.2+b.2")
57+
assert v.bump_prerelease().bump_build("b") == expected
58+
59+
60+
def test_should_versioninfo_bump_multiple():
61+
v = parse_version_info("3.4.5-rc.1+build.1")
62+
expected = parse_version_info("3.4.5-rc.2+build.2")
63+
assert v.bump_prerelease().bump_build().bump_build() == expected
64+
expected = parse_version_info("3.4.5-rc.3")
65+
assert v.bump_prerelease().bump_build().bump_build().bump_prerelease() == expected
66+
67+
68+
def test_should_ignore_extensions_for_bump():
69+
assert bump_patch("3.4.5-rc1+build4") == "3.4.6"
70+
71+
72+
@pytest.mark.parametrize(
73+
"version,token,expected",
74+
[
75+
("3.4.5-rc.9", None, "3.4.5-rc.10"),
76+
("3.4.5", None, "3.4.5-rc.1"),
77+
("3.4.5", "dev", "3.4.5-dev.1"),
78+
("3.4.5", "", "3.4.5-rc.1"),
79+
],
80+
)
81+
def test_should_bump_prerelease(version, token, expected):
82+
token = "rc" if not token else token
83+
assert bump_prerelease(version, token) == expected
84+
85+
86+
def test_should_ignore_build_on_prerelease_bump():
87+
assert bump_prerelease("3.4.5-rc.1+build.4") == "3.4.5-rc.2"
88+
89+
90+
@pytest.mark.parametrize(
91+
"version,expected",
92+
[
93+
("3.4.5-rc.1+build.9", "3.4.5-rc.1+build.10"),
94+
("3.4.5-rc.1+0009.dev", "3.4.5-rc.1+0010.dev"),
95+
("3.4.5-rc.1", "3.4.5-rc.1+build.1"),
96+
("3.4.5", "3.4.5+build.1"),
97+
],
98+
)
99+
def test_should_bump_build(version, expected):
100+
assert bump_build(version) == expected

tests/test_compare.py

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import pytest
2+
3+
from semver import compare, VersionInfo
4+
5+
6+
@pytest.mark.parametrize(
7+
"left,right",
8+
[
9+
("1.0.0", "2.0.0"),
10+
("1.0.0-alpha", "1.0.0-alpha.1"),
11+
("1.0.0-alpha.1", "1.0.0-alpha.beta"),
12+
("1.0.0-alpha.beta", "1.0.0-beta"),
13+
("1.0.0-beta", "1.0.0-beta.2"),
14+
("1.0.0-beta.2", "1.0.0-beta.11"),
15+
("1.0.0-beta.11", "1.0.0-rc.1"),
16+
("1.0.0-rc.1", "1.0.0"),
17+
],
18+
)
19+
def test_should_get_less(left, right):
20+
assert compare(left, right) == -1
21+
22+
23+
@pytest.mark.parametrize(
24+
"left,right",
25+
[
26+
("2.0.0", "1.0.0"),
27+
("1.0.0-alpha.1", "1.0.0-alpha"),
28+
("1.0.0-alpha.beta", "1.0.0-alpha.1"),
29+
("1.0.0-beta", "1.0.0-alpha.beta"),
30+
("1.0.0-beta.2", "1.0.0-beta"),
31+
("1.0.0-beta.11", "1.0.0-beta.2"),
32+
("1.0.0-rc.1", "1.0.0-beta.11"),
33+
("1.0.0", "1.0.0-rc.1"),
34+
],
35+
)
36+
def test_should_get_greater(left, right):
37+
assert compare(left, right) == 1
38+
39+
40+
@pytest.mark.parametrize(
41+
"left,right", [("foo", "bar"), ("1.0", "1.0.0"), ("1.x", "1.0.0")]
42+
)
43+
def test_should_raise_value_error_for_invalid_value(left, right):
44+
with pytest.raises(ValueError):
45+
compare(left, right)
46+
47+
48+
def test_should_follow_specification_comparison():
49+
"""
50+
produce comparison chain:
51+
1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11
52+
< 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build
53+
< 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a
54+
and in backward too.
55+
"""
56+
chain = [
57+
"1.0.0-alpha",
58+
"1.0.0-alpha.1",
59+
"1.0.0-beta.2",
60+
"1.0.0-beta.11",
61+
"1.0.0-rc.1",
62+
"1.0.0",
63+
"1.3.7+build",
64+
]
65+
versions = zip(chain[:-1], chain[1:])
66+
for low_version, high_version in versions:
67+
assert (
68+
compare(low_version, high_version) == -1
69+
), "%s should be lesser than %s" % (low_version, high_version)
70+
assert (
71+
compare(high_version, low_version) == 1
72+
), "%s should be higher than %s" % (high_version, low_version)
73+
74+
75+
@pytest.mark.parametrize("left,right", [("1.0.0-beta.2", "1.0.0-beta.11")])
76+
def test_should_compare_rc_builds(left, right):
77+
assert compare(left, right) == -1
78+
79+
80+
@pytest.mark.parametrize(
81+
"left,right", [("1.0.0-rc.1", "1.0.0"), ("1.0.0-rc.1+build.1", "1.0.0")]
82+
)
83+
def test_should_compare_release_candidate_with_release(left, right):
84+
assert compare(left, right) == -1
85+
86+
87+
@pytest.mark.parametrize(
88+
"left,right",
89+
[
90+
("2.0.0", "2.0.0"),
91+
("1.1.9-rc.1", "1.1.9-rc.1"),
92+
("1.1.9+build.1", "1.1.9+build.1"),
93+
("1.1.9-rc.1+build.1", "1.1.9-rc.1+build.1"),
94+
],
95+
)
96+
def test_should_say_equal_versions_are_equal(left, right):
97+
assert compare(left, right) == 0
98+
99+
100+
@pytest.mark.parametrize(
101+
"left,right,expected",
102+
[("1.1.9-rc.1", "1.1.9-rc.1+build.1", 0), ("1.1.9-rc.1", "1.1.9+build.1", -1)],
103+
)
104+
def test_should_compare_versions_with_build_and_release(left, right, expected):
105+
assert compare(left, right) == expected
106+
107+
108+
@pytest.mark.parametrize(
109+
"left,right,expected",
110+
[
111+
("1.0.0+build.1", "1.0.0", 0),
112+
("1.0.0-alpha.1+build.1", "1.0.0-alpha.1", 0),
113+
("1.0.0+build.1", "1.0.0-alpha.1", 1),
114+
("1.0.0+build.1", "1.0.0-alpha.1+build.1", 1),
115+
],
116+
)
117+
def test_should_ignore_builds_on_compare(left, right, expected):
118+
assert compare(left, right) == expected
119+
120+
121+
def test_should_get_more_rc1():
122+
assert compare("1.0.0-rc1", "1.0.0-rc0") == 1
123+
124+
125+
def test_should_compare_prerelease_with_numbers_and_letters():
126+
v1 = VersionInfo(major=1, minor=9, patch=1, prerelease="1unms", build=None)
127+
v2 = VersionInfo(major=1, minor=9, patch=1, prerelease=None, build="1asd")
128+
assert v1 < v2
129+
assert compare("1.9.1-1unms", "1.9.1+1") == -1

tests/test_deprecated_functions.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import pytest
2+
3+
from semver import (
4+
bump_build,
5+
bump_major,
6+
bump_minor,
7+
bump_patch,
8+
bump_prerelease,
9+
compare,
10+
deprecated,
11+
finalize_version,
12+
format_version,
13+
match,
14+
max_ver,
15+
min_ver,
16+
parse,
17+
parse_version_info,
18+
replace,
19+
)
20+
21+
22+
@pytest.mark.parametrize(
23+
"func, args, kwargs",
24+
[
25+
(bump_build, ("1.2.3",), {}),
26+
(bump_major, ("1.2.3",), {}),
27+
(bump_minor, ("1.2.3",), {}),
28+
(bump_patch, ("1.2.3",), {}),
29+
(bump_prerelease, ("1.2.3",), {}),
30+
(compare, ("1.2.1", "1.2.2"), {}),
31+
(format_version, (3, 4, 5), {}),
32+
(finalize_version, ("1.2.3-rc.5",), {}),
33+
(match, ("1.0.0", ">=1.0.0"), {}),
34+
(parse, ("1.2.3",), {}),
35+
(parse_version_info, ("1.2.3",), {}),
36+
(replace, ("1.2.3",), dict(major=2, patch=10)),
37+
(max_ver, ("1.2.3", "1.2.4"), {}),
38+
(min_ver, ("1.2.3", "1.2.4"), {}),
39+
],
40+
)
41+
def test_should_raise_deprecation_warnings(func, args, kwargs):
42+
with pytest.warns(
43+
DeprecationWarning, match=r"Function 'semver.[_a-zA-Z]+' is deprecated."
44+
) as record:
45+
func(*args, **kwargs)
46+
if not record:
47+
pytest.fail("Expected a DeprecationWarning for {}".format(func.__name__))
48+
assert len(record), "Expected one DeprecationWarning record"
49+
50+
51+
def test_deprecated_deco_without_argument():
52+
@deprecated
53+
def mock_func():
54+
return True
55+
56+
with pytest.deprecated_call():
57+
assert mock_func()

tests/test_docstrings.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import inspect
2+
3+
import pytest
4+
import semver
5+
6+
7+
def getallfunctions(module=semver):
8+
def getfunctions(_module):
9+
for _, func in inspect.getmembers(_module, inspect.isfunction):
10+
# Make sure you only investigate functions from our modules:
11+
if not func.__name__.startswith("_") and func.__module__.startswith(
12+
_module.__name__
13+
):
14+
yield func
15+
16+
def getmodules(_module):
17+
for _, m in inspect.getmembers(_module, inspect.ismodule):
18+
if m.__package__.startswith(_module.__package__):
19+
yield m
20+
21+
for ff in getfunctions(module):
22+
yield ff
23+
# for mm in getmodules(module):
24+
# for ff in getfunctions(mm):
25+
# yield ff
26+
27+
28+
SEMVERFUNCS = [func for func in getallfunctions()]
29+
30+
31+
@pytest.mark.parametrize(
32+
"func", SEMVERFUNCS, ids=[func.__name__ for func in SEMVERFUNCS]
33+
)
34+
def test_fordocstrings(func):
35+
assert func.__doc__, "Need a docstring for function %r from module %r" % (
36+
func.__name__,
37+
func.__module__,
38+
)

tests/test_format.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# import pytest
2+
3+
from semver import format_version, VersionInfo
4+
5+
6+
def test_should_correctly_format_version():
7+
assert format_version(3, 4, 5) == "3.4.5"
8+
assert format_version(3, 4, 5, "rc.1") == "3.4.5-rc.1"
9+
assert format_version(3, 4, 5, prerelease="rc.1") == "3.4.5-rc.1"
10+
assert format_version(3, 4, 5, build="build.4") == "3.4.5+build.4"
11+
assert format_version(3, 4, 5, "rc.1", "build.4") == "3.4.5-rc.1+build.4"
12+
13+
14+
def test_parse_method_for_version_info():
15+
s_version = "1.2.3-alpha.1.2+build.11.e0f985a"
16+
v = VersionInfo.parse(s_version)
17+
assert str(v) == s_version

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy