value_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package test
  2. import (
  3. "testing"
  4. "reflect"
  5. "encoding/json"
  6. "github.com/stretchr/testify/require"
  7. "github.com/json-iterator/go"
  8. "fmt"
  9. )
  10. type unmarshalCase struct {
  11. ptr interface{}
  12. input string
  13. }
  14. var unmarshalCases []unmarshalCase
  15. var marshalCases = []interface{}{
  16. nil,
  17. }
  18. type selectedMarshalCase struct {
  19. marshalCase interface{}
  20. }
  21. func Test_unmarshal(t *testing.T) {
  22. should := require.New(t)
  23. for _, testCase := range unmarshalCases {
  24. valType := reflect.TypeOf(testCase.ptr).Elem()
  25. ptr1Val := reflect.New(valType)
  26. err1 := json.Unmarshal([]byte(testCase.input), ptr1Val.Interface())
  27. should.NoError(err1)
  28. ptr2Val := reflect.New(valType)
  29. err2 := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal([]byte(testCase.input), ptr2Val.Interface())
  30. should.NoError(err2)
  31. should.Equal(ptr1Val.Interface(), ptr2Val.Interface())
  32. }
  33. }
  34. func Test_marshal(t *testing.T) {
  35. for _, testCase := range marshalCases {
  36. selectedMarshalCase, found := testCase.(selectedMarshalCase)
  37. if found {
  38. marshalCases = []interface{}{selectedMarshalCase.marshalCase}
  39. break
  40. }
  41. }
  42. for i, testCase := range marshalCases {
  43. var name string
  44. if testCase != nil {
  45. name = fmt.Sprintf("[%v]%v/%s", i, testCase, reflect.TypeOf(testCase).String())
  46. }
  47. t.Run(name, func(t *testing.T) {
  48. should := require.New(t)
  49. output1, err1 := json.Marshal(testCase)
  50. should.NoError(err1)
  51. output2, err2 := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(testCase)
  52. should.NoError(err2)
  53. should.Equal(string(output1), string(output2))
  54. })
  55. }
  56. }