1 package version
2
3 import (
4 "encoding/json"
5 "fmt"
6 "reflect"
7 "testing"
8 )
9
10 func TestNewVersion(t *testing.T) {
11 cases := []struct {
12 version string
13 err bool
14 }{
15 {"", true},
16 {"1.2.3", false},
17 {"1.0", false},
18 {"1", false},
19 {"1.2.beta", true},
20 {"1.21.beta", true},
21 {"foo", true},
22 {"1.2-5", false},
23 {"1.2-beta.5", false},
24 {"\n1.2", true},
25 {"1.2.0-x.Y.0+metadata", false},
26 {"1.2.0-x.Y.0+metadata-width-hyphen", false},
27 {"1.2.3-rc1-with-hyphen", false},
28 {"1.2.3.4", false},
29 {"1.2.0.4-x.Y.0+metadata", false},
30 {"1.2.0.4-x.Y.0+metadata-width-hyphen", false},
31 {"1.2.0-X-1.2.0+metadata~dist", false},
32 {"1.2.3.4-rc1-with-hyphen", false},
33 {"1.2.3.4", false},
34 {"v1.2.3", false},
35 {"foo1.2.3", true},
36 {"1.7rc2", false},
37 {"v1.7rc2", false},
38 {"1.0-", false},
39 }
40
41 for _, tc := range cases {
42 _, err := NewVersion(tc.version)
43 if tc.err && err == nil {
44 t.Fatalf("expected error for version: %q", tc.version)
45 } else if !tc.err && err != nil {
46 t.Fatalf("error for version %q: %s", tc.version, err)
47 }
48 }
49 }
50
51 func TestNewSemver(t *testing.T) {
52 cases := []struct {
53 version string
54 err bool
55 }{
56 {"", true},
57 {"1.2.3", false},
58 {"1.0", false},
59 {"1", false},
60 {"1.2.beta", true},
61 {"1.21.beta", true},
62 {"foo", true},
63 {"1.2-5", false},
64 {"1.2-beta.5", false},
65 {"\n1.2", true},
66 {"1.2.0-x.Y.0+metadata", false},
67 {"1.2.0-x.Y.0+metadata-width-hyphen", false},
68 {"1.2.3-rc1-with-hyphen", false},
69 {"1.2.3.4", false},
70 {"1.2.0.4-x.Y.0+metadata", false},
71 {"1.2.0.4-x.Y.0+metadata-width-hyphen", false},
72 {"1.2.0-X-1.2.0+metadata~dist", false},
73 {"1.2.3.4-rc1-with-hyphen", false},
74 {"1.2.3.4", false},
75 {"v1.2.3", false},
76 {"foo1.2.3", true},
77 {"1.7rc2", true},
78 {"v1.7rc2", true},
79 {"1.0-", true},
80 }
81
82 for _, tc := range cases {
83 _, err := NewSemver(tc.version)
84 if tc.err && err == nil {
85 t.Fatalf("expected error for version: %q", tc.version)
86 } else if !tc.err && err != nil {
87 t.Fatalf("error for version %q: %s", tc.version, err)
88 }
89 }
90 }
91
92 func TestCore(t *testing.T) {
93 cases := []struct {
94 v1 string
95 v2 string
96 }{
97 {"1.2.3", "1.2.3"},
98 {"2.3.4-alpha1", "2.3.4"},
99 {"3.4.5alpha1", "3.4.5"},
100 {"1.2.3-2", "1.2.3"},
101 {"4.5.6-beta1+meta", "4.5.6"},
102 {"5.6.7.1.2.3", "5.6.7"},
103 }
104
105 for _, tc := range cases {
106 v1, err := NewVersion(tc.v1)
107 if err != nil {
108 t.Fatalf("error for version %q: %s", tc.v1, err)
109 }
110 v2, err := NewVersion(tc.v2)
111 if err != nil {
112 t.Fatalf("error for version %q: %s", tc.v2, err)
113 }
114
115 actual := v1.Core()
116 expected := v2
117
118 if !reflect.DeepEqual(actual, expected) {
119 t.Fatalf("expected: %s\nactual: %s", expected, actual)
120 }
121 }
122 }
123
124 func TestVersionCompare(t *testing.T) {
125 cases := []struct {
126 v1 string
127 v2 string
128 expected int
129 }{
130 {"1.2.3", "1.4.5", -1},
131 {"1.2-beta", "1.2-beta", 0},
132 {"1.2", "1.1.4", 1},
133 {"1.2", "1.2-beta", 1},
134 {"1.2+foo", "1.2+beta", 0},
135 {"v1.2", "v1.2-beta", 1},
136 {"v1.2+foo", "v1.2+beta", 0},
137 {"v1.2.3.4", "v1.2.3.4", 0},
138 {"v1.2.0.0", "v1.2", 0},
139 {"v1.2.0.0.1", "v1.2", 1},
140 {"v1.2", "v1.2.0.0", 0},
141 {"v1.2", "v1.2.0.0.1", -1},
142 {"v1.2.0.0", "v1.2.0.0.1", -1},
143 {"v1.2.3.0", "v1.2.3.4", -1},
144 {"1.7rc2", "1.7rc1", 1},
145 {"1.7rc2", "1.7", -1},
146 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", 1},
147 }
148
149 for _, tc := range cases {
150 v1, err := NewVersion(tc.v1)
151 if err != nil {
152 t.Fatalf("err: %s", err)
153 }
154
155 v2, err := NewVersion(tc.v2)
156 if err != nil {
157 t.Fatalf("err: %s", err)
158 }
159
160 actual := v1.Compare(v2)
161 expected := tc.expected
162 if actual != expected {
163 t.Fatalf(
164 "%s <=> %s\nexpected: %d\nactual: %d",
165 tc.v1, tc.v2,
166 expected, actual)
167 }
168 }
169 }
170
171 func TestVersionCompare_versionAndSemver(t *testing.T) {
172 cases := []struct {
173 versionRaw string
174 semverRaw string
175 expected int
176 }{
177 {"0.0.2", "0.0.2", 0},
178 {"1.0.2alpha", "1.0.2-alpha", 0},
179 {"v1.2+foo", "v1.2+beta", 0},
180 {"v1.2", "v1.2+meta", 0},
181 {"1.2", "1.2-beta", 1},
182 {"v1.2", "v1.2-beta", 1},
183 {"1.2.3", "1.4.5", -1},
184 {"v1.2", "v1.2.0.0.1", -1},
185 {"v1.0.3-", "v1.0.3", -1},
186 }
187
188 for _, tc := range cases {
189 ver, err := NewVersion(tc.versionRaw)
190 if err != nil {
191 t.Fatalf("err: %s", err)
192 }
193
194 semver, err := NewSemver(tc.semverRaw)
195 if err != nil {
196 t.Fatalf("err: %s", err)
197 }
198
199 actual := ver.Compare(semver)
200 if actual != tc.expected {
201 t.Fatalf(
202 "%s <=> %s\nexpected: %d\n actual: %d",
203 tc.versionRaw, tc.semverRaw, tc.expected, actual,
204 )
205 }
206 }
207 }
208
209 func TestVersionEqual_nil(t *testing.T) {
210 mustVersion := func(v string) *Version {
211 ver, err := NewVersion(v)
212 if err != nil {
213 t.Fatal(err)
214 }
215 return ver
216 }
217 cases := []struct {
218 leftVersion *Version
219 rightVersion *Version
220 expected bool
221 }{
222 {mustVersion("1.0.0"), nil, false},
223 {nil, mustVersion("1.0.0"), false},
224 {nil, nil, true},
225 }
226
227 for _, tc := range cases {
228 given := tc.leftVersion.Equal(tc.rightVersion)
229 if given != tc.expected {
230 t.Fatalf("expected Equal to nil to be %t", tc.expected)
231 }
232 }
233 }
234
235 func TestComparePreReleases(t *testing.T) {
236 cases := []struct {
237 v1 string
238 v2 string
239 expected int
240 }{
241 {"1.2-beta.2", "1.2-beta.2", 0},
242 {"1.2-beta.1", "1.2-beta.2", -1},
243 {"1.2-beta.2", "1.2-beta.11", -1},
244 {"3.2-alpha.1", "3.2-alpha", 1},
245 {"1.2-beta.2", "1.2-beta.1", 1},
246 {"1.2-beta.11", "1.2-beta.2", 1},
247 {"1.2-beta", "1.2-beta.3", -1},
248 {"1.2-alpha", "1.2-beta.3", -1},
249 {"1.2-beta", "1.2-alpha.3", 1},
250 {"3.0-alpha.3", "3.0-rc.1", -1},
251 {"3.0-alpha3", "3.0-rc1", -1},
252 {"3.0-alpha.1", "3.0-alpha.beta", -1},
253 {"5.4-alpha", "5.4-alpha.beta", 1},
254 {"v1.2-beta.2", "v1.2-beta.2", 0},
255 {"v1.2-beta.1", "v1.2-beta.2", -1},
256 {"v3.2-alpha.1", "v3.2-alpha", 1},
257 {"v3.2-rc.1-1-g123", "v3.2-rc.2", 1},
258 }
259
260 for _, tc := range cases {
261 v1, err := NewVersion(tc.v1)
262 if err != nil {
263 t.Fatalf("err: %s", err)
264 }
265
266 v2, err := NewVersion(tc.v2)
267 if err != nil {
268 t.Fatalf("err: %s", err)
269 }
270
271 actual := v1.Compare(v2)
272 expected := tc.expected
273 if actual != expected {
274 t.Fatalf(
275 "%s <=> %s\nexpected: %d\nactual: %d",
276 tc.v1, tc.v2,
277 expected, actual)
278 }
279 }
280 }
281
282 func TestVersionMetadata(t *testing.T) {
283 cases := []struct {
284 version string
285 expected string
286 }{
287 {"1.2.3", ""},
288 {"1.2-beta", ""},
289 {"1.2.0-x.Y.0", ""},
290 {"1.2.0-x.Y.0+metadata", "metadata"},
291 {"1.2.0-metadata-1.2.0+metadata~dist", "metadata~dist"},
292 }
293
294 for _, tc := range cases {
295 v, err := NewVersion(tc.version)
296 if err != nil {
297 t.Fatalf("err: %s", err)
298 }
299
300 actual := v.Metadata()
301 expected := tc.expected
302 if actual != expected {
303 t.Fatalf("expected: %s\nactual: %s", expected, actual)
304 }
305 }
306 }
307
308 func TestVersionPrerelease(t *testing.T) {
309 cases := []struct {
310 version string
311 expected string
312 }{
313 {"1.2.3", ""},
314 {"1.2-beta", "beta"},
315 {"1.2.0-x.Y.0", "x.Y.0"},
316 {"1.2.0-7.Y.0", "7.Y.0"},
317 {"1.2.0-x.Y.0+metadata", "x.Y.0"},
318 {"1.2.0-metadata-1.2.0+metadata~dist", "metadata-1.2.0"},
319 {"17.03.0-ce", "ce"},
320 }
321
322 for _, tc := range cases {
323 v, err := NewVersion(tc.version)
324 if err != nil {
325 t.Fatalf("err: %s", err)
326 }
327
328 actual := v.Prerelease()
329 expected := tc.expected
330 if actual != expected {
331 t.Fatalf("expected: %s\nactual: %s", expected, actual)
332 }
333 }
334 }
335
336 func TestVersionSegments(t *testing.T) {
337 cases := []struct {
338 version string
339 expected []int
340 }{
341 {"1.2.3", []int{1, 2, 3}},
342 {"1.2-beta", []int{1, 2, 0}},
343 {"1-x.Y.0", []int{1, 0, 0}},
344 {"1.2.0-x.Y.0+metadata", []int{1, 2, 0}},
345 {"1.2.0-metadata-1.2.0+metadata~dist", []int{1, 2, 0}},
346 {"17.03.0-ce", []int{17, 3, 0}},
347 }
348
349 for _, tc := range cases {
350 v, err := NewVersion(tc.version)
351 if err != nil {
352 t.Fatalf("err: %s", err)
353 }
354
355 actual := v.Segments()
356 expected := tc.expected
357 if !reflect.DeepEqual(actual, expected) {
358 t.Fatalf("expected: %#v\nactual: %#v", expected, actual)
359 }
360 }
361 }
362
363 func TestVersionSegments64(t *testing.T) {
364 cases := []struct {
365 version string
366 expected []int64
367 }{
368 {"1.2.3", []int64{1, 2, 3}},
369 {"1.2-beta", []int64{1, 2, 0}},
370 {"1-x.Y.0", []int64{1, 0, 0}},
371 {"1.2.0-x.Y.0+metadata", []int64{1, 2, 0}},
372 {"1.4.9223372036854775807", []int64{1, 4, 9223372036854775807}},
373 }
374
375 for _, tc := range cases {
376 v, err := NewVersion(tc.version)
377 if err != nil {
378 t.Fatalf("err: %s", err)
379 }
380
381 actual := v.Segments64()
382 expected := tc.expected
383 if !reflect.DeepEqual(actual, expected) {
384 t.Fatalf("expected: %#v\nactual: %#v", expected, actual)
385 }
386
387 {
388 expected := actual[0]
389 actual[0]++
390 actual = v.Segments64()
391 if actual[0] != expected {
392 t.Fatalf("Segments64 is mutable")
393 }
394 }
395 }
396 }
397
398 func TestJsonMarshal(t *testing.T) {
399 cases := []struct {
400 version string
401 err bool
402 }{
403 {"1.2.3", false},
404 {"1.2.0-x.Y.0+metadata", false},
405 {"1.2.0-x.Y.0+metadata-width-hyphen", false},
406 {"1.2.3-rc1-with-hyphen", false},
407 {"1.2.3.4", false},
408 {"1.2.0.4-x.Y.0+metadata", false},
409 {"1.2.0.4-x.Y.0+metadata-width-hyphen", false},
410 {"1.2.0-X-1.2.0+metadata~dist", false},
411 {"1.2.3.4-rc1-with-hyphen", false},
412 {"1.2.3.4", false},
413 }
414
415 for _, tc := range cases {
416 v, err1 := NewVersion(tc.version)
417 if err1 != nil {
418 t.Fatalf("error for version %q: %s", tc.version, err1)
419 }
420
421 parsed, err2 := json.Marshal(v)
422 if err2 != nil {
423 t.Fatalf("error marshaling version %q: %s", tc.version, err2)
424 }
425 result := string(parsed)
426 expected := fmt.Sprintf("%q", tc.version)
427 if result != expected && !tc.err {
428 t.Fatalf("Error marshaling unexpected marshaled content: result=%q expected=%q", result, expected)
429 }
430 }
431 }
432
433 func TestJsonUnmarshal(t *testing.T) {
434 cases := []struct {
435 version string
436 err bool
437 }{
438 {"1.2.3", false},
439 {"1.2.0-x.Y.0+metadata", false},
440 {"1.2.0-x.Y.0+metadata-width-hyphen", false},
441 {"1.2.3-rc1-with-hyphen", false},
442 {"1.2.3.4", false},
443 {"1.2.0.4-x.Y.0+metadata", false},
444 {"1.2.0.4-x.Y.0+metadata-width-hyphen", false},
445 {"1.2.0-X-1.2.0+metadata~dist", false},
446 {"1.2.3.4-rc1-with-hyphen", false},
447 {"1.2.3.4", false},
448 }
449
450 for _, tc := range cases {
451 expected, err1 := NewVersion(tc.version)
452 if err1 != nil {
453 t.Fatalf("err: %s", err1)
454 }
455
456 actual := &Version{}
457 err2 := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), actual)
458 if err2 != nil {
459 t.Fatalf("error unmarshaling version: %s", err2)
460 }
461 if !reflect.DeepEqual(actual, expected) {
462 t.Fatalf("error unmarshaling, unexpected object content: actual=%q expected=%q", actual, expected)
463 }
464 }
465 }
466
467 func TestVersionString(t *testing.T) {
468 cases := [][]string{
469 {"1.2.3", "1.2.3"},
470 {"1.2-beta", "1.2.0-beta"},
471 {"1.2.0-x.Y.0", "1.2.0-x.Y.0"},
472 {"1.2.0-x.Y.0+metadata", "1.2.0-x.Y.0+metadata"},
473 {"1.2.0-metadata-1.2.0+metadata~dist", "1.2.0-metadata-1.2.0+metadata~dist"},
474 {"17.03.0-ce", "17.3.0-ce"},
475 }
476
477 for _, tc := range cases {
478 v, err := NewVersion(tc[0])
479 if err != nil {
480 t.Fatalf("err: %s", err)
481 }
482
483 actual := v.String()
484 expected := tc[1]
485 if actual != expected {
486 t.Fatalf("expected: %s\nactual: %s", expected, actual)
487 }
488 if actual := v.Original(); actual != tc[0] {
489 t.Fatalf("expected original: %q\nactual: %q", tc[0], actual)
490 }
491 }
492 }
493
494 func TestEqual(t *testing.T) {
495 cases := []struct {
496 v1 string
497 v2 string
498 expected bool
499 }{
500 {"1.2.3", "1.4.5", false},
501 {"1.2-beta", "1.2-beta", true},
502 {"1.2", "1.1.4", false},
503 {"1.2", "1.2-beta", false},
504 {"1.2+foo", "1.2+beta", true},
505 {"v1.2", "v1.2-beta", false},
506 {"v1.2+foo", "v1.2+beta", true},
507 {"v1.2.3.4", "v1.2.3.4", true},
508 {"v1.2.0.0", "v1.2", true},
509 {"v1.2.0.0.1", "v1.2", false},
510 {"v1.2", "v1.2.0.0", true},
511 {"v1.2", "v1.2.0.0.1", false},
512 {"v1.2.0.0", "v1.2.0.0.1", false},
513 {"v1.2.3.0", "v1.2.3.4", false},
514 {"1.7rc2", "1.7rc1", false},
515 {"1.7rc2", "1.7", false},
516 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", false},
517 }
518
519 for _, tc := range cases {
520 v1, err := NewVersion(tc.v1)
521 if err != nil {
522 t.Fatalf("err: %s", err)
523 }
524
525 v2, err := NewVersion(tc.v2)
526 if err != nil {
527 t.Fatalf("err: %s", err)
528 }
529
530 actual := v1.Equal(v2)
531 expected := tc.expected
532 if actual != expected {
533 t.Fatalf(
534 "%s <=> %s\nexpected: %t\nactual: %t",
535 tc.v1, tc.v2,
536 expected, actual)
537 }
538 }
539 }
540
541 func TestGreaterThan(t *testing.T) {
542 cases := []struct {
543 v1 string
544 v2 string
545 expected bool
546 }{
547 {"1.2.3", "1.4.5", false},
548 {"1.2-beta", "1.2-beta", false},
549 {"1.2", "1.1.4", true},
550 {"1.2", "1.2-beta", true},
551 {"1.2+foo", "1.2+beta", false},
552 {"v1.2", "v1.2-beta", true},
553 {"v1.2+foo", "v1.2+beta", false},
554 {"v1.2.3.4", "v1.2.3.4", false},
555 {"v1.2.0.0", "v1.2", false},
556 {"v1.2.0.0.1", "v1.2", true},
557 {"v1.2", "v1.2.0.0", false},
558 {"v1.2", "v1.2.0.0.1", false},
559 {"v1.2.0.0", "v1.2.0.0.1", false},
560 {"v1.2.3.0", "v1.2.3.4", false},
561 {"1.7rc2", "1.7rc1", true},
562 {"1.7rc2", "1.7", false},
563 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", true},
564 }
565
566 for _, tc := range cases {
567 v1, err := NewVersion(tc.v1)
568 if err != nil {
569 t.Fatalf("err: %s", err)
570 }
571
572 v2, err := NewVersion(tc.v2)
573 if err != nil {
574 t.Fatalf("err: %s", err)
575 }
576
577 actual := v1.GreaterThan(v2)
578 expected := tc.expected
579 if actual != expected {
580 t.Fatalf(
581 "%s > %s\nexpected: %t\nactual: %t",
582 tc.v1, tc.v2,
583 expected, actual)
584 }
585 }
586 }
587
588 func TestLessThan(t *testing.T) {
589 cases := []struct {
590 v1 string
591 v2 string
592 expected bool
593 }{
594 {"1.2.3", "1.4.5", true},
595 {"1.2-beta", "1.2-beta", false},
596 {"1.2", "1.1.4", false},
597 {"1.2", "1.2-beta", false},
598 {"1.2+foo", "1.2+beta", false},
599 {"v1.2", "v1.2-beta", false},
600 {"v1.2+foo", "v1.2+beta", false},
601 {"v1.2.3.4", "v1.2.3.4", false},
602 {"v1.2.0.0", "v1.2", false},
603 {"v1.2.0.0.1", "v1.2", false},
604 {"v1.2", "v1.2.0.0", false},
605 {"v1.2", "v1.2.0.0.1", true},
606 {"v1.2.0.0", "v1.2.0.0.1", true},
607 {"v1.2.3.0", "v1.2.3.4", true},
608 {"1.7rc2", "1.7rc1", false},
609 {"1.7rc2", "1.7", true},
610 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", false},
611 }
612
613 for _, tc := range cases {
614 v1, err := NewVersion(tc.v1)
615 if err != nil {
616 t.Fatalf("err: %s", err)
617 }
618
619 v2, err := NewVersion(tc.v2)
620 if err != nil {
621 t.Fatalf("err: %s", err)
622 }
623
624 actual := v1.LessThan(v2)
625 expected := tc.expected
626 if actual != expected {
627 t.Fatalf(
628 "%s < %s\nexpected: %t\nactual: %t",
629 tc.v1, tc.v2,
630 expected, actual)
631 }
632 }
633 }
634
635 func TestGreaterThanOrEqual(t *testing.T) {
636 cases := []struct {
637 v1 string
638 v2 string
639 expected bool
640 }{
641 {"1.2.3", "1.4.5", false},
642 {"1.2-beta", "1.2-beta", true},
643 {"1.2", "1.1.4", true},
644 {"1.2", "1.2-beta", true},
645 {"1.2+foo", "1.2+beta", true},
646 {"v1.2", "v1.2-beta", true},
647 {"v1.2+foo", "v1.2+beta", true},
648 {"v1.2.3.4", "v1.2.3.4", true},
649 {"v1.2.0.0", "v1.2", true},
650 {"v1.2.0.0.1", "v1.2", true},
651 {"v1.2", "v1.2.0.0", true},
652 {"v1.2", "v1.2.0.0.1", false},
653 {"v1.2.0.0", "v1.2.0.0.1", false},
654 {"v1.2.3.0", "v1.2.3.4", false},
655 {"1.7rc2", "1.7rc1", true},
656 {"1.7rc2", "1.7", false},
657 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", true},
658 }
659
660 for _, tc := range cases {
661 v1, err := NewVersion(tc.v1)
662 if err != nil {
663 t.Fatalf("err: %s", err)
664 }
665
666 v2, err := NewVersion(tc.v2)
667 if err != nil {
668 t.Fatalf("err: %s", err)
669 }
670
671 actual := v1.GreaterThanOrEqual(v2)
672 expected := tc.expected
673 if actual != expected {
674 t.Fatalf(
675 "%s >= %s\nexpected: %t\nactual: %t",
676 tc.v1, tc.v2,
677 expected, actual)
678 }
679 }
680 }
681
682 func TestLessThanOrEqual(t *testing.T) {
683 cases := []struct {
684 v1 string
685 v2 string
686 expected bool
687 }{
688 {"1.2.3", "1.4.5", true},
689 {"1.2-beta", "1.2-beta", true},
690 {"1.2", "1.1.4", false},
691 {"1.2", "1.2-beta", false},
692 {"1.2+foo", "1.2+beta", true},
693 {"v1.2", "v1.2-beta", false},
694 {"v1.2+foo", "v1.2+beta", true},
695 {"v1.2.3.4", "v1.2.3.4", true},
696 {"v1.2.0.0", "v1.2", true},
697 {"v1.2.0.0.1", "v1.2", false},
698 {"v1.2", "v1.2.0.0", true},
699 {"v1.2", "v1.2.0.0.1", true},
700 {"v1.2.0.0", "v1.2.0.0.1", true},
701 {"v1.2.3.0", "v1.2.3.4", true},
702 {"1.7rc2", "1.7rc1", false},
703 {"1.7rc2", "1.7", true},
704 {"1.2.0", "1.2.0-X-1.2.0+metadata~dist", false},
705 }
706
707 for _, tc := range cases {
708 v1, err := NewVersion(tc.v1)
709 if err != nil {
710 t.Fatalf("err: %s", err)
711 }
712
713 v2, err := NewVersion(tc.v2)
714 if err != nil {
715 t.Fatalf("err: %s", err)
716 }
717
718 actual := v1.LessThanOrEqual(v2)
719 expected := tc.expected
720 if actual != expected {
721 t.Fatalf(
722 "%s <= %s\nexpected: %t\nactual: %t",
723 tc.v1, tc.v2,
724 expected, actual)
725 }
726 }
727 }
728
View as plain text