65 lines
1.1 KiB
Go
65 lines
1.1 KiB
Go
|
package bufioutil
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"io"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestBufferedSeeker(t *testing.T) {
|
||
|
const alphabet = "abcdefghijklmnopqrstuvwxyz"
|
||
|
|
||
|
bs := NewBufferedSeeker(strings.NewReader(alphabet), 0) // minReadBufferSize = 16
|
||
|
|
||
|
checkRead := func(buf []byte, expected string) {
|
||
|
t.Helper()
|
||
|
_, err := bs.Read(buf)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
if !bytes.Equal(buf, []byte(expected)) {
|
||
|
t.Fatalf("expected %s, got %s", expected, buf)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Read the first 5 bytes
|
||
|
buf := make([]byte, 5)
|
||
|
|
||
|
checkRead(buf, "abcde")
|
||
|
|
||
|
// Seek back to the beginning
|
||
|
_, err := bs.Seek(0, io.SeekStart)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// read 'a'
|
||
|
checkRead(buf[:1], "a")
|
||
|
|
||
|
if bs.br.Buffered() == 0 {
|
||
|
t.Fatalf("totally unexpected sanity check failed")
|
||
|
}
|
||
|
|
||
|
// Seek past 'b'
|
||
|
_, err = bs.Seek(1, io.SeekCurrent)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
checkRead(buf, "cdefg")
|
||
|
|
||
|
// Seek back to the beginning
|
||
|
_, err = bs.Seek(0, io.SeekStart)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
checkRead(buf, "abcde")
|
||
|
|
||
|
// Seek to the end
|
||
|
_, err = bs.Seek(-5, io.SeekEnd)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
checkRead(buf, "vwxyz")
|
||
|
}
|