From 1f7aeb926c1b5ae47a1945fbf131a4c3bc1823c9 Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Sun, 15 May 2022 16:23:46 -0600 Subject: [PATCH 1/6] Add json marshaler/unmarshaler helpers --- version.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/version.go b/version.go index 116a744..fd1a873 100644 --- a/version.go +++ b/version.go @@ -2,6 +2,7 @@ package version import ( "bytes" + "encoding/json" "fmt" "reflect" "regexp" @@ -388,3 +389,26 @@ func (v *Version) String() string { func (v *Version) Original() string { return v.original } + +// UnmarshalJSON implements JSON.Unmarshaler interface. +func (v *Version) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + temp, err := NewVersion(s) + if err != nil { + return err + } + v.metadata = temp.metadata + v.pre = temp.pre + v.segments = temp.segments + v.si = temp.si + v.original = temp.original + return nil +} + +// MarshalJSON implements JSON.Marshaler interface. +func (v Version) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} From 8b1a9cb78cea5c8150c348dac91905bd3584e2c6 Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Sun, 15 May 2022 17:10:32 -0600 Subject: [PATCH 2/6] Add json test cases --- version_test.go | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/version_test.go b/version_test.go index 9fa34f6..a182eb7 100644 --- a/version_test.go +++ b/version_test.go @@ -1,6 +1,8 @@ package version import ( + "encoding/json" + "fmt" "reflect" "testing" ) @@ -393,6 +395,72 @@ func TestVersionSegments64(t *testing.T) { } } +func TestJsonMarshal(t *testing.T) { + cases := []struct { + version string + err bool + }{ + {"1.2.3", false}, + {"1.2.0-x.Y.0+metadata", false}, + {"1.2.0-x.Y.0+metadata-width-hypen", false}, + {"1.2.3-rc1-with-hypen", false}, + {"1.2.3.4", false}, + {"1.2.0.4-x.Y.0+metadata", false}, + {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0-X-1.2.0+metadata~dist", false}, + {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4", false}, + } + + for _, tc := range cases { + + v, err := NewVersion(tc.version) + if err != nil { + t.Errorf("error for version %q: %s", tc.version, err) + } + parsed, err2 := json.Marshal(v) + if err2 != nil { + t.Errorf("error marshaling version %q: %s", tc.version, err2) + } + result := string(parsed) + expected := fmt.Sprintf("%q", tc.version) + if result != expected && !tc.err { + t.Errorf("Error marshaling unexpected marshaled content: result=%q expected=%q", result, expected) + } + } +} + +func TestJsonUnmarshal(t *testing.T) { + cases := []struct { + version string + err bool + }{ + {"1.2.3", false}, + {"1.2.0-x.Y.0+metadata", false}, + {"1.2.0-x.Y.0+metadata-width-hypen", false}, + {"1.2.3-rc1-with-hypen", false}, + {"1.2.3.4", false}, + {"1.2.0.4-x.Y.0+metadata", false}, + {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0-X-1.2.0+metadata~dist", false}, + {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4", false}, + } + + for _, tc := range cases { + v := &Version{} + err := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), v) + if err != nil { + t.Errorf("error unmarshaling version: %s", err) + } + result := v.String() + expected := tc.version + if result != expected { + t.Errorf("error unmarshaling, unexpected object content: result=%q expected =%q", result, expected) + } + } +} + func TestVersionString(t *testing.T) { cases := [][]string{ {"1.2.3", "1.2.3"}, From 5bbe531602ee45e186128a2d8e72d6e627c64a80 Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Sun, 15 May 2022 17:33:51 -0600 Subject: [PATCH 3/6] Update tests for styling --- version_test.go | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/version_test.go b/version_test.go index a182eb7..5ec902a 100644 --- a/version_test.go +++ b/version_test.go @@ -413,19 +413,18 @@ func TestJsonMarshal(t *testing.T) { } for _, tc := range cases { - v, err := NewVersion(tc.version) if err != nil { - t.Errorf("error for version %q: %s", tc.version, err) + t.Fatalf("err: %s", err) } parsed, err2 := json.Marshal(v) if err2 != nil { - t.Errorf("error marshaling version %q: %s", tc.version, err2) + t.Fatalf("error marshaling version %q: %s", tc.version, err2) } - result := string(parsed) - expected := fmt.Sprintf("%q", tc.version) - if result != expected && !tc.err { - t.Errorf("Error marshaling unexpected marshaled content: result=%q expected=%q", result, expected) + actual := string(parsed) + expected := tc.version + if actual != expected && !tc.err { + t.Fatalf("Error marshaling unexpected marshaled content: actual=%q expected=%q", actual, expected) } } } @@ -448,15 +447,18 @@ func TestJsonUnmarshal(t *testing.T) { } for _, tc := range cases { - v := &Version{} + expected, err1 := NewVersion(tc.version) + if err1 != nil { + t.Fatalf("err: %s", err1) + } + + actual := &Version{} err := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), v) if err != nil { t.Errorf("error unmarshaling version: %s", err) } - result := v.String() - expected := tc.version - if result != expected { - t.Errorf("error unmarshaling, unexpected object content: result=%q expected =%q", result, expected) + if !reflect.DeepEqual(actual, expected) { + t.Errorf("error unmarshaling, unexpected object content: actual=%q expected=%q", actual, expected) } } } From 8f1cb48e4d2bde6a69f86497ddbad590b13d5d0a Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Mon, 16 May 2022 17:05:19 -0600 Subject: [PATCH 4/6] Fix tests --- version_test.go | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/version_test.go b/version_test.go index 5ec902a..61e4d17 100644 --- a/version_test.go +++ b/version_test.go @@ -402,29 +402,30 @@ func TestJsonMarshal(t *testing.T) { }{ {"1.2.3", false}, {"1.2.0-x.Y.0+metadata", false}, - {"1.2.0-x.Y.0+metadata-width-hypen", false}, - {"1.2.3-rc1-with-hypen", false}, + {"1.2.0-x.Y.0+metadata-width-hyphen", false}, + {"1.2.3-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"1.2.0.4-x.Y.0+metadata", false}, - {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0.4-x.Y.0+metadata-width-hyphen", false}, {"1.2.0-X-1.2.0+metadata~dist", false}, - {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4-rc1-with-hyphen", false}, {"1.2.3.4", false}, } for _, tc := range cases { v, err := NewVersion(tc.version) if err != nil { - t.Fatalf("err: %s", err) + t.Fatalf("error for version %q: %s", tc.version, err) } + parsed, err2 := json.Marshal(v) if err2 != nil { t.Fatalf("error marshaling version %q: %s", tc.version, err2) } - actual := string(parsed) - expected := tc.version - if actual != expected && !tc.err { - t.Fatalf("Error marshaling unexpected marshaled content: actual=%q expected=%q", actual, expected) + result := string(parsed) + expected := fmt.Sprintf("%q", tc.version) + if result != expected && !tc.err { + t.Fatalf("Error marshaling unexpected marshaled content: result=%q expected=%q", result, expected) } } } @@ -436,13 +437,13 @@ func TestJsonUnmarshal(t *testing.T) { }{ {"1.2.3", false}, {"1.2.0-x.Y.0+metadata", false}, - {"1.2.0-x.Y.0+metadata-width-hypen", false}, - {"1.2.3-rc1-with-hypen", false}, + {"1.2.0-x.Y.0+metadata-width-hyphen", false}, + {"1.2.3-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"1.2.0.4-x.Y.0+metadata", false}, - {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0.4-x.Y.0+metadata-width-hyphen", false}, {"1.2.0-X-1.2.0+metadata~dist", false}, - {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4-rc1-with-hyphen", false}, {"1.2.3.4", false}, } @@ -453,12 +454,12 @@ func TestJsonUnmarshal(t *testing.T) { } actual := &Version{} - err := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), v) + err := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), actual) if err != nil { - t.Errorf("error unmarshaling version: %s", err) + t.Fatalf("error unmarshaling version: %s", err) } if !reflect.DeepEqual(actual, expected) { - t.Errorf("error unmarshaling, unexpected object content: actual=%q expected=%q", actual, expected) + t.Fatalf("error unmarshaling, unexpected object content: actual=%q expected=%q", actual, expected) } } } From 66335aa8514eb946fe62db944a82160d71547543 Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Mon, 16 May 2022 17:07:58 -0600 Subject: [PATCH 5/6] Fix typos in hypen --> hyphen --- version_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/version_test.go b/version_test.go index 61e4d17..c3b5bfe 100644 --- a/version_test.go +++ b/version_test.go @@ -23,13 +23,13 @@ func TestNewVersion(t *testing.T) { {"1.2-beta.5", false}, {"\n1.2", true}, {"1.2.0-x.Y.0+metadata", false}, - {"1.2.0-x.Y.0+metadata-width-hypen", false}, - {"1.2.3-rc1-with-hypen", false}, + {"1.2.0-x.Y.0+metadata-width-hyphen", false}, + {"1.2.3-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"1.2.0.4-x.Y.0+metadata", false}, - {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0.4-x.Y.0+metadata-width-hyphen", false}, {"1.2.0-X-1.2.0+metadata~dist", false}, - {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"v1.2.3", false}, {"foo1.2.3", true}, @@ -64,13 +64,13 @@ func TestNewSemver(t *testing.T) { {"1.2-beta.5", false}, {"\n1.2", true}, {"1.2.0-x.Y.0+metadata", false}, - {"1.2.0-x.Y.0+metadata-width-hypen", false}, - {"1.2.3-rc1-with-hypen", false}, + {"1.2.0-x.Y.0+metadata-width-hyphen", false}, + {"1.2.3-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"1.2.0.4-x.Y.0+metadata", false}, - {"1.2.0.4-x.Y.0+metadata-width-hypen", false}, + {"1.2.0.4-x.Y.0+metadata-width-hyphen", false}, {"1.2.0-X-1.2.0+metadata~dist", false}, - {"1.2.3.4-rc1-with-hypen", false}, + {"1.2.3.4-rc1-with-hyphen", false}, {"1.2.3.4", false}, {"v1.2.3", false}, {"foo1.2.3", true}, From 6df01529735b297caf47c98818c8fdf081e58b26 Mon Sep 17 00:00:00 2001 From: Jukie <10012479+Jukie@users.noreply.github.com> Date: Mon, 16 May 2022 17:18:02 -0600 Subject: [PATCH 6/6] Error var naming --- version_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/version_test.go b/version_test.go index c3b5bfe..08cbf01 100644 --- a/version_test.go +++ b/version_test.go @@ -413,9 +413,9 @@ func TestJsonMarshal(t *testing.T) { } for _, tc := range cases { - v, err := NewVersion(tc.version) - if err != nil { - t.Fatalf("error for version %q: %s", tc.version, err) + v, err1 := NewVersion(tc.version) + if err1 != nil { + t.Fatalf("error for version %q: %s", tc.version, err1) } parsed, err2 := json.Marshal(v) @@ -454,9 +454,9 @@ func TestJsonUnmarshal(t *testing.T) { } actual := &Version{} - err := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), actual) - if err != nil { - t.Fatalf("error unmarshaling version: %s", err) + err2 := json.Unmarshal([]byte(fmt.Sprintf("%q", tc.version)), actual) + if err2 != nil { + t.Fatalf("error unmarshaling version: %s", err2) } if !reflect.DeepEqual(actual, expected) { t.Fatalf("error unmarshaling, unexpected object content: actual=%q expected=%q", actual, expected)