github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/jsoni/stream_test.go (about) 1 package jsoni 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func Test_writeByte_should_grow_buffer(t *testing.T) { 11 should := require.New(t) 12 stream := NewStream(ConfigDefault, nil, 1) 13 stream.writeByte('1') 14 should.Equal("1", string(stream.Buffer())) 15 should.Equal(1, len(stream.buf)) 16 stream.writeByte('2') 17 should.Equal("12", string(stream.Buffer())) 18 should.Equal(2, len(stream.buf)) 19 stream.write3Bytes('3', '4', '5') 20 should.Equal("12345", string(stream.Buffer())) 21 } 22 23 func Test_writeBytes_should_grow_buffer(t *testing.T) { 24 should := require.New(t) 25 stream := NewStream(ConfigDefault, nil, 1) 26 stream.Write([]byte{'1', '2'}) 27 should.Equal("12", string(stream.Buffer())) 28 should.Equal(2, len(stream.buf)) 29 stream.Write([]byte{'3', '4', '5', '6', '7'}) 30 should.Equal("1234567", string(stream.Buffer())) 31 should.Equal(7, len(stream.buf)) 32 } 33 34 func Test_writeIndention_should_grow_buffer(t *testing.T) { 35 ctx := context.Background() 36 should := require.New(t) 37 stream := NewStream(Config{IndentionStep: 2}.Froze(), nil, 1) 38 stream.WriteVal(ctx, []int{1, 2, 3}) 39 should.Equal("[\n 1,\n 2,\n 3\n]", string(stream.Buffer())) 40 } 41 42 func Test_writeRaw_should_grow_buffer(t *testing.T) { 43 should := require.New(t) 44 stream := NewStream(ConfigDefault, nil, 1) 45 stream.WriteRaw("123") 46 should.Nil(stream.Error) 47 should.Equal("123", string(stream.Buffer())) 48 } 49 50 func Test_writeString_should_grow_buffer(t *testing.T) { 51 should := require.New(t) 52 stream := NewStream(ConfigDefault, nil, 0) 53 stream.WriteString("123") 54 should.Nil(stream.Error) 55 should.Equal(`"123"`, string(stream.Buffer())) 56 } 57 58 type NopWriter struct { 59 bufferSize int 60 } 61 62 func (w *NopWriter) Write(p []byte) (n int, err error) { 63 w.bufferSize = cap(p) 64 return len(p), nil 65 } 66 67 func Test_flush_buffer_should_stop_grow_buffer(t *testing.T) { 68 // Stream an array of a zillion zeros. 69 writer := new(NopWriter) 70 stream := NewStream(ConfigDefault, writer, 512) 71 stream.WriteArrayStart() 72 for i := 0; i < 10000000; i++ { 73 stream.WriteInt(0) 74 stream.WriteMore() 75 stream.Flush() 76 } 77 stream.WriteInt(0) 78 stream.WriteArrayEnd() 79 80 // Confirm that the buffer didn't have to grow. 81 should := require.New(t) 82 83 // 512 is the internal buffer size set in NewEncoder 84 // 85 // Flush is called after each array element, so only the first 8 bytes of it 86 // is ever used, and it is never extended. Capacity remains 512. 87 should.Equal(512, writer.bufferSize) 88 }