From 214012c56ca812414f14b06a699149d316cb7913 Mon Sep 17 00:00:00 2001 From: Greg Date: Tue, 9 Sep 2014 12:31:58 +0900 Subject: [PATCH] UnmarshalJSON returns an error for invalid zero.* types, tests --- bool_test.go | 7 +++++++ float_test.go | 7 +++++++ gin-bin | Bin 155922 -> 0 bytes int_test.go | 7 +++++++ string_test.go | 7 +++++++ zero/bool.go | 4 ++++ zero/bool_test.go | 7 +++++++ zero/float.go | 4 ++++ zero/float_test.go | 7 +++++++ zero/int.go | 4 ++++ zero/int_test.go | 7 +++++++ zero/string.go | 4 ++++ zero/string_test.go | 7 +++++++ 13 files changed, 72 insertions(+) delete mode 100644 gin-bin diff --git a/bool_test.go b/bool_test.go index 714b37a..eb9cb01 100644 --- a/bool_test.go +++ b/bool_test.go @@ -46,6 +46,13 @@ func TestUnmarshalBool(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullBool(t, null, "null json") + + var badType Bool + err = json.Unmarshal(intJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullBool(t, badType, "wrong type json") } func TestTextUnmarshalBool(t *testing.T) { diff --git a/float_test.go b/float_test.go index 9eeae01..a4ba3a4 100644 --- a/float_test.go +++ b/float_test.go @@ -45,6 +45,13 @@ func TestUnmarshalFloat(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullFloat(t, null, "null json") + + var badType Float + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullFloat(t, badType, "wrong type json") } func TestTextUnmarshalFloat(t *testing.T) { diff --git a/gin-bin b/gin-bin deleted file mode 100644 index 0ef32d96b9083b75743a7e37fcc67d7629efd55c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155922 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 I^4@muzugmUSO5S3 diff --git a/int_test.go b/int_test.go index 8fe2e26..708b89f 100644 --- a/int_test.go +++ b/int_test.go @@ -45,6 +45,13 @@ func TestUnmarshalInt(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullInt(t, null, "null json") + + var badType Int + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullInt(t, badType, "wrong type json") } func TestTextUnmarshalInt(t *testing.T) { diff --git a/string_test.go b/string_test.go index 88c484f..3a444d8 100644 --- a/string_test.go +++ b/string_test.go @@ -56,6 +56,13 @@ func TestUnmarshalString(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullStr(t, null, "null json") + + var badType String + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullStr(t, badType, "wrong type json") } func TestTextUnmarshalString(t *testing.T) { diff --git a/zero/bool.go b/zero/bool.go index e1b5153..e59cf96 100644 --- a/zero/bool.go +++ b/zero/bool.go @@ -4,6 +4,8 @@ import ( "database/sql" "encoding/json" "errors" + "fmt" + "reflect" ) // Bool is a nullable bool. @@ -49,6 +51,8 @@ func (b *Bool) UnmarshalJSON(data []byte) error { case nil: b.Valid = false return nil + default: + err = fmt.Errorf("json: cannot unmarshal %v into Go value of type zero.Bool", reflect.TypeOf(v).Name()) } b.Valid = (err == nil) && b.Bool return err diff --git a/zero/bool_test.go b/zero/bool_test.go index 348f651..28f508c 100644 --- a/zero/bool_test.go +++ b/zero/bool_test.go @@ -59,6 +59,13 @@ func TestUnmarshalBool(t *testing.T) { panic("err should not be nil") } assertNullBool(t, invalid, "invalid json") + + var badType Bool + err = json.Unmarshal(intJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullBool(t, badType, "wrong type json") } func TestTextUnmarshalBool(t *testing.T) { diff --git a/zero/float.go b/zero/float.go index 8b36be1..247ea08 100644 --- a/zero/float.go +++ b/zero/float.go @@ -3,6 +3,8 @@ package zero import ( "database/sql" "encoding/json" + "fmt" + "reflect" "strconv" ) @@ -50,6 +52,8 @@ func (f *Float) UnmarshalJSON(data []byte) error { case nil: f.Valid = false return nil + default: + err = fmt.Errorf("json: cannot unmarshal %v into Go value of type zero.Float", reflect.TypeOf(v).Name()) } f.Valid = (err == nil) && (f.Float64 != 0) return err diff --git a/zero/float_test.go b/zero/float_test.go index cd4fd2f..d3d44f6 100644 --- a/zero/float_test.go +++ b/zero/float_test.go @@ -50,6 +50,13 @@ func TestUnmarshalFloat(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullFloat(t, null, "null json") + + var badType Float + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullFloat(t, badType, "wrong type json") } func TestTextUnmarshalFloat(t *testing.T) { diff --git a/zero/int.go b/zero/int.go index 9efb7bc..df79d0a 100644 --- a/zero/int.go +++ b/zero/int.go @@ -3,6 +3,8 @@ package zero import ( "database/sql" "encoding/json" + "fmt" + "reflect" "strconv" ) @@ -51,6 +53,8 @@ func (i *Int) UnmarshalJSON(data []byte) error { case nil: i.Valid = false return nil + default: + err = fmt.Errorf("json: cannot unmarshal %v into Go value of type zero.Int", reflect.TypeOf(v).Name()) } i.Valid = (err == nil) && (i.Int64 != 0) return err diff --git a/zero/int_test.go b/zero/int_test.go index 7007fbe..2910b6a 100644 --- a/zero/int_test.go +++ b/zero/int_test.go @@ -51,6 +51,13 @@ func TestUnmarshalInt(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullInt(t, null, "null json") + + var badType Int + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullInt(t, badType, "wrong type json") } func TestTextUnmarshalInt(t *testing.T) { diff --git a/zero/string.go b/zero/string.go index 3472153..a1aae5a 100644 --- a/zero/string.go +++ b/zero/string.go @@ -7,6 +7,8 @@ package zero import ( "database/sql" "encoding/json" + "fmt" + "reflect" ) // String is a nullable string. @@ -53,6 +55,8 @@ func (s *String) UnmarshalJSON(data []byte) error { case nil: s.Valid = false return nil + default: + err = fmt.Errorf("json: cannot unmarshal %v into Go value of type zero.String", reflect.TypeOf(v).Name()) } s.Valid = (err == nil) && (s.String != "") return err diff --git a/zero/string_test.go b/zero/string_test.go index 8995b35..5e6385d 100644 --- a/zero/string_test.go +++ b/zero/string_test.go @@ -44,6 +44,13 @@ func TestUnmarshalString(t *testing.T) { err = json.Unmarshal(nullJSON, &null) maybePanic(err) assertNullStr(t, null, "null json") + + var badType String + err = json.Unmarshal(boolJSON, &badType) + if err == nil { + panic("err should not be nil") + } + assertNullStr(t, badType, "wrong type json") } func TestTextUnmarshalString(t *testing.T) {