Skip to content

Commit

Permalink
add additional test case
Browse files Browse the repository at this point in the history
Change-Id: I56767015384d06cae6f0c4cea62a9f286bfe4743
  • Loading branch information
mateusz834 committed May 25, 2024
1 parent 338a31d commit 1a6ff2f
Showing 1 changed file with 61 additions and 1 deletion.
62 changes: 61 additions & 1 deletion src/encoding/json/stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ func TestDecoderMoreWithToken(t *testing.T) {
dec := NewDecoder(&decoderMoreWithTokenFailingReader{t: t, err: notIgnoredError})

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

if !dec.More() {
Expand All @@ -633,3 +633,63 @@ func TestDecoderMoreWithToken(t *testing.T) {
t.Fatalf("(*Decoder).Token() = (%v, %v); want = (<nil>, %v)", val, err, io.EOF)
}
}

type moreWithErrorsTestReader struct {
t *testing.T
i int
err error
}

func (c *moreWithErrorsTestReader) Read(b []byte) (n int, err error) {
i := c.i
c.i++

defer func() {
// Decoder always passes a buffer with size that has at least 512 Bytes. This test
// depends on that behaviour, so that the reader does not get unnecessarily complicated.
if len(b) == n {
c.t.Fatal("small buffer passed to Read")
}
}()

switch i {
case 0:
return copy(b, `[{ "test": 1 }`), nil
case 1:
return 0, c.err
case 2:
return copy(b, `, {"test": 2}]`), nil
default:
return 0, io.EOF
}
}

func TestMoreWithErrors(t *testing.T) {
notIgnoredError := errors.New("not ignored error")
dec := NewDecoder(&moreWithErrorsTestReader{t: t, err: notIgnoredError})

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

second := false
for dec.More() {
var msg struct{ Test int }
err := dec.Decode(&msg)
var expectErr error = nil
if second {
expectErr = notIgnoredError
}
if err != expectErr {
t.Fatalf("(*Decoder).Decode() = %v; want = %v", err, expectErr)
}
if err != nil {
return
}
second = true
}

if val, err := dec.Token(); err != nil || val != Delim(']') {
t.Fatalf("(*Decoder).Token() = (%v, %v); want = (], <nil>)", val, err)
}
}

0 comments on commit 1a6ff2f

Please sign in to comment.