From 041ab708633a8482fb553aaf6f274945bc68d9ab Mon Sep 17 00:00:00 2001 From: Ryan LaHue Date: Tue, 16 Sep 2014 18:05:23 -0700 Subject: [PATCH] Add tests for non-integer floats being cast to Int silently, and int64 overflows --- int_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/int_test.go b/int_test.go index 708b89f..72a11c4 100644 --- a/int_test.go +++ b/int_test.go @@ -2,6 +2,8 @@ package null import ( "encoding/json" + "math" + "strconv" "testing" ) @@ -54,6 +56,31 @@ func TestUnmarshalInt(t *testing.T) { assertNullInt(t, badType, "wrong type json") } +func TestUnmarshalNonIntegerNumber(t *testing.T) { + floatJSON = []byte(`123.45`) + var i Int + err := json.Unmarshal(floatJSON, &i) + if err == nil { + panic("err should be present; non-integer number coerced to int") + } +} + +func TestUnmarshalInt64Overflow(t *testing.T) { + int64Overflow := uint64(math.MaxInt64) + + // Max int64 should decode successfully + var i Int + err := json.Unmarshal([]byte(strconv.FormatUint(int64Overflow, 10)), &i) + maybePanic(err) + + // Attempt to overflow + int64Overflow++ + err = json.Unmarshal([]byte(strconv.FormatUint(int64Overflow, 10)), &i) + if err == nil { + panic("err should be present; decoded value overflows int64") + } +} + func TestTextUnmarshalInt(t *testing.T) { var i Int err := i.UnmarshalText([]byte("12345"))