Prechádzať zdrojové kódy

Merge branch 'master' of https://github.com/json-iterator/go

Tao Wen 8 rokov pred
rodič
commit
dc388588a3
2 zmenil súbory, kde vykonal 35 pridanie a 0 odobranie
  1. 4 0
      feature_iter.go
  2. 31 0
      jsoniter_iterator_test.go

+ 4 - 0
feature_iter.go

@@ -1,6 +1,7 @@
 package jsoniter
 
 import (
+	"encoding/json"
 	"fmt"
 	"io"
 )
@@ -273,6 +274,9 @@ func (iter *Iterator) Read() interface{} {
 	case String:
 		return iter.ReadString()
 	case Number:
+		if iter.cfg.configBeforeFrozen.UseNumber {
+			return json.Number(iter.readNumberAsString())
+		}
 		return iter.ReadFloat64()
 	case Nil:
 		iter.skipFourBytes('n', 'u', 'l', 'l')

+ 31 - 0
jsoniter_iterator_test.go

@@ -2,7 +2,12 @@ package jsoniter
 
 import (
 	"bytes"
+	"encoding/json"
+	"fmt"
+	"strconv"
 	"testing"
+
+	"github.com/stretchr/testify/require"
 )
 
 func Test_bad_case(t *testing.T) {
@@ -33,3 +38,29 @@ func Test_bad_case(t *testing.T) {
 		t.Fatal(count)
 	}
 }
+
+func Test_iterator_use_number(t *testing.T) {
+	// Test UseNumber with iterator Read()
+	inputs := []string{`2147483647`, `-2147483648`}
+	for _, input := range inputs {
+		t.Run(fmt.Sprintf("%v", input), func(t *testing.T) {
+			should := require.New(t)
+			iter := ParseString(Config{UseNumber: true}.Froze(), input)
+			expected := json.Number(input)
+			should.Equal(expected, iter.Read())
+		})
+	}
+}
+
+func Test_iterator_without_number(t *testing.T) {
+	inputs := []string{`2147483647`, `-2147483648`}
+	for _, input := range inputs {
+		t.Run(fmt.Sprintf("%v", input), func(t *testing.T) {
+			should := require.New(t)
+			iter := ParseString(ConfigDefault, input)
+			expected, err := strconv.ParseInt(input, 10, 32)
+			should.Nil(err)
+			should.Equal(float64(expected), iter.Read())
+		})
+	}
+}