package extra import ( "testing" "github.com/json-iterator/go" "github.com/stretchr/testify/require" ) func init() { RegisterFuzzyDecoders() } func Test_any_to_string(t *testing.T) { should := require.New(t) var val string should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal("100", val) should.Nil(jsoniter.UnmarshalFromString("10", &val)) should.Equal("10", val) should.Nil(jsoniter.UnmarshalFromString("10.1", &val)) should.Equal("10.1", val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal("10.1", val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) } func Test_any_to_int64(t *testing.T) { should := require.New(t) var val int64 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(int64(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(int64(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(int64(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(int64(10), val) should.Nil(jsoniter.UnmarshalFromString(`""`, &val)) should.Equal(int64(0), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(int64(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(int64(1), val) should.Nil(jsoniter.UnmarshalFromString(`-10`, &val)) should.Equal(int64(-10), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_int(t *testing.T) { should := require.New(t) var val int should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(100, val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(10, val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(10, val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(10, val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(0, val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(1, val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_int16(t *testing.T) { should := require.New(t) var val int16 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(int16(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(int16(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(int16(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(int16(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(int16(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(int16(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_int32(t *testing.T) { should := require.New(t) var val int32 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(int32(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(int32(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(int32(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(int32(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(int32(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(int32(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_int8(t *testing.T) { should := require.New(t) var val int8 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(int8(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(int8(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(int8(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(int8(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(int8(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(int8(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_uint8(t *testing.T) { should := require.New(t) var val uint8 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(uint8(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(uint8(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(uint8(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(uint8(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(uint8(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(uint8(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_uint64(t *testing.T) { should := require.New(t) var val uint64 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(uint64(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(uint64(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(uint64(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(uint64(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(uint64(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(uint64(1), val) // TODO fix? should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val)) should.Equal(uint64(0), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_uint32(t *testing.T) { should := require.New(t) var val uint32 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(uint32(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(uint32(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(uint32(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(uint32(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(uint32(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(uint32(1), val) // TODO fix? should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val)) should.Equal(uint32(0), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_uint16(t *testing.T) { should := require.New(t) var val uint16 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(uint16(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(uint16(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(uint16(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(uint16(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(uint16(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(uint16(1), val) // TODO fix? should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val)) should.Equal(uint16(0), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_uint(t *testing.T) { should := require.New(t) var val uint should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(uint(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(uint(10), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(uint(10), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(uint(10), val) should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(uint(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(uint(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) // large float to int should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val)) } func Test_any_to_float32(t *testing.T) { should := require.New(t) var val float32 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(float32(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(float32(10.1), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(float32(10.1), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(float32(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(float32(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(float32(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) } func Test_any_to_float64(t *testing.T) { should := require.New(t) var val float64 should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val)) should.Equal(float64(100), val) should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val)) should.Equal(float64(10.1), val) should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val)) should.Equal(float64(10.1), val) should.Nil(jsoniter.UnmarshalFromString(`10`, &val)) should.Equal(float64(10), val) // bool part should.Nil(jsoniter.UnmarshalFromString(`false`, &val)) should.Equal(float64(0), val) should.Nil(jsoniter.UnmarshalFromString(`true`, &val)) should.Equal(float64(1), val) should.NotNil(jsoniter.UnmarshalFromString("{}", &val)) should.NotNil(jsoniter.UnmarshalFromString("[]", &val)) } func Test_empty_array_as_map(t *testing.T) { should := require.New(t) var val map[string]interface{} should.Nil(jsoniter.UnmarshalFromString(`[]`, &val)) should.Equal(map[string]interface{}{}, val) } func Test_empty_array_as_object(t *testing.T) { should := require.New(t) var val struct{} should.Nil(jsoniter.UnmarshalFromString(`[]`, &val)) should.Equal(struct{}{}, val) } func Test_bad_case(t *testing.T) { var jsonstr = ` { "extra_type": 181760, "combo_type": 0, "trigger_time_ms": 1498800398000, "_create_time": "2017-06-16 11:21:39", "_msg_type": 41000 } ` type OrderEventRequestParams struct { ExtraType uint64 `json:"extra_type"` } var a OrderEventRequestParams err := jsoniter.UnmarshalFromString(jsonstr, &a) should := require.New(t) should.Nil(err) } func Test_null_to_string(t *testing.T) { should := require.New(t) body := []byte(`null`) var message string err := jsoniter.Unmarshal(body, &message) should.NoError(err) } func Test_null_to_int(t *testing.T) { should := require.New(t) body := []byte(`null`) var message int err := jsoniter.Unmarshal(body, &message) should.NoError(err) } func Test_null_to_float32(t *testing.T) { should := require.New(t) body := []byte(`null`) var message float32 err := jsoniter.Unmarshal(body, &message) should.NoError(err) } func Test_null_to_float64(t *testing.T) { should := require.New(t) body := []byte(`null`) var message float64 err := jsoniter.Unmarshal(body, &message) should.NoError(err) }