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 // -------------------------------------------------------------------------------------