Skip to content

Commit bcd6eb0

Browse files
committed
goenv: Parse tests
1 parent 2f9e39e commit bcd6eb0

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

goenv/version.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,18 @@ func Parse(version string) (major, minor int, err error) {
6060
if err != nil {
6161
return 0, 0, fmt.Errorf("failed to parse version: %s", err)
6262
}
63-
return
63+
64+
return major, minor, nil
65+
}
66+
67+
// WantGoVersion returns true if Go version s is >= major and minor.
68+
// Returns false if s is not a valid Go version string. See [Parse] for more information.
69+
func WantGoVersion(s string, major, minor int) bool {
70+
ma, mi, err := Parse(s)
71+
if err != nil {
72+
return false
73+
}
74+
return ma >= major && mi >= minor
6475
}
6576

6677
// GorootVersionString returns the version string as reported by the Go

goenv/version_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
wantErr bool
11+
}{
12+
{"", 0, 0, true},
13+
{"go", 0, 0, true},
14+
{"go1", 0, 0, true},
15+
{"go.0", 0, 0, true},
16+
{"go1.0", 1, 0, false},
17+
{"go1.1", 1, 1, false},
18+
{"go1.23", 1, 23, false},
19+
{"go1.23.5", 1, 23, false},
20+
{"go1.23.5-rc6", 1, 23, false},
21+
{"go2.0", 2, 0, false},
22+
}
23+
for _, tt := range tests {
24+
t.Run(tt.v, func(t *testing.T) {
25+
major, minor, err := Parse(tt.v)
26+
if err == nil && tt.wantErr {
27+
t.Errorf("Parse(%q): expected err != nil", tt.v)
28+
}
29+
if err != nil && !tt.wantErr {
30+
t.Errorf("Parse(%q): expected err == nil", tt.v)
31+
}
32+
if major != tt.major || minor != tt.minor {
33+
t.Errorf("Parse(%q): expected %d, %d, nil; got %d, %d, %v",
34+
tt.v, tt.major, tt.minor, major, minor, err)
35+
}
36+
})
37+
}
38+
}

0 commit comments

Comments
 (0)