github.com/qiniu/x@v1.11.9/bufiox/bufio_test.go (about)

     1  package bufiox
     2  
     3  import (
     4  	"bufio"
     5  	"io"
     6  	"os"
     7  	"strings"
     8  	"testing"
     9  	"unsafe"
    10  )
    11  
    12  // -------------------------------------------------------------------------------------
    13  
    14  func TestReaderSize(t *testing.T) {
    15  	b1 := NewReaderBuffer(nil)
    16  	size1 := unsafe.Sizeof(*b1)
    17  	b2 := bufio.NewReader(os.Stdin)
    18  	size2 := unsafe.Sizeof(*b2)
    19  	if size1 != size2 {
    20  		t.Fatal("TestReaderSize: sizeof(bufiox.Reader) != sizeof(bufio.Reader)")
    21  	}
    22  	b, err := ReadAll(b1)
    23  	if err != nil || b != nil {
    24  		t.Fatal("ReadAll failed:", err, b)
    25  	}
    26  }
    27  
    28  func TestGetUnderlyingReaderAndSeek(t *testing.T) {
    29  	r := strings.NewReader("Hello, china!!!")
    30  	b := bufio.NewReader(r)
    31  	if getUnderlyingReader(b) != r {
    32  		t.Fatal("getUnderlyingReader failed")
    33  	}
    34  	b.ReadByte()
    35  	r1 := getUnderlyingReader(b)
    36  	b1 := bufio.NewReader(r1)
    37  	if _, err1 := b1.ReadByte(); err1 != io.EOF {
    38  		t.Fatal("bufio.NewReader cache?")
    39  	}
    40  	newoff, err := Seek(b, 7, io.SeekStart)
    41  	if err != nil || newoff != 7 {
    42  		t.Fatal("Seek failed:", err, newoff)
    43  	}
    44  	china, err := b.ReadString('!')
    45  	if err != nil {
    46  		t.Fatal("ReadString failed:", err)
    47  	}
    48  	if china != "china!" {
    49  		t.Fatal("Seek failed:", china)
    50  	}
    51  }
    52  
    53  // -------------------------------------------------------------------------------------
    54  
    55  func TestSeeker(t *testing.T) {
    56  	r := strings.NewReader("Hello, china!!!")
    57  	b := NewReader(r)
    58  	var rdseeker io.ReadSeeker = b
    59  	rdseeker.Seek(7, io.SeekStart)
    60  	china, err := b.ReadString('!')
    61  	if err != nil {
    62  		t.Fatal("ReadString failed:", err)
    63  	}
    64  	if china != "china!" {
    65  		t.Fatal("Seek failed:", china)
    66  	}
    67  	b.Seek(0, io.SeekStart)
    68  
    69  	b2 := NewReaderSize(r, 64)
    70  	data, err := ReadAll(&b2.Reader)
    71  	if err != nil || string(data) != "Hello, china!!!" {
    72  		t.Fatal("ReadAll failed:", err, data)
    73  	}
    74  
    75  	b3 := NewReaderSize(b2, 32)
    76  	if b2 != b3 {
    77  		t.Fatal("NewReader on *bufiox.Reader")
    78  	}
    79  }
    80  
    81  // -------------------------------------------------------------------------------------