@@ -10,6 +10,7 @@ func TestNewVersion(t *testing.T) {
10
10
version string
11
11
err bool
12
12
}{
13
+ {"" , true },
13
14
{"1.2.3" , false },
14
15
{"1.0" , false },
15
16
{"1" , false },
@@ -32,14 +33,56 @@ func TestNewVersion(t *testing.T) {
32
33
{"foo1.2.3" , true },
33
34
{"1.7rc2" , false },
34
35
{"v1.7rc2" , false },
36
+ {"1.0-" , false },
35
37
}
36
38
37
39
for _ , tc := range cases {
38
40
_ , err := NewVersion (tc .version )
39
41
if tc .err && err == nil {
40
- t .Fatalf ("expected error for version: %s " , tc .version )
42
+ t .Fatalf ("expected error for version: %q " , tc .version )
41
43
} else if ! tc .err && err != nil {
42
- t .Fatalf ("error for version %s: %s" , tc .version , err )
44
+ t .Fatalf ("error for version %q: %s" , tc .version , err )
45
+ }
46
+ }
47
+ }
48
+
49
+ func TestNewSemver (t * testing.T ) {
50
+ cases := []struct {
51
+ version string
52
+ err bool
53
+ }{
54
+ {"" , true },
55
+ {"1.2.3" , false },
56
+ {"1.0" , false },
57
+ {"1" , false },
58
+ {"1.2.beta" , true },
59
+ {"1.21.beta" , true },
60
+ {"foo" , true },
61
+ {"1.2-5" , false },
62
+ {"1.2-beta.5" , false },
63
+ {"\n 1.2" , true },
64
+ {"1.2.0-x.Y.0+metadata" , false },
65
+ {"1.2.0-x.Y.0+metadata-width-hypen" , false },
66
+ {"1.2.3-rc1-with-hypen" , false },
67
+ {"1.2.3.4" , false },
68
+ {"1.2.0.4-x.Y.0+metadata" , false },
69
+ {"1.2.0.4-x.Y.0+metadata-width-hypen" , false },
70
+ {"1.2.0-X-1.2.0+metadata~dist" , false },
71
+ {"1.2.3.4-rc1-with-hypen" , false },
72
+ {"1.2.3.4" , false },
73
+ {"v1.2.3" , false },
74
+ {"foo1.2.3" , true },
75
+ {"1.7rc2" , true },
76
+ {"v1.7rc2" , true },
77
+ {"1.0-" , true },
78
+ }
79
+
80
+ for _ , tc := range cases {
81
+ _ , err := NewSemver (tc .version )
82
+ if tc .err && err == nil {
83
+ t .Fatalf ("expected error for version: %q" , tc .version )
84
+ } else if ! tc .err && err != nil {
85
+ t .Fatalf ("error for version %q: %s" , tc .version , err )
43
86
}
44
87
}
45
88
}
@@ -91,6 +134,44 @@ func TestVersionCompare(t *testing.T) {
91
134
}
92
135
}
93
136
137
+ func TestVersionCompare_versionAndSemver (t * testing.T ) {
138
+ cases := []struct {
139
+ versionRaw string
140
+ semverRaw string
141
+ expected int
142
+ }{
143
+ {"0.0.2" , "0.0.2" , 0 },
144
+ {"1.0.2alpha" , "1.0.2-alpha" , 0 },
145
+ {"v1.2+foo" , "v1.2+beta" , 0 },
146
+ {"v1.2" , "v1.2+meta" , 0 },
147
+ {"1.2" , "1.2-beta" , 1 },
148
+ {"v1.2" , "v1.2-beta" , 1 },
149
+ {"1.2.3" , "1.4.5" , - 1 },
150
+ {"v1.2" , "v1.2.0.0.1" , - 1 },
151
+ {"v1.0.3-" , "v1.0.3" , - 1 },
152
+ }
153
+
154
+ for _ , tc := range cases {
155
+ ver , err := NewVersion (tc .versionRaw )
156
+ if err != nil {
157
+ t .Fatalf ("err: %s" , err )
158
+ }
159
+
160
+ semver , err := NewSemver (tc .semverRaw )
161
+ if err != nil {
162
+ t .Fatalf ("err: %s" , err )
163
+ }
164
+
165
+ actual := ver .Compare (semver )
166
+ if actual != tc .expected {
167
+ t .Fatalf (
168
+ "%s <=> %s\n expected: %d\n actual: %d" ,
169
+ tc .versionRaw , tc .semverRaw , tc .expected , actual ,
170
+ )
171
+ }
172
+ }
173
+ }
174
+
94
175
func TestComparePreReleases (t * testing.T ) {
95
176
cases := []struct {
96
177
v1 string
0 commit comments