jsoniter_adapter_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package jsoniter
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "github.com/stretchr/testify/require"
  6. "io/ioutil"
  7. "testing"
  8. )
  9. func Test_new_decoder(t *testing.T) {
  10. should := require.New(t)
  11. decoder1 := json.NewDecoder(bytes.NewBufferString(`[1][2]`))
  12. decoder2 := NewDecoder(bytes.NewBufferString(`[1][2]`))
  13. arr1 := []int{}
  14. should.Nil(decoder1.Decode(&arr1))
  15. should.Equal([]int{1}, arr1)
  16. arr2 := []int{}
  17. should.True(decoder1.More())
  18. buffered, _ := ioutil.ReadAll(decoder1.Buffered())
  19. should.Equal("[2]", string(buffered))
  20. should.Nil(decoder2.Decode(&arr2))
  21. should.Equal([]int{1}, arr2)
  22. should.True(decoder2.More())
  23. buffered, _ = ioutil.ReadAll(decoder2.Buffered())
  24. should.Equal("[2]", string(buffered))
  25. should.Nil(decoder1.Decode(&arr1))
  26. should.Equal([]int{2}, arr1)
  27. should.False(decoder1.More())
  28. should.Nil(decoder2.Decode(&arr2))
  29. should.Equal([]int{2}, arr2)
  30. should.False(decoder2.More())
  31. }
  32. func Test_use_number(t *testing.T) {
  33. should := require.New(t)
  34. decoder1 := json.NewDecoder(bytes.NewBufferString(`123`))
  35. decoder1.UseNumber()
  36. decoder2 := NewDecoder(bytes.NewBufferString(`123`))
  37. decoder2.UseNumber()
  38. var obj1 interface{}
  39. should.Nil(decoder1.Decode(&obj1))
  40. should.Equal(json.Number("123"), obj1)
  41. var obj2 interface{}
  42. should.Nil(decoder2.Decode(&obj2))
  43. should.Equal(json.Number("123"), obj2)
  44. }
  45. func Test_use_number_for_unmarshal(t *testing.T) {
  46. should := require.New(t)
  47. api := Config{UseNumber: true}.Froze()
  48. var obj interface{}
  49. should.Nil(api.UnmarshalFromString("123", &obj))
  50. should.Equal(json.Number("123"), obj)
  51. }
  52. func Test_marshal_indent(t *testing.T) {
  53. should := require.New(t)
  54. obj := struct {
  55. F1 int
  56. F2 []int
  57. }{1, []int{2, 3, 4}}
  58. output, err := json.MarshalIndent(obj, "", " ")
  59. should.Nil(err)
  60. should.Equal("{\n \"F1\": 1,\n \"F2\": [\n 2,\n 3,\n 4\n ]\n}", string(output))
  61. output, err = MarshalIndent(obj, "", " ")
  62. should.Nil(err)
  63. should.Equal("{\n \"F1\": 1,\n \"F2\": [\n 2,\n 3,\n 4\n ]\n}", string(output))
  64. }