@@ -158,9 +158,9 @@ func (e *outExpecter) ExpectMatchContext(ctx context.Context, str string) string
158
158
e .t .Helper ()
159
159
160
160
var buffer bytes.Buffer
161
- err := e .doMatchWithDeadline (ctx , "ExpectMatchContext" , func () error {
161
+ err := e .doMatchWithDeadline (ctx , "ExpectMatchContext" , func (rd * bufio. Reader ) error {
162
162
for {
163
- r , _ , err := e . runeReader .ReadRune ()
163
+ r , _ , err := rd .ReadRune ()
164
164
if err != nil {
165
165
return err
166
166
}
@@ -186,9 +186,9 @@ func (e *outExpecter) ExpectNoMatchBefore(ctx context.Context, match, before str
186
186
e .t .Helper ()
187
187
188
188
var buffer bytes.Buffer
189
- err := e .doMatchWithDeadline (ctx , "ExpectNoMatchBefore" , func () error {
189
+ err := e .doMatchWithDeadline (ctx , "ExpectNoMatchBefore" , func (rd * bufio. Reader ) error {
190
190
for {
191
- r , _ , err := e . runeReader .ReadRune ()
191
+ r , _ , err := rd .ReadRune ()
192
192
if err != nil {
193
193
return err
194
194
}
@@ -218,9 +218,9 @@ func (e *outExpecter) Peek(ctx context.Context, n int) []byte {
218
218
e .t .Helper ()
219
219
220
220
var out []byte
221
- err := e .doMatchWithDeadline (ctx , "Peek" , func () error {
221
+ err := e .doMatchWithDeadline (ctx , "Peek" , func (rd * bufio. Reader ) error {
222
222
var err error
223
- out , err = e . runeReader .Peek (n )
223
+ out , err = rd .Peek (n )
224
224
return err
225
225
})
226
226
if err != nil {
@@ -235,9 +235,9 @@ func (e *outExpecter) ReadRune(ctx context.Context) rune {
235
235
e .t .Helper ()
236
236
237
237
var r rune
238
- err := e .doMatchWithDeadline (ctx , "ReadRune" , func () error {
238
+ err := e .doMatchWithDeadline (ctx , "ReadRune" , func (rd * bufio. Reader ) error {
239
239
var err error
240
- r , _ , err = e . runeReader .ReadRune ()
240
+ r , _ , err = rd .ReadRune ()
241
241
return err
242
242
})
243
243
if err != nil {
@@ -252,9 +252,9 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
252
252
e .t .Helper ()
253
253
254
254
var buffer bytes.Buffer
255
- err := e .doMatchWithDeadline (ctx , "ReadLine" , func () error {
255
+ err := e .doMatchWithDeadline (ctx , "ReadLine" , func (rd * bufio. Reader ) error {
256
256
for {
257
- r , _ , err := e . runeReader .ReadRune ()
257
+ r , _ , err := rd .ReadRune ()
258
258
if err != nil {
259
259
return err
260
260
}
@@ -267,14 +267,14 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
267
267
268
268
// Unicode code points can be up to 4 bytes, but the
269
269
// ones we're looking for are only 1 byte.
270
- b , _ := e . runeReader .Peek (1 )
270
+ b , _ := rd .Peek (1 )
271
271
if len (b ) == 0 {
272
272
return nil
273
273
}
274
274
275
275
r , _ = utf8 .DecodeRune (b )
276
276
if r == '\n' {
277
- _ , _ , err = e . runeReader .ReadRune ()
277
+ _ , _ , err = rd .ReadRune ()
278
278
if err != nil {
279
279
return err
280
280
}
@@ -297,7 +297,7 @@ func (e *outExpecter) ReadLine(ctx context.Context) string {
297
297
return buffer .String ()
298
298
}
299
299
300
- func (e * outExpecter ) doMatchWithDeadline (ctx context.Context , name string , fn func () error ) error {
300
+ func (e * outExpecter ) doMatchWithDeadline (ctx context.Context , name string , fn func (* bufio. Reader ) error ) error {
301
301
e .t .Helper ()
302
302
303
303
// A timeout is mandatory, caller can decide by passing a context
@@ -314,14 +314,15 @@ func (e *outExpecter) doMatchWithDeadline(ctx context.Context, name string, fn f
314
314
match := make (chan error , 1 )
315
315
go func () {
316
316
defer close (match )
317
- match <- fn ()
317
+ match <- fn (e . runeReader )
318
318
}()
319
319
select {
320
320
case err := <- match :
321
321
return err
322
322
case <- ctx .Done ():
323
- // Ensure goroutine is cleaned up before test exit.
324
- _ = e .close ("match deadline exceeded" )
323
+ // Ensure goroutine is cleaned up before test exit, do not call
324
+ // (*outExpecter).close here to let the caller decide.
325
+ _ = e .out .Close ()
325
326
<- match
326
327
327
328
return xerrors .Errorf ("match deadline exceeded: %w" , ctx .Err ())
0 commit comments