decoder_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package test
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "github.com/json-iterator/go"
  6. "github.com/stretchr/testify/require"
  7. "io/ioutil"
  8. "testing"
  9. )
  10. func Test_disallowUnknownFields(t *testing.T) {
  11. should := require.New(t)
  12. type TestObject struct{}
  13. var obj TestObject
  14. decoder := jsoniter.NewDecoder(bytes.NewBufferString(`{"field1":100}`))
  15. decoder.DisallowUnknownFields()
  16. should.Error(decoder.Decode(&obj))
  17. }
  18. func Test_new_decoder(t *testing.T) {
  19. should := require.New(t)
  20. decoder1 := json.NewDecoder(bytes.NewBufferString(`[1][2]`))
  21. decoder2 := jsoniter.NewDecoder(bytes.NewBufferString(`[1][2]`))
  22. arr1 := []int{}
  23. should.Nil(decoder1.Decode(&arr1))
  24. should.Equal([]int{1}, arr1)
  25. arr2 := []int{}
  26. should.True(decoder1.More())
  27. buffered, _ := ioutil.ReadAll(decoder1.Buffered())
  28. should.Equal("[2]", string(buffered))
  29. should.Nil(decoder2.Decode(&arr2))
  30. should.Equal([]int{1}, arr2)
  31. should.True(decoder2.More())
  32. buffered, _ = ioutil.ReadAll(decoder2.Buffered())
  33. should.Equal("[2]", string(buffered))
  34. should.Nil(decoder1.Decode(&arr1))
  35. should.Equal([]int{2}, arr1)
  36. should.False(decoder1.More())
  37. should.Nil(decoder2.Decode(&arr2))
  38. should.Equal([]int{2}, arr2)
  39. should.False(decoder2.More())
  40. }
  41. func Test_use_number(t *testing.T) {
  42. should := require.New(t)
  43. decoder1 := json.NewDecoder(bytes.NewBufferString(`123`))
  44. decoder1.UseNumber()
  45. decoder2 := jsoniter.NewDecoder(bytes.NewBufferString(`123`))
  46. decoder2.UseNumber()
  47. var obj1 interface{}
  48. should.Nil(decoder1.Decode(&obj1))
  49. should.Equal(json.Number("123"), obj1)
  50. var obj2 interface{}
  51. should.Nil(decoder2.Decode(&obj2))
  52. should.Equal(json.Number("123"), obj2)
  53. }
  54. func Test_decoder_more(t *testing.T) {
  55. should := require.New(t)
  56. decoder := jsoniter.NewDecoder(bytes.NewBufferString("abcde"))
  57. should.True(decoder.More())
  58. }