1
- import itertools
2
- import random
3
-
4
1
import pytest
5
2
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
- ]
3
+ from commitizen .version_schemes import Increment , Prerelease , SemVer , VersionProtocol
122
4
123
5
124
6
@pytest .mark .parametrize (
125
7
"test_input, expected" ,
126
- itertools .chain (tdd_cases , weird_cases , simple_flow , linear_prerelease_cases ),
8
+ [
9
+ # tdd_cases
10
+ (("0.1.1" , "PATCH" , None , 0 , None ), "0.1.2" ),
11
+ (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
12
+ (("2.1.1" , "MAJOR" , None , 0 , None ), "3.0.0" ),
13
+ (("0.9.0" , "PATCH" , "alpha" , 0 , None ), "0.9.1-a0" ),
14
+ (("0.9.0" , "MINOR" , "alpha" , 0 , None ), "0.10.0-a0" ),
15
+ (("0.9.0" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
16
+ (("0.9.0" , "MAJOR" , "alpha" , 1 , None ), "1.0.0-a1" ),
17
+ (("1.0.0a2" , None , "beta" , 0 , None ), "1.0.0-b0" ),
18
+ (("1.0.0a2" , None , "beta" , 1 , None ), "1.0.0-b1" ),
19
+ (("1.0.0beta1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
20
+ (("1.0.0rc1" , None , "rc" , 0 , None ), "1.0.0-rc2" ),
21
+ (("1.0.0-a0" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
22
+ (("1.0.0-alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
23
+ # weird_cases
24
+ (("1.1" , "PATCH" , None , 0 , None ), "1.1.1" ),
25
+ (("1" , "MINOR" , None , 0 , None ), "1.1.0" ),
26
+ (("1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
27
+ (("1a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
28
+ (("1a0" , None , "alpha" , 1 , None ), "1.0.0-a1" ),
29
+ (("1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
30
+ (("1" , None , "beta" , 1 , None ), "1.0.0-b1" ),
31
+ (("1beta" , None , "beta" , 0 , None ), "1.0.0-b1" ),
32
+ (("1.0.0alpha1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
33
+ (("1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
34
+ (("1.0.0rc1+e20d7b57f3eb" , "PATCH" , None , 0 , None ), "1.0.0" ),
35
+ # simple_flow
36
+ (("0.1.0" , "PATCH" , None , 0 , None ), "0.1.1" ),
37
+ (("0.1.0" , "PATCH" , None , 0 , 1 ), "0.1.1-dev1" ),
38
+ (("0.1.1" , "MINOR" , None , 0 , None ), "0.2.0" ),
39
+ (("0.2.0" , "MINOR" , None , 0 , None ), "0.3.0" ),
40
+ (("0.2.0" , "MINOR" , None , 0 , 1 ), "0.3.0-dev1" ),
41
+ (("0.3.0" , "PATCH" , None , 0 , None ), "0.3.1" ),
42
+ (("0.3.0" , "PATCH" , "alpha" , 0 , None ), "0.3.1-a0" ),
43
+ (("0.3.1a0" , None , "alpha" , 0 , None ), "0.3.1-a1" ),
44
+ (("0.3.0" , "PATCH" , "alpha" , 1 , None ), "0.3.1-a1" ),
45
+ (("0.3.1a0" , None , "alpha" , 1 , None ), "0.3.1-a1" ),
46
+ (("0.3.1a0" , None , None , 0 , None ), "0.3.1" ),
47
+ (("0.3.1" , "PATCH" , None , 0 , None ), "0.3.2" ),
48
+ (("0.4.2" , "MAJOR" , "alpha" , 0 , None ), "1.0.0-a0" ),
49
+ (("1.0.0a0" , None , "alpha" , 0 , None ), "1.0.0-a1" ),
50
+ (("1.0.0a1" , None , "alpha" , 0 , None ), "1.0.0-a2" ),
51
+ (("1.0.0a1" , None , "alpha" , 0 , 1 ), "1.0.0-a2-dev1" ),
52
+ (("1.0.0a2.dev0" , None , "alpha" , 0 , 1 ), "1.0.0-a3-dev1" ),
53
+ (("1.0.0a2.dev0" , None , "alpha" , 0 , 0 ), "1.0.0-a3-dev0" ),
54
+ (("1.0.0a1" , None , "beta" , 0 , None ), "1.0.0-b0" ),
55
+ (("1.0.0b0" , None , "beta" , 0 , None ), "1.0.0-b1" ),
56
+ (("1.0.0b1" , None , "rc" , 0 , None ), "1.0.0-rc0" ),
57
+ (("1.0.0rc0" , None , "rc" , 0 , None ), "1.0.0-rc1" ),
58
+ (("1.0.0rc0" , None , "rc" , 0 , 1 ), "1.0.0-rc1-dev1" ),
59
+ (("1.0.0rc0" , "PATCH" , None , 0 , None ), "1.0.0" ),
60
+ (("1.0.0a3.dev0" , None , "beta" , 0 , None ), "1.0.0-b0" ),
61
+ (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
62
+ (("1.0.1" , "PATCH" , None , 0 , None ), "1.0.2" ),
63
+ (("1.0.2" , "MINOR" , None , 0 , None ), "1.1.0" ),
64
+ (("1.1.0" , "MINOR" , None , 0 , None ), "1.2.0" ),
65
+ (("1.2.0" , "PATCH" , None , 0 , None ), "1.2.1" ),
66
+ (("1.2.1" , "MAJOR" , None , 0 , None ), "2.0.0" ),
67
+ # linear_prerelease_cases
68
+ (("0.1.1b1" , None , "alpha" , 0 , None ), "0.1.1-b2" ),
69
+ (("0.1.1rc0" , None , "alpha" , 0 , None ), "0.1.1-rc1" ),
70
+ (("0.1.1rc0" , None , "beta" , 0 , None ), "0.1.1-rc1" ),
71
+ ],
127
72
)
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 ]
73
+ def test_bump_semver_version (
74
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
75
+ ):
76
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
134
77
assert (
135
78
str (
136
79
SemVer (current_version ).bump (
@@ -144,13 +87,49 @@ def test_bump_semver_version(test_input, expected):
144
87
)
145
88
146
89
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 ]
90
+ @pytest .mark .parametrize (
91
+ "test_input, expected" ,
92
+ [
93
+ (("1.0.0" , "PATCH" , None , 0 , None ), "1.0.1" ),
94
+ (("1.0.0" , "MINOR" , None , 0 , None ), "1.1.0" ),
95
+ # with exact_increment=False: "1.0.0-b0"
96
+ (("1.0.0a1" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
97
+ # with exact_increment=False: "1.0.0-b1"
98
+ (("1.0.0b0" , "PATCH" , "beta" , 0 , None ), "1.0.1-b0" ),
99
+ # with exact_increment=False: "1.0.0-rc0"
100
+ (("1.0.0b1" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
101
+ # with exact_increment=False: "1.0.0-rc1"
102
+ (("1.0.0rc0" , "PATCH" , "rc" , 0 , None ), "1.0.1-rc0" ),
103
+ # with exact_increment=False: "1.0.0-rc1-dev1"
104
+ (("1.0.0rc0" , "PATCH" , "rc" , 0 , 1 ), "1.0.1-rc0-dev1" ),
105
+ # with exact_increment=False: "1.0.0-b0"
106
+ (("1.0.0a1" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
107
+ # with exact_increment=False: "1.0.0-b1"
108
+ (("1.0.0b0" , "MINOR" , "beta" , 0 , None ), "1.1.0-b0" ),
109
+ # with exact_increment=False: "1.0.0-rc0"
110
+ (("1.0.0b1" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
111
+ # with exact_increment=False: "1.0.0-rc1"
112
+ (("1.0.0rc0" , "MINOR" , "rc" , 0 , None ), "1.1.0-rc0" ),
113
+ # with exact_increment=False: "1.0.0-rc1-dev1"
114
+ (("1.0.0rc0" , "MINOR" , "rc" , 0 , 1 ), "1.1.0-rc0-dev1" ),
115
+ # with exact_increment=False: "2.0.0"
116
+ (("2.0.0b0" , "MAJOR" , None , 0 , None ), "3.0.0" ),
117
+ # with exact_increment=False: "2.0.0"
118
+ (("2.0.0b0" , "MINOR" , None , 0 , None ), "2.1.0" ),
119
+ # with exact_increment=False: "2.0.0"
120
+ (("2.0.0b0" , "PATCH" , None , 0 , None ), "2.0.1" ),
121
+ # same with exact_increment=False
122
+ (("2.0.0b0" , "MAJOR" , "alpha" , 0 , None ), "3.0.0-a0" ),
123
+ # with exact_increment=False: "2.0.0b1"
124
+ (("2.0.0b0" , "MINOR" , "alpha" , 0 , None ), "2.1.0-a0" ),
125
+ # with exact_increment=False: "2.0.0b1"
126
+ (("2.0.0b0" , "PATCH" , "alpha" , 0 , None ), "2.0.1-a0" ),
127
+ ],
128
+ )
129
+ def test_bump_semver_version_force (
130
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
131
+ ):
132
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
154
133
assert (
155
134
str (
156
135
SemVer (current_version ).bump (
@@ -165,13 +144,18 @@ def test_bump_semver_version_force(test_input, expected):
165
144
)
166
145
167
146
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 ]
147
+ @pytest .mark .parametrize (
148
+ "test_input, expected" ,
149
+ [
150
+ (("4.5.0+0.1.0" , "PATCH" , None , 0 , None ), "4.5.0+0.1.1" ),
151
+ (("4.5.0+0.1.1" , "MINOR" , None , 0 , None ), "4.5.0+0.2.0" ),
152
+ (("4.5.0+0.2.0" , "MAJOR" , None , 0 , None ), "4.5.0+1.0.0" ),
153
+ ],
154
+ )
155
+ def test_bump_semver_version_local (
156
+ test_input : tuple [str , Increment , Prerelease | None , int , int | None ], expected : str
157
+ ):
158
+ current_version , increment , prerelease , prerelease_offset , devrelease = test_input
175
159
is_local_version = True
176
160
assert (
177
161
str (
@@ -194,76 +178,3 @@ def test_semver_scheme_property():
194
178
195
179
def test_semver_implement_version_protocol ():
196
180
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