| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | package buf_testimport (	"bufio"	"bytes"	"crypto/rand"	"io"	"testing"	"v2ray.com/core/common"	. "v2ray.com/core/common/buf"	"v2ray.com/core/transport/pipe"	. "v2ray.com/ext/assert")func TestWriter(t *testing.T) {	assert := With(t)	lb := New()	assert(lb.AppendSupplier(ReadFrom(rand.Reader)), IsNil)	expectedBytes := append([]byte(nil), lb.Bytes()...)	writeBuffer := bytes.NewBuffer(make([]byte, 0, 1024*1024))	writer := NewBufferedWriter(NewWriter(writeBuffer))	writer.SetBuffered(false)	err := writer.WriteMultiBuffer(NewMultiBufferValue(lb))	assert(err, IsNil)	assert(writer.Flush(), IsNil)	assert(expectedBytes, Equals, writeBuffer.Bytes())}func TestBytesWriterReadFrom(t *testing.T) {	assert := With(t)	const size = 50000	pReader, pWriter := pipe.New(pipe.WithSizeLimit(size))	reader := bufio.NewReader(io.LimitReader(rand.Reader, size))	writer := NewBufferedWriter(pWriter)	writer.SetBuffered(false)	nBytes, err := reader.WriteTo(writer)	assert(nBytes, Equals, int64(size))	assert(err, IsNil)	mb, err := pReader.ReadMultiBuffer()	assert(err, IsNil)	assert(mb.Len(), Equals, int32(size))}func TestDiscardBytes(t *testing.T) {	assert := With(t)	b := New()	common.Must(b.Reset(ReadFullFrom(rand.Reader, Size)))	nBytes, err := io.Copy(DiscardBytes, b)	assert(nBytes, Equals, int64(Size))	assert(err, IsNil)}func TestDiscardBytesMultiBuffer(t *testing.T) {	assert := With(t)	const size = 10240*1024 + 1	buffer := bytes.NewBuffer(make([]byte, 0, size))	common.Must2(buffer.ReadFrom(io.LimitReader(rand.Reader, size)))	r := NewReader(buffer)	nBytes, err := io.Copy(DiscardBytes, &BufferedReader{Reader: r})	assert(nBytes, Equals, int64(size))	assert(err, IsNil)}func TestWriterInterface(t *testing.T) {	{		var writer interface{} = (*BufferToBytesWriter)(nil)		switch writer.(type) {		case Writer, io.Writer, io.ReaderFrom:		default:			t.Error("BufferToBytesWriter is not Writer, io.Writer or io.ReaderFrom")		}	}	{		var writer interface{} = (*BufferedWriter)(nil)		switch writer.(type) {		case Writer, io.Writer, io.ReaderFrom, io.ByteWriter:		default:			t.Error("BufferedWriter is not Writer, io.Writer, io.ReaderFrom or io.ByteWriter")		}	}}
 |