|
|
@@ -1,168 +0,0 @@
|
|
|
-package jsoniter
|
|
|
-
|
|
|
-import (
|
|
|
- "bytes"
|
|
|
- "encoding/json"
|
|
|
- "io"
|
|
|
- "testing"
|
|
|
-
|
|
|
- "github.com/stretchr/testify/require"
|
|
|
-)
|
|
|
-
|
|
|
-func Test_read_null(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- iter := ParseString(ConfigDefault, `null`)
|
|
|
- should.True(iter.ReadNil())
|
|
|
- iter = ParseString(ConfigDefault, `null`)
|
|
|
- should.Nil(iter.Read())
|
|
|
- iter = ParseString(ConfigDefault, `navy`)
|
|
|
- iter.Read()
|
|
|
- should.True(iter.Error != nil && iter.Error != io.EOF)
|
|
|
- iter = ParseString(ConfigDefault, `navy`)
|
|
|
- iter.ReadNil()
|
|
|
- should.True(iter.Error != nil && iter.Error != io.EOF)
|
|
|
-}
|
|
|
-
|
|
|
-func Test_write_null(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- buf := &bytes.Buffer{}
|
|
|
- stream := NewStream(ConfigDefault, buf, 4096)
|
|
|
- stream.WriteNil()
|
|
|
- stream.Flush()
|
|
|
- should.Nil(stream.Error)
|
|
|
- should.Equal("null", buf.String())
|
|
|
-}
|
|
|
-
|
|
|
-func Test_encode_null(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- str, err := MarshalToString(nil)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", str)
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_object_field(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- iter := ParseString(ConfigDefault, `[null,"a"]`)
|
|
|
- iter.ReadArray()
|
|
|
- if iter.ReadObject() != "" {
|
|
|
- t.FailNow()
|
|
|
- }
|
|
|
- iter.ReadArray()
|
|
|
- if iter.ReadString() != "a" {
|
|
|
- t.FailNow()
|
|
|
- }
|
|
|
- type TestObject struct {
|
|
|
- Field string
|
|
|
- }
|
|
|
- objs := []TestObject{}
|
|
|
- should.Nil(UnmarshalFromString("[null]", &objs))
|
|
|
- should.Len(objs, 1)
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_array_element(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- iter := ParseString(ConfigDefault, `[null,"a"]`)
|
|
|
- should.True(iter.ReadArray())
|
|
|
- should.True(iter.ReadNil())
|
|
|
- should.True(iter.ReadArray())
|
|
|
- should.Equal("a", iter.ReadString())
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_array(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- arr := []string{}
|
|
|
- should.Nil(UnmarshalFromString("null", &arr))
|
|
|
- should.Nil(arr)
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_map(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- arr := map[string]string{}
|
|
|
- should.Nil(UnmarshalFromString("null", &arr))
|
|
|
- should.Nil(arr)
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_string(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- iter := ParseString(ConfigDefault, `[null,"a"]`)
|
|
|
- should.True(iter.ReadArray())
|
|
|
- should.Equal("", iter.ReadString())
|
|
|
- should.True(iter.ReadArray())
|
|
|
- should.Equal("a", iter.ReadString())
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_null_skip(t *testing.T) {
|
|
|
- iter := ParseString(ConfigDefault, `[null,"a"]`)
|
|
|
- iter.ReadArray()
|
|
|
- iter.Skip()
|
|
|
- iter.ReadArray()
|
|
|
- if iter.ReadString() != "a" {
|
|
|
- t.FailNow()
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-func Test_encode_nil_map(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- type Ttest map[string]string
|
|
|
- var obj1 Ttest
|
|
|
- output, err := json.Marshal(obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = json.Marshal(&obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = Marshal(obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = Marshal(&obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
-}
|
|
|
-
|
|
|
-func Test_encode_nil_array(t *testing.T) {
|
|
|
- should := require.New(t)
|
|
|
- type Ttest []string
|
|
|
- var obj1 Ttest
|
|
|
- output, err := json.Marshal(obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = json.Marshal(&obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = Marshal(obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
- output, err = Marshal(&obj1)
|
|
|
- should.Nil(err)
|
|
|
- should.Equal("null", string(output))
|
|
|
-}
|
|
|
-
|
|
|
-func Test_decode_nil_num(t *testing.T) {
|
|
|
- type TestData struct {
|
|
|
- Field int `json:"field"`
|
|
|
- }
|
|
|
- should := require.New(t)
|
|
|
-
|
|
|
- data1 := []byte(`{"field": 42}`)
|
|
|
- data2 := []byte(`{"field": null}`)
|
|
|
-
|
|
|
- // Checking stdlib behavior as well
|
|
|
- obj2 := TestData{}
|
|
|
- err := json.Unmarshal(data1, &obj2)
|
|
|
- should.Equal(nil, err)
|
|
|
- should.Equal(42, obj2.Field)
|
|
|
-
|
|
|
- err = json.Unmarshal(data2, &obj2)
|
|
|
- should.Equal(nil, err)
|
|
|
- should.Equal(42, obj2.Field)
|
|
|
-
|
|
|
- obj := TestData{}
|
|
|
-
|
|
|
- err = Unmarshal(data1, &obj)
|
|
|
- should.Equal(nil, err)
|
|
|
- should.Equal(42, obj.Field)
|
|
|
-
|
|
|
- err = Unmarshal(data2, &obj)
|
|
|
- should.Equal(nil, err)
|
|
|
- should.Equal(42, obj.Field)
|
|
|
-}
|