version_test.go raw
1 package goenv
2
3 import "testing"
4
5 func TestParse(t *testing.T) {
6 tests := []struct {
7 v string
8 major int
9 minor int
10 patch int
11 wantErr bool
12 }{
13 {"", 0, 0, 0, true},
14 {"go", 0, 0, 0, true},
15 {"go1", 0, 0, 0, true},
16 {"go.0", 0, 0, 0, true},
17 {"go1.0", 1, 0, 0, false},
18 {"go1.1", 1, 1, 0, false},
19 {"go1.23", 1, 23, 0, false},
20 {"go1.23.5", 1, 23, 5, false},
21 {"go1.23.5-rc6", 1, 23, 5, false},
22 {"go2.0", 2, 0, 0, false},
23 {"go2.0.15", 2, 0, 15, false},
24 {"devel go1.24-f99f5da18f Thu Nov 14 22:29:26 2024 +0000 darwin/arm64", 1, 24, 0, false},
25 }
26 for _, tt := range tests {
27 t.Run(tt.v, func(t *testing.T) {
28 major, minor, patch, err := Parse(tt.v)
29 if err == nil && tt.wantErr {
30 t.Errorf("Parse(%q): expected err != nil", tt.v)
31 }
32 if err != nil && !tt.wantErr {
33 t.Errorf("Parse(%q): expected err == nil", tt.v)
34 }
35 if major != tt.major || minor != tt.minor || patch != tt.patch {
36 t.Errorf("Parse(%q): expected %d, %d, %d, nil; got %d, %d, %d, %v",
37 tt.v, tt.major, tt.minor, tt.patch, major, minor, patch, err)
38 }
39 })
40 }
41 }
42
43 func TestCompare(t *testing.T) {
44 tests := []struct {
45 a string
46 b string
47 want int
48 }{
49 {"", "", 0},
50 {"go0", "go0", 0},
51 {"go0", "go1", -1},
52 {"go1", "go0", 1},
53 {"go1", "go2", -1},
54 {"go2", "go1", 1},
55 {"go1.1", "go1.2", -1},
56 {"go1.2", "go1.1", 1},
57 {"go1.1.0", "go1.2.0", -1},
58 {"go1.2.0", "go1.1.0", 1},
59 {"go1.2.0", "go2.3.0", -1},
60 {"go1.23.2", "go1.23.10", -1},
61 {"go0.1.22", "go1.23.101", -1},
62 }
63 for _, tt := range tests {
64 t.Run(tt.a+" "+tt.b, func(t *testing.T) {
65 got := Compare(tt.a, tt.b)
66 if got != tt.want {
67 t.Errorf("Compare(%q, %q): expected %d; got %d",
68 tt.a, tt.b, tt.want, got)
69 }
70 })
71 }
72 }
73