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()))
 | |
| }
 |