1
1
package version
2
2
3
3
import (
4
+ "encoding/json"
5
+ "fmt"
4
6
"reflect"
5
7
"testing"
6
8
)
@@ -21,13 +23,13 @@ func TestNewVersion(t *testing.T) {
21
23
{"1.2-beta.5" , false },
22
24
{"\n 1.2" , true },
23
25
{"1.2.0-x.Y.0+metadata" , false },
24
- {"1.2.0-x.Y.0+metadata-width-hypen " , false },
25
- {"1.2.3-rc1-with-hypen " , false },
26
+ {"1.2.0-x.Y.0+metadata-width-hyphen " , false },
27
+ {"1.2.3-rc1-with-hyphen " , false },
26
28
{"1.2.3.4" , false },
27
29
{"1.2.0.4-x.Y.0+metadata" , false },
28
- {"1.2.0.4-x.Y.0+metadata-width-hypen " , false },
30
+ {"1.2.0.4-x.Y.0+metadata-width-hyphen " , false },
29
31
{"1.2.0-X-1.2.0+metadata~dist" , false },
30
- {"1.2.3.4-rc1-with-hypen " , false },
32
+ {"1.2.3.4-rc1-with-hyphen " , false },
31
33
{"1.2.3.4" , false },
32
34
{"v1.2.3" , false },
33
35
{"foo1.2.3" , true },
@@ -62,13 +64,13 @@ func TestNewSemver(t *testing.T) {
62
64
{"1.2-beta.5" , false },
63
65
{"\n 1.2" , true },
64
66
{"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.0-x.Y.0+metadata-width-hyphen " , false },
68
+ {"1.2.3-rc1-with-hyphen " , false },
67
69
{"1.2.3.4" , false },
68
70
{"1.2.0.4-x.Y.0+metadata" , false },
69
- {"1.2.0.4-x.Y.0+metadata-width-hypen " , false },
71
+ {"1.2.0.4-x.Y.0+metadata-width-hyphen " , false },
70
72
{"1.2.0-X-1.2.0+metadata~dist" , false },
71
- {"1.2.3.4-rc1-with-hypen " , false },
73
+ {"1.2.3.4-rc1-with-hyphen " , false },
72
74
{"1.2.3.4" , false },
73
75
{"v1.2.3" , false },
74
76
{"foo1.2.3" , true },
@@ -393,6 +395,75 @@ func TestVersionSegments64(t *testing.T) {
393
395
}
394
396
}
395
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
+
396
467
func TestVersionString (t * testing.T ) {
397
468
cases := [][]string {
398
469
{"1.2.3" , "1.2.3" },
0 commit comments