Skip to content

Commit

Permalink
fix #295 decoder more was not compatible with standard library
Browse files Browse the repository at this point in the history
  • Loading branch information
taowen committed Aug 6, 2018
1 parent 5d789e5 commit 1624edc
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 3 deletions.
8 changes: 5 additions & 3 deletions adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,12 @@ func (adapter *Decoder) More() bool {
if iter.Error != nil {
return false
}
if iter.head != iter.tail {
return true
c := iter.nextToken()
if c == 0 {
return false
}
return iter.loadMore()
iter.unreadByte()
return c != ']' && c != '}'
}

// Buffered remaining buffer
Expand Down
90 changes: 90 additions & 0 deletions extension_tests/decoder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"testing"
"time"
"unsafe"
"bytes"
)

func Test_customize_type_decoder(t *testing.T) {
Expand Down Expand Up @@ -98,3 +99,92 @@ func Test_read_custom_interface(t *testing.T) {
should.Nil(err)
should.Equal("hello", val.Hello())
}

const flow1 = `
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}`

const flow2 = `
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}
{"A":"hello"}
`

type (
Type1 struct {
A string
}

Type2 struct {
A string
}
)

func (t *Type2) UnmarshalJSON(data []byte) error {
return nil
}

func (t *Type2) MarshalJSON() ([]byte, error) {
return nil, nil
}

func TestType1NoFinalLF(t *testing.T) {
reader := bytes.NewReader([]byte(flow1))
dec := jsoniter.NewDecoder(reader)

i := 0
for dec.More() {
data := &Type1{}
if err := dec.Decode(data); err != nil {
t.Errorf("at %v got %v", i, err)
}
i++
}
}

func TestType1FinalLF(t *testing.T) {
reader := bytes.NewReader([]byte(flow2))
dec := jsoniter.NewDecoder(reader)

i := 0
for dec.More() {
data := &Type1{}
if err := dec.Decode(data); err != nil {
t.Errorf("at %v got %v", i, err)
}
i++
}
}

func TestType2NoFinalLF(t *testing.T) {
reader := bytes.NewReader([]byte(flow1))
dec := jsoniter.NewDecoder(reader)

i := 0
for dec.More() {
data := &Type2{}
if err := dec.Decode(data); err != nil {
t.Errorf("at %v got %v", i, err)
}
i++
}
}

func TestType2FinalLF(t *testing.T) {
reader := bytes.NewReader([]byte(flow2))
dec := jsoniter.NewDecoder(reader)

i := 0
for dec.More() {
data := &Type2{}
if err := dec.Decode(data); err != nil {
t.Errorf("at %v got %v", i, err)
}
i++
}
}

0 comments on commit 1624edc

Please sign in to comment.