jsoniter_null_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package jsoniter
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "github.com/stretchr/testify/require"
  6. "testing"
  7. "io"
  8. )
  9. func Test_read_null(t *testing.T) {
  10. should := require.New(t)
  11. iter := ParseString(ConfigDefault, `null`)
  12. should.True(iter.ReadNil())
  13. iter = ParseString(ConfigDefault, `null`)
  14. should.Nil(iter.Read())
  15. iter = ParseString(ConfigDefault, `navy`)
  16. iter.Read()
  17. should.True(iter.Error != nil && iter.Error != io.EOF)
  18. iter = ParseString(ConfigDefault, `navy`)
  19. iter.ReadNil()
  20. should.True(iter.Error != nil && iter.Error != io.EOF)
  21. }
  22. func Test_write_null(t *testing.T) {
  23. should := require.New(t)
  24. buf := &bytes.Buffer{}
  25. stream := NewStream(ConfigDefault, buf, 4096)
  26. stream.WriteNil()
  27. stream.Flush()
  28. should.Nil(stream.Error)
  29. should.Equal("null", buf.String())
  30. }
  31. func Test_encode_null(t *testing.T) {
  32. should := require.New(t)
  33. str, err := MarshalToString(nil)
  34. should.Nil(err)
  35. should.Equal("null", str)
  36. }
  37. func Test_decode_null_object_field(t *testing.T) {
  38. should := require.New(t)
  39. iter := ParseString(ConfigDefault, `[null,"a"]`)
  40. iter.ReadArray()
  41. if iter.ReadObject() != "" {
  42. t.FailNow()
  43. }
  44. iter.ReadArray()
  45. if iter.ReadString() != "a" {
  46. t.FailNow()
  47. }
  48. type TestObject struct {
  49. Field string
  50. }
  51. objs := []TestObject{}
  52. should.Nil(UnmarshalFromString("[null]", &objs))
  53. should.Len(objs, 1)
  54. }
  55. func Test_decode_null_array_element(t *testing.T) {
  56. should := require.New(t)
  57. iter := ParseString(ConfigDefault, `[null,"a"]`)
  58. should.True(iter.ReadArray())
  59. should.True(iter.ReadNil())
  60. should.True(iter.ReadArray())
  61. should.Equal("a", iter.ReadString())
  62. }
  63. func Test_decode_null_array(t *testing.T) {
  64. should := require.New(t)
  65. arr := []string{}
  66. should.Nil(UnmarshalFromString("null", &arr))
  67. should.Nil(arr)
  68. }
  69. func Test_decode_null_map(t *testing.T) {
  70. should := require.New(t)
  71. arr := map[string]string{}
  72. should.Nil(UnmarshalFromString("null", &arr))
  73. should.Nil(arr)
  74. }
  75. func Test_decode_null_string(t *testing.T) {
  76. should := require.New(t)
  77. iter := ParseString(ConfigDefault, `[null,"a"]`)
  78. should.True(iter.ReadArray())
  79. should.Equal("", iter.ReadString())
  80. should.True(iter.ReadArray())
  81. should.Equal("a", iter.ReadString())
  82. }
  83. func Test_decode_null_skip(t *testing.T) {
  84. iter := ParseString(ConfigDefault, `[null,"a"]`)
  85. iter.ReadArray()
  86. iter.Skip()
  87. iter.ReadArray()
  88. if iter.ReadString() != "a" {
  89. t.FailNow()
  90. }
  91. }
  92. func Test_encode_nil_map(t *testing.T) {
  93. should := require.New(t)
  94. type Ttest map[string]string
  95. var obj1 Ttest
  96. output, err := json.Marshal(obj1)
  97. should.Nil(err)
  98. should.Equal("null", string(output))
  99. output, err = json.Marshal(&obj1)
  100. should.Nil(err)
  101. should.Equal("null", string(output))
  102. output, err = Marshal(obj1)
  103. should.Nil(err)
  104. should.Equal("null", string(output))
  105. output, err = Marshal(&obj1)
  106. should.Nil(err)
  107. should.Equal("null", string(output))
  108. }
  109. func Test_encode_nil_array(t *testing.T) {
  110. should := require.New(t)
  111. type Ttest []string
  112. var obj1 Ttest
  113. output, err := json.Marshal(obj1)
  114. should.Nil(err)
  115. should.Equal("null", string(output))
  116. output, err = json.Marshal(&obj1)
  117. should.Nil(err)
  118. should.Equal("null", string(output))
  119. output, err = Marshal(obj1)
  120. should.Nil(err)
  121. should.Equal("null", string(output))
  122. output, err = Marshal(&obj1)
  123. should.Nil(err)
  124. should.Equal("null", string(output))
  125. }