56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package buffer
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func noErrorT(t *testing.T, err error) {
 | 
						|
	if nil != err {
 | 
						|
		t.Fatalf("%s", err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func boolT(t *testing.T, cond bool, s ...string) {
 | 
						|
	if !cond {
 | 
						|
		what := strings.Join(s, ", ")
 | 
						|
		if len(what) > 0 {
 | 
						|
			what = ": " + what
 | 
						|
		}
 | 
						|
		t.Fatalf("assert.Bool failed%s", what)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestSeeking(t *testing.T) {
 | 
						|
	partA := []byte("hello, ")
 | 
						|
	partB := []byte("world!")
 | 
						|
 | 
						|
	buf := NewSeekerBuffer(partA)
 | 
						|
 | 
						|
	boolT(t, buf.Len() == len(partA), fmt.Sprintf("on init: have length %d, want length %d", buf.Len(), len(partA)))
 | 
						|
 | 
						|
	b := make([]byte, 32)
 | 
						|
 | 
						|
	n, err := buf.Read(b)
 | 
						|
	noErrorT(t, err)
 | 
						|
	boolT(t, buf.Len() == 0, fmt.Sprintf("after reading 1: have length %d, want length 0", buf.Len()))
 | 
						|
	boolT(t, n == len(partA), fmt.Sprintf("after reading 2: have length %d, want length %d", n, len(partA)))
 | 
						|
 | 
						|
	n, err = buf.Write(partB)
 | 
						|
	noErrorT(t, err)
 | 
						|
	boolT(t, n == len(partB), fmt.Sprintf("after writing: have length %d, want length %d", n, len(partB)))
 | 
						|
 | 
						|
	n, err = buf.Read(b)
 | 
						|
	noErrorT(t, err)
 | 
						|
	boolT(t, buf.Len() == 0, fmt.Sprintf("after rereading 1: have length %d, want length 0", buf.Len()))
 | 
						|
	boolT(t, n == len(partB), fmt.Sprintf("after rereading 2: have length %d, want length %d", n, len(partB)))
 | 
						|
 | 
						|
	partsLen := len(partA) + len(partB)
 | 
						|
	_ = buf.Rewind()
 | 
						|
	boolT(t, buf.Len() == partsLen, fmt.Sprintf("after rewinding: have length %d, want length %d", buf.Len(), partsLen))
 | 
						|
 | 
						|
	buf.Close()
 | 
						|
	boolT(t, buf.Len() == 0, fmt.Sprintf("after closing, have length %d, want length 0", buf.Len()))
 | 
						|
}
 |