@@ -9413,6 +9413,51 @@ func TestUnmarshalDecodeOptions(t *testing.T) {
9413
9413
}
9414
9414
}
9415
9415
9416
+ func TestUnmarshalDecodeStream (t * testing.T ) {
9417
+ tests := []struct {
9418
+ in string
9419
+ want []any
9420
+ err error
9421
+ }{
9422
+ {in : `` , err : io .EOF },
9423
+ {in : `{` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{` ), Err : io .ErrUnexpectedEOF }},
9424
+ {in : `{"` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{"` ), Err : io .ErrUnexpectedEOF }},
9425
+ {in : `{"k"` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{"k"` ), JSONPointer : "/k" , Err : io .ErrUnexpectedEOF }},
9426
+ {in : `{"k":` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{"k":` ), JSONPointer : "/k" , Err : io .ErrUnexpectedEOF }},
9427
+ {in : `{"k",` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{"k"` ), JSONPointer : "/k" , Err : jsonwire .NewInvalidCharacterError ("," , "after object name (expecting ':')" )}},
9428
+ {in : `{"k"}` , err : & jsontext.SyntacticError {ByteOffset : len64 (`{"k"` ), JSONPointer : "/k" , Err : jsonwire .NewInvalidCharacterError ("}" , "after object name (expecting ':')" )}},
9429
+ {in : `[` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[` ), Err : io .ErrUnexpectedEOF }},
9430
+ {in : `[0` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[0` ), Err : io .ErrUnexpectedEOF }},
9431
+ {in : ` [0` , err : & jsontext.SyntacticError {ByteOffset : len64 (` [0` ), Err : io .ErrUnexpectedEOF }},
9432
+ {in : `[0.` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[` ), JSONPointer : "/0" , Err : io .ErrUnexpectedEOF }},
9433
+ {in : `[0. ` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[0.` ), JSONPointer : "/0" , Err : jsonwire .NewInvalidCharacterError (" " , "in number (expecting digit)" )}},
9434
+ {in : `[0,` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[0,` ), Err : io .ErrUnexpectedEOF }},
9435
+ {in : `[0:` , err : & jsontext.SyntacticError {ByteOffset : len64 (`[0` ), Err : jsonwire .NewInvalidCharacterError (":" , "after array element (expecting ',' or ']')" )}},
9436
+ {in : `n` , err : & jsontext.SyntacticError {ByteOffset : len64 (`n` ), Err : io .ErrUnexpectedEOF }},
9437
+ {in : `nul` , err : & jsontext.SyntacticError {ByteOffset : len64 (`nul` ), Err : io .ErrUnexpectedEOF }},
9438
+ {in : `fal ` , err : & jsontext.SyntacticError {ByteOffset : len64 (`fal` ), Err : jsonwire .NewInvalidCharacterError (" " , "in literal false (expecting 's')" )}},
9439
+ {in : `false` , want : []any {false }, err : io .EOF },
9440
+ {in : `false0.0[]null` , want : []any {false , 0.0 , []any {}, nil }, err : io .EOF },
9441
+ }
9442
+ for _ , tt := range tests {
9443
+ d := jsontext .NewDecoder (strings .NewReader (tt .in ))
9444
+ var got []any
9445
+ for {
9446
+ var v any
9447
+ if err := UnmarshalDecode (d , & v ); err != nil {
9448
+ if ! reflect .DeepEqual (err , tt .err ) {
9449
+ t .Errorf ("`%s`: UnmarshalDecode error = %v, want %v" , tt .in , err , tt .err )
9450
+ }
9451
+ break
9452
+ }
9453
+ got = append (got , v )
9454
+ }
9455
+ if ! reflect .DeepEqual (got , tt .want ) {
9456
+ t .Errorf ("`%s`: UnmarshalDecode = %v, want %v" , tt .in , got , tt .want )
9457
+ }
9458
+ }
9459
+ }
9460
+
9416
9461
// BenchmarkUnmarshalDecodeOptions is a minimal decode operation to measure
9417
9462
// the overhead options setup before the unmarshal operation.
9418
9463
func BenchmarkUnmarshalDecodeOptions (b * testing.B ) {
0 commit comments