mirror of
https://github.com/json-iterator/go.git
synced 2025-04-23 11:37:32 +02:00
fix #295 decoder more was not compatible with standard library
This commit is contained in:
parent
5d789e5e02
commit
1624edc445
@ -81,10 +81,12 @@ func (adapter *Decoder) More() bool {
|
|||||||
if iter.Error != nil {
|
if iter.Error != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if iter.head != iter.tail {
|
c := iter.nextToken()
|
||||||
return true
|
if c == 0 {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return iter.loadMore()
|
iter.unreadByte()
|
||||||
|
return c != ']' && c != '}'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Buffered remaining buffer
|
// Buffered remaining buffer
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
"bytes"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_customize_type_decoder(t *testing.T) {
|
func Test_customize_type_decoder(t *testing.T) {
|
||||||
@ -98,3 +99,92 @@ func Test_read_custom_interface(t *testing.T) {
|
|||||||
should.Nil(err)
|
should.Nil(err)
|
||||||
should.Equal("hello", val.Hello())
|
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++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user