Skip to content

Commit 1a6ff2f

Browse files
committed
add additional test case
Change-Id: I56767015384d06cae6f0c4cea62a9f286bfe4743
1 parent 338a31d commit 1a6ff2f

File tree

1 file changed

+61
-1
lines changed

1 file changed

+61
-1
lines changed

src/encoding/json/stream_test.go

+61-1
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ func TestDecoderMoreWithToken(t *testing.T) {
614614
dec := NewDecoder(&decoderMoreWithTokenFailingReader{t: t, err: notIgnoredError})
615615

616616
if val, err := dec.Token(); err != nil || val != Delim('{') {
617-
t.Fatalf("(*Decoder).Token() = (%v, %v); want = ([, <nil>)", val, err)
617+
t.Fatalf("(*Decoder).Token() = (%v, %v); want = ({, <nil>)", val, err)
618618
}
619619

620620
if !dec.More() {
@@ -633,3 +633,63 @@ func TestDecoderMoreWithToken(t *testing.T) {
633633
t.Fatalf("(*Decoder).Token() = (%v, %v); want = (<nil>, %v)", val, err, io.EOF)
634634
}
635635
}
636+
637+
type moreWithErrorsTestReader struct {
638+
t *testing.T
639+
i int
640+
err error
641+
}
642+
643+
func (c *moreWithErrorsTestReader) Read(b []byte) (n int, err error) {
644+
i := c.i
645+
c.i++
646+
647+
defer func() {
648+
// Decoder always passes a buffer with size that has at least 512 Bytes. This test
649+
// depends on that behaviour, so that the reader does not get unnecessarily complicated.
650+
if len(b) == n {
651+
c.t.Fatal("small buffer passed to Read")
652+
}
653+
}()
654+
655+
switch i {
656+
case 0:
657+
return copy(b, `[{ "test": 1 }`), nil
658+
case 1:
659+
return 0, c.err
660+
case 2:
661+
return copy(b, `, {"test": 2}]`), nil
662+
default:
663+
return 0, io.EOF
664+
}
665+
}
666+
667+
func TestMoreWithErrors(t *testing.T) {
668+
notIgnoredError := errors.New("not ignored error")
669+
dec := NewDecoder(&moreWithErrorsTestReader{t: t, err: notIgnoredError})
670+
671+
if val, err := dec.Token(); err != nil || val != Delim('[') {
672+
t.Fatalf("(*Decoder).Token() = (%v, %v); want = ([, <nil>)", val, err)
673+
}
674+
675+
second := false
676+
for dec.More() {
677+
var msg struct{ Test int }
678+
err := dec.Decode(&msg)
679+
var expectErr error = nil
680+
if second {
681+
expectErr = notIgnoredError
682+
}
683+
if err != expectErr {
684+
t.Fatalf("(*Decoder).Decode() = %v; want = %v", err, expectErr)
685+
}
686+
if err != nil {
687+
return
688+
}
689+
second = true
690+
}
691+
692+
if val, err := dec.Token(); err != nil || val != Delim(']') {
693+
t.Fatalf("(*Decoder).Token() = (%v, %v); want = (], <nil>)", val, err)
694+
}
695+
}

0 commit comments

Comments
 (0)