You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	fix #295 decoder more was not compatible with standard library
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 	"unsafe" | ||||
| 	"bytes" | ||||
| ) | ||||
|  | ||||
| func Test_customize_type_decoder(t *testing.T) { | ||||
| @@ -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++ | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user