Prechádzať zdrojové kódy

fix #214 report EOF like stdlib

Tao Wen 8 rokov pred
rodič
commit
60a9df5ebc
3 zmenil súbory, kde vykonal 15 pridanie a 0 odobranie
  1. 3 0
      feature_adapter.go
  2. 5 0
      feature_config.go
  3. 7 0
      jsoniter_invalid_test.go

+ 3 - 0
feature_adapter.go

@@ -71,6 +71,9 @@ type Decoder struct {
 
 // Decode decode JSON into interface{}
 func (adapter *Decoder) Decode(obj interface{}) error {
+	if adapter.iter.Error == io.EOF {
+		return io.EOF
+	}
 	adapter.iter.ReadVal(obj)
 	err := adapter.iter.Error
 	if err == io.EOF {

+ 5 - 0
feature_config.go

@@ -337,6 +337,11 @@ func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder {
 
 func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder {
 	iter := Parse(cfg, reader, 512)
+	if reader != nil {
+		if !iter.loadMore() {
+			iter.Error = io.EOF
+		}
+	}
 	return &Decoder{iter}
 }
 

+ 7 - 0
jsoniter_invalid_test.go

@@ -3,6 +3,7 @@ package jsoniter
 import (
 	"bytes"
 	"encoding/json"
+	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 	"io"
 	"testing"
@@ -184,3 +185,9 @@ func Test_func_pointer_type(t *testing.T) {
 		should.NotNil(Unmarshal([]byte(`{"Obj":{"F": "hello"}}`), &obj))
 	})
 }
+
+func TestEOF(t *testing.T) {
+	var s string
+	err := ConfigCompatibleWithStandardLibrary.NewDecoder(&bytes.Buffer{}).Decode(&s)
+	assert.Equal(t, io.EOF, err)
+}