Repository navigation
Expand file tree
/
Copy pathtest_bump_token_validation.py
More file actions
98 lines (83 loc) · 2.85 KB
/
Copy pathtest_bump_token_validation.py
File metadata and controls
98 lines (83 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"""Regression tests: invalid bump tokens must be rejected.
:meth:`Version.bump_prerelease` and :meth:`Version.bump_build` accepted any
string as ``token`` and concatenated it into the resulting version, producing
a :class:`Version` whose string representation is not valid SemVer (it cannot
be round-tripped through :meth:`Version.parse`). These tests verify that
malformed tokens raise :class:`ValueError` instead.
"""
import pytest
from semver import Version
@pytest.mark.parametrize(
"token",
[
"bu/ild",
"build+meta",
"bu ild",
"build.",
".build",
"build..2",
],
)
def test_bump_build_rejects_invalid_token(token):
"""bump_build must reject tokens that are not valid build identifiers."""
version = Version.parse("1.0.0")
with pytest.raises(ValueError):
version.bump_build(token)
@pytest.mark.parametrize(
"token",
[
"rc+build",
"rc/",
"rc.",
".rc",
"rc..2",
],
)
def test_bump_prerelease_rejects_invalid_token(token):
"""bump_prerelease must reject tokens that are not valid prerelease identifiers."""
version = Version.parse("1.0.0")
with pytest.raises(ValueError):
version.bump_prerelease(token)
def test_bump_prerelease_rejects_numeric_leading_zero_segment():
"""A numeric prerelease token segment must not contain leading zeros."""
version = Version.parse("1.0.0")
with pytest.raises(ValueError):
version.bump_prerelease("rc.05")
@pytest.mark.parametrize(
"token,expected",
[
("build", "1.0.0+build.1"),
("b", "1.0.0+b.1"),
("build.2", "1.0.0+build.2.1"),
("dev-1", "1.0.0+dev-1.1"),
],
)
def test_bump_build_still_accepts_valid_tokens(token, expected):
"""Valid build tokens must keep working (documents unchanged behavior)."""
assert str(Version.parse("1.0.0").bump_build(token)) == expected
@pytest.mark.parametrize(
"token,expected",
[
("rc", "1.0.0-rc.1"),
("rc.1", "1.0.0-rc.1.1"),
("dev-1", "1.0.0-dev-1.1"),
("alpha.0", "1.0.0-alpha.0.1"),
],
)
def test_bump_prerelease_still_accepts_valid_tokens(token, expected):
"""Valid prerelease tokens must keep working (documents unchanged behavior)."""
assert str(Version.parse("1.0.0").bump_prerelease(token)) == expected
@pytest.mark.parametrize(
"token, expected_prerelease, expected_build",
[
("", "1.0.0-1", "1.0.0+1"),
(None, "1.0.0-rc.1", "1.0.0+build.1"),
],
ids=["empty-string", "none"],
)
def test_bump_methods_still_accept_empty_and_none(
token, expected_prerelease, expected_build
):
"""Empty string and None are documented and must keep their meaning."""
assert str(Version.parse("1.0.0").bump_prerelease(token)) == expected_prerelease
assert str(Version.parse("1.0.0").bump_build(token)) == expected_build