-
Notifications
You must be signed in to change notification settings - Fork 0
/
lazymultireader_test.go
104 lines (97 loc) · 1.92 KB
/
lazymultireader_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package lazymultireader
import (
"io"
"strings"
"testing"
)
type stringReadOpener struct {
strings.Reader
}
func (b *stringReadOpener) Open() error {
// nop
return nil
}
func NewStringReadOpener(s string) *stringReadOpener {
return &stringReadOpener{
*strings.NewReader(s),
}
}
func Test_eofReader_Read(t *testing.T) {
type args struct {
in0 []byte
}
tests := []struct {
name string
e eofReader
args args
want int
wantErr bool
}{
{
"Should return EOF",
eofReader{},
args{nil},
0,
true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
e := eofReader{}
got, err := e.Read(tt.args.in0)
if (err != nil) != tt.wantErr {
t.Errorf("eofReader.Read() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("eofReader.Read() = %v, want %v", got, tt.want)
}
})
}
}
func TestMultiReader(t *testing.T) {
var mr io.Reader
var buf []byte
nread := 0
withFooBar := func(tests func()) {
r1 := NewStringReadOpener("foo ")
r2 := NewStringReadOpener("")
r3 := NewStringReadOpener("bar")
mr = NewLazyMultiReader(r1, r2, r3)
buf = make([]byte, 20)
tests()
}
expectRead := func(size int, expected string, eerr 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, "", io.EOF)
})
withFooBar(func() {
expectRead(4, "foo ", nil)
expectRead(1, "b", nil)
expectRead(3, "ar", nil)
expectRead(1, "", io.EOF)
})
withFooBar(func() {
expectRead(5, "foo ", nil)
})
}