@@ -37,8 +37,13 @@ func TestNeedsUpdate(t *testing.T) {
3737 {"no v prefix current" , "1.0.0" , "v1.1.0" , true },
3838 {"no v prefix latest" , "v1.0.0" , "1.1.0" , true },
3939 {"no v prefix both" , "1.0.0" , "1.1.0" , true },
40- {"pre-release stripped" , "v1.0.0-alpha.1" , "v1.0.0" , false },
41- {"pre-release to release" , "v0.9.0-beta.1" , "v1.0.0" , true },
40+ {"pre-release to release" , "v1.0.0-alpha.1" , "v1.0.0" , true },
41+ {"pre-release major update" , "v0.9.0-beta.1" , "v1.0.0" , true },
42+ {"same pre-release" , "v0.0.1-alpha.7" , "v0.0.1-alpha.7" , false },
43+ {"pre-release bump" , "v0.0.1-alpha.7" , "v0.0.1-alpha.8" , true },
44+ {"pre-release newer current" , "v0.0.1-alpha.8" , "v0.0.1-alpha.7" , false },
45+ {"release to pre-release" , "v1.0.0" , "v1.0.0-alpha.1" , false },
46+ {"alpha to beta" , "v1.0.0-alpha.1" , "v1.0.0-beta.1" , true },
4247 }
4348
4449 for _ , tt := range tests {
@@ -255,21 +260,23 @@ func TestArchiveName(t *testing.T) {
255260
256261func TestParseSemver (t * testing.T ) {
257262 tests := []struct {
258- input string
259- want []int
263+ input string
264+ want []int
265+ wantPre string
260266 }{
261- {"1.2.3" , []int {1 , 2 , 3 }},
262- {"0.0.1" , []int {0 , 0 , 1 }},
263- {"10.20.30" , []int {10 , 20 , 30 }},
264- {"1.2.3-alpha.1" , []int {1 , 2 , 3 }},
265- {"invalid" , nil },
266- {"1.2" , nil },
267- {"1.2.x" , nil },
267+ {"1.2.3" , []int {1 , 2 , 3 }, "" },
268+ {"0.0.1" , []int {0 , 0 , 1 }, "" },
269+ {"10.20.30" , []int {10 , 20 , 30 }, "" },
270+ {"1.2.3-alpha.1" , []int {1 , 2 , 3 }, "alpha.1" },
271+ {"0.0.1-beta.2" , []int {0 , 0 , 1 }, "beta.2" },
272+ {"invalid" , nil , "" },
273+ {"1.2" , nil , "" },
274+ {"1.2.x" , nil , "" },
268275 }
269276
270277 for _ , tt := range tests {
271278 t .Run (tt .input , func (t * testing.T ) {
272- got := parseSemver (tt .input )
279+ got , gotPre := parseSemver (tt .input )
273280 if tt .want == nil {
274281 if got != nil {
275282 t .Errorf ("parseSemver(%q) = %v, want nil" , tt .input , got )
@@ -284,6 +291,34 @@ func TestParseSemver(t *testing.T) {
284291 t .Errorf ("parseSemver(%q)[%d] = %d, want %d" , tt .input , i , got [i ], tt .want [i ])
285292 }
286293 }
294+ if gotPre != tt .wantPre {
295+ t .Errorf ("parseSemver(%q) pre-release = %q, want %q" , tt .input , gotPre , tt .wantPre )
296+ }
297+ })
298+ }
299+ }
300+
301+ func TestComparePreRelease (t * testing.T ) {
302+ tests := []struct {
303+ name string
304+ a , b string
305+ want int
306+ }{
307+ {"equal" , "alpha.1" , "alpha.1" , 0 },
308+ {"numeric bump" , "alpha.7" , "alpha.8" , - 1 },
309+ {"numeric reverse" , "alpha.8" , "alpha.7" , 1 },
310+ {"alpha vs beta" , "alpha.1" , "beta.1" , - 1 },
311+ {"numeric vs alpha" , "1" , "alpha" , - 1 },
312+ {"shorter is less" , "alpha" , "alpha.1" , - 1 },
313+ {"longer is more" , "alpha.1" , "alpha" , 1 },
314+ }
315+
316+ for _ , tt := range tests {
317+ t .Run (tt .name , func (t * testing.T ) {
318+ got := comparePreRelease (tt .a , tt .b )
319+ if got != tt .want {
320+ t .Errorf ("comparePreRelease(%q, %q) = %d, want %d" , tt .a , tt .b , got , tt .want )
321+ }
287322 })
288323 }
289324}
0 commit comments