github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/jsoni/misc_tests/jsoniter_null_test.go (about) 1 package misc_tests 2 3 import ( 4 "bytes" 5 "context" 6 "io" 7 "testing" 8 9 "github.com/bingoohuang/gg/pkg/jsoni" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func Test_read_null(t *testing.T) { 14 should := require.New(t) 15 iter := jsoni.ParseString(jsoni.ConfigDefault, `null`) 16 should.True(iter.ReadNil()) 17 iter = jsoni.ParseString(jsoni.ConfigDefault, `null`) 18 ctx := context.Background() 19 should.Nil(iter.Read(ctx)) 20 iter = jsoni.ParseString(jsoni.ConfigDefault, `navy`) 21 iter.Read(ctx) 22 should.True(iter.Error != nil && iter.Error != io.EOF) 23 iter = jsoni.ParseString(jsoni.ConfigDefault, `navy`) 24 iter.ReadNil() 25 should.True(iter.Error != nil && iter.Error != io.EOF) 26 } 27 28 func Test_write_null(t *testing.T) { 29 should := require.New(t) 30 buf := &bytes.Buffer{} 31 stream := jsoni.NewStream(jsoni.ConfigDefault, buf, 4096) 32 stream.WriteNil() 33 stream.Flush() 34 should.Nil(stream.Error) 35 should.Equal("null", buf.String()) 36 } 37 38 func Test_decode_null_object_field(t *testing.T) { 39 should := require.New(t) 40 iter := jsoni.ParseString(jsoni.ConfigDefault, `[null,"a"]`) 41 iter.ReadArray() 42 if iter.ReadObject() != "" { 43 t.FailNow() 44 } 45 iter.ReadArray() 46 if iter.ReadString() != "a" { 47 t.FailNow() 48 } 49 type TestObject struct { 50 Field string 51 } 52 objs := []TestObject{} 53 should.Nil(jsoni.UnmarshalFromString("[null]", &objs)) 54 should.Len(objs, 1) 55 } 56 57 func Test_decode_null_array_element(t *testing.T) { 58 should := require.New(t) 59 iter := jsoni.ParseString(jsoni.ConfigDefault, `[null,"a"]`) 60 should.True(iter.ReadArray()) 61 should.True(iter.ReadNil()) 62 should.True(iter.ReadArray()) 63 should.Equal("a", iter.ReadString()) 64 } 65 66 func Test_decode_null_string(t *testing.T) { 67 should := require.New(t) 68 iter := jsoni.ParseString(jsoni.ConfigDefault, `[null,"a"]`) 69 should.True(iter.ReadArray()) 70 should.Equal("", iter.ReadString()) 71 should.True(iter.ReadArray()) 72 should.Equal("a", iter.ReadString()) 73 } 74 75 func Test_decode_null_skip(t *testing.T) { 76 iter := jsoni.ParseString(jsoni.ConfigDefault, `[null,"a"]`) 77 iter.ReadArray() 78 iter.Skip() 79 iter.ReadArray() 80 if iter.ReadString() != "a" { 81 t.FailNow() 82 } 83 }