@@ -4,11 +4,11 @@ import (
44 "bytes"
55 "errors"
66 "fmt"
7- "io"
87 "os"
98 "testing"
109
1110 "github.com/BooleanCat/go-functional/internal/assert"
11+ "github.com/BooleanCat/go-functional/internal/fakes"
1212 "github.com/BooleanCat/go-functional/iter"
1313 "github.com/BooleanCat/go-functional/iter/ops"
1414 "github.com/BooleanCat/go-functional/result"
@@ -52,46 +52,29 @@ func TestLinesEmpty(t *testing.T) {
5252 assert .True (t , lines .Next ().IsNone ())
5353}
5454
55- type readResult struct {
56- content []byte
57- err error
58- }
59-
60- type fakeReader struct {
61- results []readResult
62- index int
63- }
64-
65- func newFakeReader (results ... readResult ) * fakeReader {
66- return & fakeReader {results , 0 }
67- }
68-
69- func (r * fakeReader ) Read (b []byte ) (int , error ) {
70- r .index += 1
71- if r .results [r .index - 1 ].err != nil {
72- return 0 , r .results [r .index - 1 ].err
73- }
74- n := copy (b , r .results [r .index - 1 ].content )
75- return n , nil
76- }
77-
78- var _ io.Reader = new (fakeReader )
79-
8055func TestLinesFailure (t * testing.T ) {
81- reader := newFakeReader (readResult {make ([]byte , 0 ), errors .New ("oops" )})
56+ reader := new (fakes.Reader )
57+ reader .ReadReturns (0 , errors .New ("oops" ))
8258
8359 _ , err := iter .Lines (reader ).Next ().Unwrap ().Value ()
8460 assert .NotNil (t , err )
8561 assert .Equal (t , err .Error (), "read line: oops" )
8662}
8763
8864func TestLinesFailureLater (t * testing.T ) {
89- lines := iter .Lines (newFakeReader (
90- readResult {[]byte ("hello\n " ), nil },
91- readResult {make ([]byte , 0 ), errors .New ("oops" )},
92- ))
65+ reader := new (fakes.Reader )
66+ reader .ReadStub = func (buffer []byte ) (int , error ) {
67+ copy (buffer , []byte ("hello\n " ))
68+ return 6 , nil
69+ }
70+
71+ lines := iter .Lines (reader )
9372
9473 assert .SliceEqual (t , lines .Next ().Unwrap ().Unwrap (), []byte ("hello" ))
74+
75+ reader .ReadStub = nil
76+ reader .ReadReturns (0 , errors .New ("oops" ))
77+
9578 assert .True (t , lines .Next ().Unwrap ().IsErr ())
9679}
9780
@@ -118,19 +101,29 @@ func TestLinesStringEmpty(t *testing.T) {
118101}
119102
120103func TestLinesStringFailure (t * testing.T ) {
121- lines := iter .LinesString (newFakeReader (readResult {make ([]byte , 0 ), errors .New ("oops" )}))
104+ reader := new (fakes.Reader )
105+ reader .ReadReturns (0 , errors .New ("oops" ))
106+
107+ lines := iter .LinesString (reader )
122108
123109 _ , err := lines .Next ().Unwrap ().Value ()
124110 assert .NotNil (t , err )
125111 assert .Equal (t , err .Error (), "read line: oops" )
126112}
127113
128114func TestLinesStringFailureLater (t * testing.T ) {
129- lines := iter .LinesString (newFakeReader (
130- readResult {[]byte ("hello\n " ), nil },
131- readResult {make ([]byte , 0 ), errors .New ("oops" )},
132- ))
115+ reader := new (fakes.Reader )
116+ reader .ReadStub = func (buffer []byte ) (int , error ) {
117+ copy (buffer , []byte ("hello\n " ))
118+ return 6 , nil
119+ }
120+
121+ lines := iter .LinesString (reader )
133122
134123 assert .Equal (t , lines .Next ().Unwrap ().Unwrap (), "hello" )
124+
125+ reader .ReadStub = nil
126+ reader .ReadReturns (0 , errors .New ("oops" ))
127+
135128 assert .True (t , lines .Next ().Unwrap ().IsErr ())
136129}
0 commit comments