2016-03-31 12:50:50 -04:00
|
|
|
package ioutils
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2017-02-28 08:11:15 -05:00
|
|
|
func TestFixedBufferCap(t *testing.T) {
|
|
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 5)}
|
|
|
|
|
|
|
|
n := buf.Cap()
|
|
|
|
if n != 5 {
|
|
|
|
t.Fatalf("expected buffer capacity to be 5 bytes, got %d", n)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFixedBufferLen(t *testing.T) {
|
|
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 10)}
|
|
|
|
|
|
|
|
buf.Write([]byte("hello"))
|
|
|
|
l := buf.Len()
|
|
|
|
if l != 5 {
|
|
|
|
t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
|
|
|
|
}
|
|
|
|
|
|
|
|
buf.Write([]byte("world"))
|
|
|
|
l = buf.Len()
|
|
|
|
if l != 10 {
|
|
|
|
t.Fatalf("expected buffer length to be 10 bytes, got %d", l)
|
|
|
|
}
|
|
|
|
|
|
|
|
// read 5 bytes
|
|
|
|
b := make([]byte, 5)
|
|
|
|
buf.Read(b)
|
|
|
|
|
|
|
|
l = buf.Len()
|
|
|
|
if l != 5 {
|
|
|
|
t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
|
|
|
|
}
|
|
|
|
|
|
|
|
n, err := buf.Write([]byte("i-wont-fit"))
|
|
|
|
if n != 0 {
|
|
|
|
t.Fatalf("expected no bytes to be written to buffer, got %d", n)
|
|
|
|
}
|
|
|
|
if err != errBufferFull {
|
|
|
|
t.Fatalf("expected errBufferFull, got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
l = buf.Len()
|
|
|
|
if l != 5 {
|
|
|
|
t.Fatalf("expected buffer length to still be 5 bytes, got %d", l)
|
|
|
|
}
|
|
|
|
|
|
|
|
buf.Reset()
|
|
|
|
l = buf.Len()
|
|
|
|
if l != 0 {
|
|
|
|
t.Fatalf("expected buffer length to still be 0 bytes, got %d", l)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFixedBufferString(t *testing.T) {
|
|
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 10)}
|
|
|
|
|
|
|
|
buf.Write([]byte("hello"))
|
|
|
|
buf.Write([]byte("world"))
|
|
|
|
|
|
|
|
out := buf.String()
|
|
|
|
if out != "helloworld" {
|
|
|
|
t.Fatalf("expected output to be \"helloworld\", got %q", out)
|
|
|
|
}
|
|
|
|
|
|
|
|
// read 5 bytes
|
|
|
|
b := make([]byte, 5)
|
|
|
|
buf.Read(b)
|
|
|
|
|
|
|
|
// test that fixedBuffer.String() only returns the part that hasn't been read
|
|
|
|
out = buf.String()
|
|
|
|
if out != "world" {
|
|
|
|
t.Fatalf("expected output to be \"world\", got %q", out)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-03-31 12:50:50 -04:00
|
|
|
func TestFixedBufferWrite(t *testing.T) {
|
|
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 64)}
|
|
|
|
n, err := buf.Write([]byte("hello"))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if n != 5 {
|
|
|
|
t.Fatalf("expected 5 bytes written, got %d", n)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(buf.buf[:5]) != "hello" {
|
|
|
|
t.Fatalf("expected \"hello\", got %q", string(buf.buf[:5]))
|
|
|
|
}
|
|
|
|
|
|
|
|
n, err = buf.Write(bytes.Repeat([]byte{1}, 64))
|
2017-01-17 21:08:31 -05:00
|
|
|
if n != 59 {
|
|
|
|
t.Fatalf("expected 59 bytes written before buffer is full, got %d", n)
|
|
|
|
}
|
2016-03-31 12:50:50 -04:00
|
|
|
if err != errBufferFull {
|
|
|
|
t.Fatalf("expected errBufferFull, got %v - %v", err, buf.buf[:64])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFixedBufferRead(t *testing.T) {
|
|
|
|
buf := &fixedBuffer{buf: make([]byte, 0, 64)}
|
|
|
|
if _, err := buf.Write([]byte("hello world")); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
b := make([]byte, 5)
|
|
|
|
n, err := buf.Read(b)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if n != 5 {
|
|
|
|
t.Fatalf("expected 5 bytes read, got %d - %s", n, buf.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(b) != "hello" {
|
|
|
|
t.Fatalf("expected \"hello\", got %q", string(b))
|
|
|
|
}
|
|
|
|
|
|
|
|
n, err = buf.Read(b)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if n != 5 {
|
|
|
|
t.Fatalf("expected 5 bytes read, got %d", n)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(b) != " worl" {
|
|
|
|
t.Fatalf("expected \" worl\", got %s", string(b))
|
|
|
|
}
|
|
|
|
|
|
|
|
b = b[:1]
|
|
|
|
n, err = buf.Read(b)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if n != 1 {
|
|
|
|
t.Fatalf("expected 1 byte read, got %d - %s", n, buf.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(b) != "d" {
|
|
|
|
t.Fatalf("expected \"d\", got %s", string(b))
|
|
|
|
}
|
|
|
|
}
|