@@ -614,7 +614,7 @@ func TestDecoderMoreWithToken(t *testing.T) {
614
614
dec := NewDecoder (& decoderMoreWithTokenFailingReader {t : t , err : notIgnoredError })
615
615
616
616
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 )
618
618
}
619
619
620
620
if ! dec .More () {
@@ -633,3 +633,63 @@ func TestDecoderMoreWithToken(t *testing.T) {
633
633
t .Fatalf ("(*Decoder).Token() = (%v, %v); want = (<nil>, %v)" , val , err , io .EOF )
634
634
}
635
635
}
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