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  }