1
- import itertools
2
- import random
1
+ from __future__ import annotations
3
2
4
3
import pytest
5
4
6
- from commitizen .version_schemes import SemVer , VersionProtocol
7
-
8
- simple_flow = [
9
- (("0.1.0" , "PATCH" , None , 0 , None ), "0.1.1" ),
10
- (("0.1.0" , "PATCH" , None , 0 , 1 ), "0.1.1-dev1" ),
11
- (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
12
- (("0.2.0" , "MINOR" , None , 0 , None ), "0.3.0" ),
13
- (("0.2.0" , "MINOR" , None , 0 , 1 ), "0.3.0-dev1" ),
14
- (("0.3.0" , "PATCH" , None , 0 , None ), "0.3.1" ),
15
- (("0.3.0" , "PATCH" , "alpha" , 0 , None ), "0.3.1-a0" ),
16
- (("0.3.1a0" , None , "alpha" , 0 , None ), "0.3.1-a1" ),
17
- (("0.3.0" , "PATCH" , "alpha" , 1 , None ), "0.3.1-a1" ),
18
- (("0.3.1a0" , None , "alpha" , 1 , None ), "0.3.1-a1" ),
19
- (("0.3.1a0" , None , None , 0 , None ), "0.3.1" ),
20
- (("0.3.1" , "PATCH" , None , 0 , None ), "0.3.2" ),
21
- (("0.4.2" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
22
- (("1.0.0a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
23
- (("1.0.0a1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
24
- (("1.0.0a1" , None , "alpha" , 0 , 1 ), "1.0.0-a2-dev1" ),
25
- (("1.0.0a2.dev0" , None , "alpha" , 0 , 1 ), "1.0.0-a3-dev1" ),
26
- (("1.0.0a2.dev0" , None , "alpha" , 0 , 0 ), "1.0.0-a3-dev0" ),
27
- (("1.0.0a1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
28
- (("1.0.0b0" , None , "beta" , 0 , None ), "1.0.0-b1" ),
29
- (("1.0.0b1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
30
- (("1.0.0rc0" , None , "rc" , 0 , None ), "1.0.0-rc1" ),
31
- (("1.0.0rc0" , None , "rc" , 0 , 1 ), "1.0.0-rc1-dev1" ),
32
- (("1.0.0rc0" , "PATCH" , None , 0 , None ), "1.0.0" ),
33
- (("1.0.0a3.dev0" , None , "beta" , 0 , None ), "1.0.0-b0" ),
34
- (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
35
- (("1.0.1" , "PATCH" , None , 0 , None ), "1.0.2" ),
36
- (("1.0.2" , "MINOR" , None , 0 , None ), "1.1.0" ),
37
- (("1.1.0" , "MINOR" , None , 0 , None ), "1.2.0" ),
38
- (("1.2.0" , "PATCH" , None , 0 , None ), "1.2.1" ),
39
- (("1.2.1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
40
- ]
41
-
42
- local_versions = [
43
- (("4.5.0+0.1.0" , "PATCH" , None , 0 , None ), "4.5.0+0.1.1" ),
44
- (("4.5.0+0.1.1" , "MINOR" , None , 0 , None ), "4.5.0+0.2.0" ),
45
- (("4.5.0+0.2.0" , "MAJOR" , None , 0 , None ), "4.5.0+1.0.0" ),
46
- ]
47
-
48
- # never bump backwards on pre-releases
49
- linear_prerelease_cases = [
50
- (("0.1.1b1" , None , "alpha" , 0 , None ), "0.1.1-b2" ),
51
- (("0.1.1rc0" , None , "alpha" , 0 , None ), "0.1.1-rc1" ),
52
- (("0.1.1rc0" , None , "beta" , 0 , None ), "0.1.1-rc1" ),
53
- ]
54
-
55
- weird_cases = [
56
- (("1.1" , "PATCH" , None , 0 , None ), "1.1.1" ),
57
- (("1" , "MINOR" , None , 0 , None ), "1.1.0" ),
58
- (("1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
59
- (("1a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
60
- (("1a0" , None , "alpha" , 1 , None ), "1.0.0-a1" ),
61
- (("1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
62
- (("1" , None , "beta" , 1 , None ), "1.0.0-b1" ),
63
- (("1beta" , None , "beta" , 0 , None ), "1.0.0-b1" ),
64
- (("1.0.0alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
65
- (("1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
66
- (("1.0.0rc1+e20d7b57f3eb" , "PATCH" , None , 0 , None ), "1.0.0" ),
67
- ]
68
-
69
- # test driven development
70
- tdd_cases = [
71
- (("0.1.1" , "PATCH" , None , 0 , None ), "0.1.2" ),
72
- (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
73
- (("2.1.1" , "MAJOR" , None , 0 , None ), "3.0.0" ),
74
- (("0.9.0" , "PATCH" , "alpha" , 0 , None ), "0.9.1-a0" ),
75
- (("0.9.0" , "MINOR" , "alpha" , 0 , None ), "0.10.0-a0" ),
76
- (("0.9.0" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
77
- (("0.9.0" , "MAJOR" , "alpha" , 1 , None ), "1.0.0-a1" ),
78
- (("1.0.0a2" , None , "beta" , 0 , None ), "1.0.0-b0" ),
79
- (("1.0.0a2" , None , "beta" , 1 , None ), "1.0.0-b1" ),
80
- (("1.0.0beta1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
81
- (("1.0.0rc1" , None , "rc" , 0 , None ), "1.0.0-rc2" ),
82
- (("1.0.0-a0" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
83
- (("1.0.0-alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
84
- ]
85
-
86
- exact_cases = [
87
- (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
88
- (("1.0.0" , "MINOR" , None , 0 , None ), "1.1.0" ),
89
- # with exact_increment=False: "1.0.0-b0"
90
- (("1.0.0a1" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
91
- # with exact_increment=False: "1.0.0-b1"
92
- (("1.0.0b0" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
93
- # with exact_increment=False: "1.0.0-rc0"
94
- (("1.0.0b1" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
95
- # with exact_increment=False: "1.0.0-rc1"
96
- (("1.0.0rc0" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
97
- # with exact_increment=False: "1.0.0-rc1-dev1"
98
- (("1.0.0rc0" , "PATCH" , "rc" , 0 , 1 ), "1.0.1-rc0-dev1" ),
99
- # with exact_increment=False: "1.0.0-b0"
100
- (("1.0.0a1" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
101
- # with exact_increment=False: "1.0.0-b1"
102
- (("1.0.0b0" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
103
- # with exact_increment=False: "1.0.0-rc0"
104
- (("1.0.0b1" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
105
- # with exact_increment=False: "1.0.0-rc1"
106
- (("1.0.0rc0" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
107
- # with exact_increment=False: "1.0.0-rc1-dev1"
108
- (("1.0.0rc0" , "MINOR" , "rc" , 0 , 1 ), "1.1.0-rc0-dev1" ),
109
- # with exact_increment=False: "2.0.0"
110
- (("2.0.0b0" , "MAJOR" , None , 0 , None ), "3.0.0" ),
111
- # with exact_increment=False: "2.0.0"
112
- (("2.0.0b0" , "MINOR" , None , 0 , None ), "2.1.0" ),
113
- # with exact_increment=False: "2.0.0"
114
- (("2.0.0b0" , "PATCH" , None , 0 , None ), "2.0.1" ),
115
- # same with exact_increment=False
116
- (("2.0.0b0" , "MAJOR" , "alpha" , 0 , None ), "3.0.0-a0" ),
117
- # with exact_increment=False: "2.0.0b1"
118
- (("2.0.0b0" , "MINOR" , "alpha" , 0 , None ), "2.1.0-a0" ),
119
- # with exact_increment=False: "2.0.0b1"
120
- (("2.0.0b0" , "PATCH" , "alpha" , 0 , None ), "2.0.1-a0" ),
121
- ]
5
+ from commitizen .version_schemes import Increment , Prerelease , SemVer , VersionProtocol
122
6
123
7
124
8
@pytest .mark .parametrize (
125
9
"test_input, expected" ,
126
- itertools .chain (tdd_cases , weird_cases , simple_flow , linear_prerelease_cases ),
10
+ [
11
+ # test driven development
12
+ (("0.1.1" , "PATCH" , None , 0 , None ), "0.1.2" ),
13
+ (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
14
+ (("2.1.1" , "MAJOR" , None , 0 , None ), "3.0.0" ),
15
+ (("0.9.0" , "PATCH" , "alpha" , 0 , None ), "0.9.1-a0" ),
16
+ (("0.9.0" , "MINOR" , "alpha" , 0 , None ), "0.10.0-a0" ),
17
+ (("0.9.0" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
18
+ (("0.9.0" , "MAJOR" , "alpha" , 1 , None ), "1.0.0-a1" ),
19
+ (("1.0.0a2" , None , "beta" , 0 , None ), "1.0.0-b0" ),
20
+ (("1.0.0a2" , None , "beta" , 1 , None ), "1.0.0-b1" ),
21
+ (("1.0.0beta1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
22
+ (("1.0.0rc1" , None , "rc" , 0 , None ), "1.0.0-rc2" ),
23
+ (("1.0.0-a0" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
24
+ (("1.0.0-alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
25
+ # weird cases
26
+ (("1.1" , "PATCH" , None , 0 , None ), "1.1.1" ),
27
+ (("1" , "MINOR" , None , 0 , None ), "1.1.0" ),
28
+ (("1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
29
+ (("1a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
30
+ (("1a0" , None , "alpha" , 1 , None ), "1.0.0-a1" ),
31
+ (("1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
32
+ (("1" , None , "beta" , 1 , None ), "1.0.0-b1" ),
33
+ (("1beta" , None , "beta" , 0 , None ), "1.0.0-b1" ),
34
+ (("1.0.0alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
35
+ (("1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
36
+ (("1.0.0rc1+e20d7b57f3eb" , "PATCH" , None , 0 , None ), "1.0.0" ),
37
+ # simple flow
38
+ (("0.1.0" , "PATCH" , None , 0 , None ), "0.1.1" ),
39
+ (("0.1.0" , "PATCH" , None , 0 , 1 ), "0.1.1-dev1" ),
40
+ (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
41
+ (("0.2.0" , "MINOR" , None , 0 , None ), "0.3.0" ),
42
+ (("0.2.0" , "MINOR" , None , 0 , 1 ), "0.3.0-dev1" ),
43
+ (("0.3.0" , "PATCH" , None , 0 , None ), "0.3.1" ),
44
+ (("0.3.0" , "PATCH" , "alpha" , 0 , None ), "0.3.1-a0" ),
45
+ (("0.3.1a0" , None , "alpha" , 0 , None ), "0.3.1-a1" ),
46
+ (("0.3.0" , "PATCH" , "alpha" , 1 , None ), "0.3.1-a1" ),
47
+ (("0.3.1a0" , None , "alpha" , 1 , None ), "0.3.1-a1" ),
48
+ (("0.3.1a0" , None , None , 0 , None ), "0.3.1" ),
49
+ (("0.3.1" , "PATCH" , None , 0 , None ), "0.3.2" ),
50
+ (("0.4.2" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
51
+ (("1.0.0a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
52
+ (("1.0.0a1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
53
+ (("1.0.0a1" , None , "alpha" , 0 , 1 ), "1.0.0-a2-dev1" ),
54
+ (("1.0.0a2.dev0" , None , "alpha" , 0 , 1 ), "1.0.0-a3-dev1" ),
55
+ (("1.0.0a2.dev0" , None , "alpha" , 0 , 0 ), "1.0.0-a3-dev0" ),
56
+ (("1.0.0a1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
57
+ (("1.0.0b0" , None , "beta" , 0 , None ), "1.0.0-b1" ),
58
+ (("1.0.0b1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
59
+ (("1.0.0rc0" , None , "rc" , 0 , None ), "1.0.0-rc1" ),
60
+ (("1.0.0rc0" , None , "rc" , 0 , 1 ), "1.0.0-rc1-dev1" ),
61
+ (("1.0.0rc0" , "PATCH" , None , 0 , None ), "1.0.0" ),
62
+ (("1.0.0a3.dev0" , None , "beta" , 0 , None ), "1.0.0-b0" ),
63
+ (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
64
+ (("1.0.1" , "PATCH" , None , 0 , None ), "1.0.2" ),
65
+ (("1.0.2" , "MINOR" , None , 0 , None ), "1.1.0" ),
66
+ (("1.1.0" , "MINOR" , None , 0 , None ), "1.2.0" ),
67
+ (("1.2.0" , "PATCH" , None , 0 , None ), "1.2.1" ),
68
+ (("1.2.1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
69
+ # linear prerelease cases (never bump backwards on pre-releases)
70
+ (("0.1.1b1" , None , "alpha" , 0 , None ), "0.1.1-b2" ),
71
+ (("0.1.1rc0" , None , "alpha" , 0 , None ), "0.1.1-rc1" ),
72
+ (("0.1.1rc0" , None , "beta" , 0 , None ), "0.1.1-rc1" ),
73
+ ],
127
74
)
128
- def test_bump_semver_version (test_input , expected ):
129
- current_version = test_input [0 ]
130
- increment = test_input [1 ]
131
- prerelease = test_input [2 ]
132
- prerelease_offset = test_input [3 ]
133
- devrelease = test_input [4 ]
75
+ def test_bump_semver_version (
76
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
77
+ ):
78
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
134
79
assert (
135
80
str (
136
81
SemVer (current_version ).bump (
@@ -144,13 +89,49 @@ def test_bump_semver_version(test_input, expected):
144
89
)
145
90
146
91
147
- @pytest .mark .parametrize ("test_input, expected" , exact_cases )
148
- def test_bump_semver_version_force (test_input , expected ):
149
- current_version = test_input [0 ]
150
- increment = test_input [1 ]
151
- prerelease = test_input [2 ]
152
- prerelease_offset = test_input [3 ]
153
- devrelease = test_input [4 ]
92
+ @pytest .mark .parametrize (
93
+ "test_input, expected" ,
94
+ [
95
+ (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
96
+ (("1.0.0" , "MINOR" , None , 0 , None ), "1.1.0" ),
97
+ # with exact_increment=False: "1.0.0-b0"
98
+ (("1.0.0a1" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
99
+ # with exact_increment=False: "1.0.0-b1"
100
+ (("1.0.0b0" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
101
+ # with exact_increment=False: "1.0.0-rc0"
102
+ (("1.0.0b1" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
103
+ # with exact_increment=False: "1.0.0-rc1"
104
+ (("1.0.0rc0" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
105
+ # with exact_increment=False: "1.0.0-rc1-dev1"
106
+ (("1.0.0rc0" , "PATCH" , "rc" , 0 , 1 ), "1.0.1-rc0-dev1" ),
107
+ # with exact_increment=False: "1.0.0-b0"
108
+ (("1.0.0a1" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
109
+ # with exact_increment=False: "1.0.0-b1"
110
+ (("1.0.0b0" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
111
+ # with exact_increment=False: "1.0.0-rc0"
112
+ (("1.0.0b1" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
113
+ # with exact_increment=False: "1.0.0-rc1"
114
+ (("1.0.0rc0" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
115
+ # with exact_increment=False: "1.0.0-rc1-dev1"
116
+ (("1.0.0rc0" , "MINOR" , "rc" , 0 , 1 ), "1.1.0-rc0-dev1" ),
117
+ # with exact_increment=False: "2.0.0"
118
+ (("2.0.0b0" , "MAJOR" , None , 0 , None ), "3.0.0" ),
119
+ # with exact_increment=False: "2.0.0"
120
+ (("2.0.0b0" , "MINOR" , None , 0 , None ), "2.1.0" ),
121
+ # with exact_increment=False: "2.0.0"
122
+ (("2.0.0b0" , "PATCH" , None , 0 , None ), "2.0.1" ),
123
+ # same with exact_increment=False
124
+ (("2.0.0b0" , "MAJOR" , "alpha" , 0 , None ), "3.0.0-a0" ),
125
+ # with exact_increment=False: "2.0.0b1"
126
+ (("2.0.0b0" , "MINOR" , "alpha" , 0 , None ), "2.1.0-a0" ),
127
+ # with exact_increment=False: "2.0.0b1"
128
+ (("2.0.0b0" , "PATCH" , "alpha" , 0 , None ), "2.0.1-a0" ),
129
+ ],
130
+ )
131
+ def test_bump_semver_version_force (
132
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
133
+ ):
134
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
154
135
assert (
155
136
str (
156
137
SemVer (current_version ).bump (
@@ -165,13 +146,18 @@ def test_bump_semver_version_force(test_input, expected):
165
146
)
166
147
167
148
168
- @pytest .mark .parametrize ("test_input,expected" , local_versions )
169
- def test_bump_semver_version_local (test_input , expected ):
170
- current_version = test_input [0 ]
171
- increment = test_input [1 ]
172
- prerelease = test_input [2 ]
173
- prerelease_offset = test_input [3 ]
174
- devrelease = test_input [4 ]
149
+ @pytest .mark .parametrize (
150
+ "test_input, expected" ,
151
+ [
152
+ (("4.5.0+0.1.0" , "PATCH" , None , 0 , None ), "4.5.0+0.1.1" ),
153
+ (("4.5.0+0.1.1" , "MINOR" , None , 0 , None ), "4.5.0+0.2.0" ),
154
+ (("4.5.0+0.2.0" , "MAJOR" , None , 0 , None ), "4.5.0+1.0.0" ),
155
+ ],
156
+ )
157
+ def test_bump_semver_version_local (
158
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
159
+ ):
160
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
175
161
is_local_version = True
176
162
assert (
177
163
str (
@@ -194,76 +180,3 @@ def test_semver_scheme_property():
194
180
195
181
def test_semver_implement_version_protocol ():
196
182
assert isinstance (SemVer ("0.0.1" ), VersionProtocol )
197
-
198
-
199
- def test_semver_sortable ():
200
- test_input = [x [0 ][0 ] for x in simple_flow ]
201
- test_input .extend ([x [1 ] for x in simple_flow ])
202
- # randomize
203
- random_input = [SemVer (x ) for x in random .sample (test_input , len (test_input ))]
204
- assert len (random_input ) == len (test_input )
205
- sorted_result = [str (x ) for x in sorted (random_input )]
206
- assert sorted_result == [
207
- "0.1.0" ,
208
- "0.1.0" ,
209
- "0.1.1-dev1" ,
210
- "0.1.1" ,
211
- "0.1.1" ,
212
- "0.2.0" ,
213
- "0.2.0" ,
214
- "0.2.0" ,
215
- "0.3.0-dev1" ,
216
- "0.3.0" ,
217
- "0.3.0" ,
218
- "0.3.0" ,
219
- "0.3.0" ,
220
- "0.3.1-a0" ,
221
- "0.3.1-a0" ,
222
- "0.3.1-a0" ,
223
- "0.3.1-a0" ,
224
- "0.3.1-a1" ,
225
- "0.3.1-a1" ,
226
- "0.3.1-a1" ,
227
- "0.3.1" ,
228
- "0.3.1" ,
229
- "0.3.1" ,
230
- "0.3.2" ,
231
- "0.4.2" ,
232
- "1.0.0-a0" ,
233
- "1.0.0-a0" ,
234
- "1.0.0-a1" ,
235
- "1.0.0-a1" ,
236
- "1.0.0-a1" ,
237
- "1.0.0-a1" ,
238
- "1.0.0-a2-dev0" ,
239
- "1.0.0-a2-dev0" ,
240
- "1.0.0-a2-dev1" ,
241
- "1.0.0-a2" ,
242
- "1.0.0-a3-dev0" ,
243
- "1.0.0-a3-dev0" ,
244
- "1.0.0-a3-dev1" ,
245
- "1.0.0-b0" ,
246
- "1.0.0-b0" ,
247
- "1.0.0-b0" ,
248
- "1.0.0-b1" ,
249
- "1.0.0-b1" ,
250
- "1.0.0-rc0" ,
251
- "1.0.0-rc0" ,
252
- "1.0.0-rc0" ,
253
- "1.0.0-rc0" ,
254
- "1.0.0-rc1-dev1" ,
255
- "1.0.0-rc1" ,
256
- "1.0.0" ,
257
- "1.0.0" ,
258
- "1.0.1" ,
259
- "1.0.1" ,
260
- "1.0.2" ,
261
- "1.0.2" ,
262
- "1.1.0" ,
263
- "1.1.0" ,
264
- "1.2.0" ,
265
- "1.2.0" ,
266
- "1.2.1" ,
267
- "1.2.1" ,
268
- "2.0.0" ,
269
- ]
0 commit comments