mirror of
https://github.com/json-iterator/go.git
synced 2024-11-30 08:36:43 +02:00
394 lines
12 KiB
Go
394 lines
12 KiB
Go
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)
|
|
}
|