mirror of
https://github.com/json-iterator/go.git
synced 2024-11-30 08:36:43 +02:00
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package jsoniter
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"github.com/stretchr/testify/require"
|
|
"io/ioutil"
|
|
"testing"
|
|
)
|
|
|
|
func Test_new_decoder(t *testing.T) {
|
|
should := require.New(t)
|
|
decoder1 := json.NewDecoder(bytes.NewBufferString(`[1][2]`))
|
|
decoder2 := NewDecoder(bytes.NewBufferString(`[1][2]`))
|
|
arr1 := []int{}
|
|
should.Nil(decoder1.Decode(&arr1))
|
|
should.Equal([]int{1}, arr1)
|
|
arr2 := []int{}
|
|
should.True(decoder1.More())
|
|
buffered, _ := ioutil.ReadAll(decoder1.Buffered())
|
|
should.Equal("[2]", string(buffered))
|
|
should.Nil(decoder2.Decode(&arr2))
|
|
should.Equal([]int{1}, arr2)
|
|
should.True(decoder2.More())
|
|
buffered, _ = ioutil.ReadAll(decoder2.Buffered())
|
|
should.Equal("[2]", string(buffered))
|
|
|
|
should.Nil(decoder1.Decode(&arr1))
|
|
should.Equal([]int{2}, arr1)
|
|
should.False(decoder1.More())
|
|
should.Nil(decoder2.Decode(&arr2))
|
|
should.Equal([]int{2}, arr2)
|
|
should.False(decoder2.More())
|
|
}
|
|
|
|
func Test_use_number(t *testing.T) {
|
|
should := require.New(t)
|
|
decoder1 := json.NewDecoder(bytes.NewBufferString(`123`))
|
|
decoder1.UseNumber()
|
|
decoder2 := NewDecoder(bytes.NewBufferString(`123`))
|
|
decoder2.UseNumber()
|
|
var obj1 interface{}
|
|
should.Nil(decoder1.Decode(&obj1))
|
|
should.Equal(json.Number("123"), obj1)
|
|
var obj2 interface{}
|
|
should.Nil(decoder2.Decode(&obj2))
|
|
should.Equal(json.Number("123"), obj2)
|
|
}
|
|
|
|
func Test_use_number_for_unmarshal(t *testing.T) {
|
|
should := require.New(t)
|
|
api := Config{UseNumber: true}.Froze()
|
|
var obj interface{}
|
|
should.Nil(api.UnmarshalFromString("123", &obj))
|
|
should.Equal(json.Number("123"), obj)
|
|
}
|
|
|
|
func Test_marshal_indent(t *testing.T) {
|
|
should := require.New(t)
|
|
obj := struct {
|
|
F1 int
|
|
F2 []int
|
|
}{1, []int{2, 3, 4}}
|
|
output, err := json.MarshalIndent(obj, "", " ")
|
|
should.Nil(err)
|
|
should.Equal("{\n \"F1\": 1,\n \"F2\": [\n 2,\n 3,\n 4\n ]\n}", string(output))
|
|
output, err = MarshalIndent(obj, "", " ")
|
|
should.Nil(err)
|
|
should.Equal("{\n \"F1\": 1,\n \"F2\": [\n 2,\n 3,\n 4\n ]\n}", string(output))
|
|
}
|
|
|
|
func Test_marshal_indent_map(t *testing.T) {
|
|
should := require.New(t)
|
|
obj := map[int]int{1: 2}
|
|
output, err := json.MarshalIndent(obj, "", " ")
|
|
should.Nil(err)
|
|
should.Equal("{\n \"1\": 2\n}", string(output))
|
|
output, err = MarshalIndent(obj, "", " ")
|
|
should.Nil(err)
|
|
should.Equal("{\n \"1\": 2\n}", string(output))
|
|
output, err = ConfigCompatibleWithStandardLibrary.MarshalIndent(obj, "", " ")
|
|
should.Nil(err)
|
|
should.Equal("{\n \"1\": 2\n}", string(output))
|
|
}
|