1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package test
- import (
- "encoding/json"
- "fmt"
- "github.com/json-iterator/go"
- "github.com/modern-go/reflect2"
- "github.com/stretchr/testify/require"
- "testing"
- )
- type unmarshalCase struct {
- obj func() interface{}
- ptr interface{}
- input string
- selected bool
- }
- var unmarshalCases []unmarshalCase
- var marshalCases = []interface{}{
- nil,
- }
- type selectedMarshalCase struct {
- marshalCase interface{}
- }
- func Test_unmarshal(t *testing.T) {
- for _, testCase := range unmarshalCases {
- if testCase.selected {
- unmarshalCases = []unmarshalCase{testCase}
- break
- }
- }
- for i, testCase := range unmarshalCases {
- t.Run(fmt.Sprintf("[%v]%s", i, testCase.input), func(t *testing.T) {
- should := require.New(t)
- var obj1 interface{}
- var obj2 interface{}
- if testCase.obj != nil {
- obj1 = testCase.obj()
- obj2 = testCase.obj()
- } else {
- valType := reflect2.TypeOfPtr(testCase.ptr).Elem()
- obj1 = valType.New()
- obj2 = valType.New()
- }
- err1 := json.Unmarshal([]byte(testCase.input), obj1)
- should.NoError(err1, "json")
- err2 := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal([]byte(testCase.input), obj2)
- should.NoError(err2, "jsoniter")
- should.Equal(obj1, obj2)
- })
- }
- }
- func Test_marshal(t *testing.T) {
- for _, testCase := range marshalCases {
- selectedMarshalCase, found := testCase.(selectedMarshalCase)
- if found {
- marshalCases = []interface{}{selectedMarshalCase.marshalCase}
- break
- }
- }
- for i, testCase := range marshalCases {
- var name string
- if testCase != nil {
- name = fmt.Sprintf("[%v]%v/%s", i, testCase, reflect2.TypeOf(testCase).String())
- }
- t.Run(name, func(t *testing.T) {
- should := require.New(t)
- output1, err1 := json.Marshal(testCase)
- should.NoError(err1, "json")
- output2, err2 := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(testCase)
- should.NoError(err2, "jsoniter")
- should.Equal(string(output1), string(output2))
- })
- }
- }
|