1package semver 2 3import ( 4 "encoding/json" 5 "strconv" 6 "testing" 7) 8 9func TestJSONMarshal(t *testing.T) { 10 versionString := "3.1.4-alpha.1.5.9+build.2.6.5" 11 v, err := Parse(versionString) 12 if err != nil { 13 t.Fatal(err) 14 } 15 16 versionJSON, err := json.Marshal(v) 17 if err != nil { 18 t.Fatal(err) 19 } 20 21 quotedVersionString := strconv.Quote(versionString) 22 23 if string(versionJSON) != quotedVersionString { 24 t.Fatalf("JSON marshaled semantic version not equal: expected %q, got %q", quotedVersionString, string(versionJSON)) 25 } 26} 27 28func TestJSONUnmarshal(t *testing.T) { 29 versionString := "3.1.4-alpha.1.5.9+build.2.6.5" 30 quotedVersionString := strconv.Quote(versionString) 31 32 var v Version 33 if err := json.Unmarshal([]byte(quotedVersionString), &v); err != nil { 34 t.Fatal(err) 35 } 36 37 if v.String() != versionString { 38 t.Fatalf("JSON unmarshaled semantic version not equal: expected %q, got %q", versionString, v.String()) 39 } 40 41 badVersionString := strconv.Quote("3.1.4.1.5.9.2.6.5-other-digits-of-pi") 42 if err := json.Unmarshal([]byte(badVersionString), &v); err == nil { 43 t.Fatal("expected JSON unmarshal error, got nil") 44 } 45 46 if err := json.Unmarshal([]byte("3.1"), &v); err == nil { 47 t.Fatal("expected JSON unmarshal error, got nil") 48 } 49} 50