mirror of
https://github.com/golang/go
synced 2024-11-19 00:44:40 -07:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
|
// Copyright 2010 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package io_test
|
||
|
|
||
|
import (
|
||
|
. "io"
|
||
|
"os"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestMultiReader(t *testing.T) {
|
||
|
var mr Reader
|
||
|
var buf []byte
|
||
|
nread := 0
|
||
|
withFooBar := func(tests func()) {
|
||
|
r1 := strings.NewReader("foo ")
|
||
|
r2 := strings.NewReader("bar")
|
||
|
mr = MultiReader(r1, r2)
|
||
|
buf = make([]byte, 20)
|
||
|
tests()
|
||
|
}
|
||
|
expectRead := func(size int, expected string, eerr os.Error) {
|
||
|
nread++
|
||
|
n, gerr := mr.Read(buf[0:size])
|
||
|
if n != len(expected) {
|
||
|
t.Errorf("#%d, expected %d bytes; got %d",
|
||
|
nread, len(expected), n)
|
||
|
}
|
||
|
got := string(buf[0:n])
|
||
|
if got != expected {
|
||
|
t.Errorf("#%d, expected %q; got %q",
|
||
|
nread, expected, got)
|
||
|
}
|
||
|
if gerr != eerr {
|
||
|
t.Errorf("#%d, expected error %v; got %v",
|
||
|
nread, eerr, gerr)
|
||
|
}
|
||
|
buf = buf[n:]
|
||
|
}
|
||
|
withFooBar(func() {
|
||
|
expectRead(2, "fo", nil)
|
||
|
expectRead(5, "o ", nil)
|
||
|
expectRead(5, "bar", nil)
|
||
|
expectRead(5, "", os.EOF)
|
||
|
})
|
||
|
withFooBar(func() {
|
||
|
expectRead(4, "foo ", nil)
|
||
|
expectRead(1, "b", nil)
|
||
|
expectRead(3, "ar", nil)
|
||
|
expectRead(1, "", os.EOF)
|
||
|
})
|
||
|
withFooBar(func() {
|
||
|
expectRead(5, "foo ", nil)
|
||
|
})
|
||
|
}
|