Merge pull request #5 from hasryan/issue3_intunmarshal_tests

Add tests for non-integer floats being cast to Int silently, and int64 overflows
This commit is contained in:
Greg 2014-09-17 10:10:43 +09:00
commit 49b7edd3ac

View file

@ -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"))