| 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) |
| } |