jsoniter_struct_decoder_test.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package jsoniter
  2. import (
  3. "github.com/stretchr/testify/require"
  4. "testing"
  5. )
  6. func Test_decode_one_field_struct(t *testing.T) {
  7. should := require.New(t)
  8. type TestObject struct {
  9. Field1 string
  10. }
  11. obj := TestObject{}
  12. should.Nil(UnmarshalFromString(`{}`, &obj))
  13. should.Equal("", obj.Field1)
  14. should.Nil(UnmarshalFromString(`{"field1": "hello"}`, &obj))
  15. should.Equal("hello", obj.Field1)
  16. }
  17. func Test_decode_two_fields_struct(t *testing.T) {
  18. should := require.New(t)
  19. type TestObject struct {
  20. Field1 string
  21. Field2 string
  22. }
  23. obj := TestObject{}
  24. should.Nil(UnmarshalFromString(`{}`, &obj))
  25. should.Equal("", obj.Field1)
  26. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream"}`, &obj))
  27. should.Equal("a", obj.Field1)
  28. should.Equal("stream", obj.Field2)
  29. }
  30. func Test_decode_three_fields_struct(t *testing.T) {
  31. should := require.New(t)
  32. type TestObject struct {
  33. Field1 string
  34. Field2 string
  35. Field3 string
  36. }
  37. obj := TestObject{}
  38. should.Nil(UnmarshalFromString(`{}`, &obj))
  39. should.Equal("", obj.Field1)
  40. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream", "Field3": "c"}`, &obj))
  41. should.Equal("a", obj.Field1)
  42. should.Equal("stream", obj.Field2)
  43. should.Equal("c", obj.Field3)
  44. }
  45. func Test_decode_four_fields_struct(t *testing.T) {
  46. should := require.New(t)
  47. type TestObject struct {
  48. Field1 string
  49. Field2 string
  50. Field3 string
  51. Field4 string
  52. }
  53. obj := TestObject{}
  54. should.Nil(UnmarshalFromString(`{}`, &obj))
  55. should.Equal("", obj.Field1)
  56. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d"}`, &obj))
  57. should.Equal("a", obj.Field1)
  58. should.Equal("stream", obj.Field2)
  59. should.Equal("c", obj.Field3)
  60. should.Equal("d", obj.Field4)
  61. }
  62. func Test_decode_five_fields_struct(t *testing.T) {
  63. should := require.New(t)
  64. type TestObject struct {
  65. Field1 string
  66. Field2 string
  67. Field3 string
  68. Field4 string
  69. Field5 string
  70. }
  71. obj := TestObject{}
  72. should.Nil(UnmarshalFromString(`{}`, &obj))
  73. should.Equal("", obj.Field1)
  74. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e"}`, &obj))
  75. should.Equal("a", obj.Field1)
  76. should.Equal("stream", obj.Field2)
  77. should.Equal("c", obj.Field3)
  78. should.Equal("d", obj.Field4)
  79. should.Equal("e", obj.Field5)
  80. }
  81. func Test_decode_six_fields_struct(t *testing.T) {
  82. should := require.New(t)
  83. type TestObject struct {
  84. Field1 string
  85. Field2 string
  86. Field3 string
  87. Field4 string
  88. Field5 string
  89. Field6 string
  90. }
  91. obj := TestObject{}
  92. should.Nil(UnmarshalFromString(`{}`, &obj))
  93. should.Equal("", obj.Field1)
  94. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e", "Field6": "x"}`, &obj))
  95. should.Equal("a", obj.Field1)
  96. should.Equal("stream", obj.Field2)
  97. should.Equal("c", obj.Field3)
  98. should.Equal("d", obj.Field4)
  99. should.Equal("e", obj.Field5)
  100. should.Equal("x", obj.Field6)
  101. }
  102. func Test_decode_seven_fields_struct(t *testing.T) {
  103. should := require.New(t)
  104. type TestObject struct {
  105. Field1 string
  106. Field2 string
  107. Field3 string
  108. Field4 string
  109. Field5 string
  110. Field6 string
  111. Field7 string
  112. }
  113. obj := TestObject{}
  114. should.Nil(UnmarshalFromString(`{}`, &obj))
  115. should.Equal("", obj.Field1)
  116. should.Nil(UnmarshalFromString(`{"Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e", "Field6": "x", "Field7":"y"}`, &obj))
  117. should.Equal("a", obj.Field1)
  118. should.Equal("stream", obj.Field2)
  119. should.Equal("c", obj.Field3)
  120. should.Equal("d", obj.Field4)
  121. should.Equal("e", obj.Field5)
  122. should.Equal("x", obj.Field6)
  123. should.Equal("y", obj.Field7)
  124. }
  125. func Test_decode_eight_fields_struct(t *testing.T) {
  126. should := require.New(t)
  127. type TestObject struct {
  128. Field1 string
  129. Field2 string
  130. Field3 string
  131. Field4 string
  132. Field5 string
  133. Field6 string
  134. Field7 string
  135. Field8 string
  136. }
  137. obj := TestObject{}
  138. should.Nil(UnmarshalFromString(`{}`, &obj))
  139. should.Equal("", obj.Field1)
  140. should.Nil(UnmarshalFromString(`{"Field8":"1", "Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e", "Field6": "x", "Field7":"y"}`, &obj))
  141. should.Equal("a", obj.Field1)
  142. should.Equal("stream", obj.Field2)
  143. should.Equal("c", obj.Field3)
  144. should.Equal("d", obj.Field4)
  145. should.Equal("e", obj.Field5)
  146. should.Equal("x", obj.Field6)
  147. should.Equal("y", obj.Field7)
  148. should.Equal("1", obj.Field8)
  149. }
  150. func Test_decode_nine_fields_struct(t *testing.T) {
  151. should := require.New(t)
  152. type TestObject struct {
  153. Field1 string
  154. Field2 string
  155. Field3 string
  156. Field4 string
  157. Field5 string
  158. Field6 string
  159. Field7 string
  160. Field8 string
  161. Field9 string
  162. }
  163. obj := TestObject{}
  164. should.Nil(UnmarshalFromString(`{}`, &obj))
  165. should.Equal("", obj.Field1)
  166. should.Nil(UnmarshalFromString(`{"Field8" : "zzzzzzzzzzz", "Field7": "zz", "Field6" : "xx", "Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e", "Field9":"f"}`, &obj))
  167. should.Equal("a", obj.Field1)
  168. should.Equal("stream", obj.Field2)
  169. should.Equal("c", obj.Field3)
  170. should.Equal("d", obj.Field4)
  171. should.Equal("e", obj.Field5)
  172. should.Equal("xx", obj.Field6)
  173. should.Equal("zz", obj.Field7)
  174. should.Equal("zzzzzzzzzzz", obj.Field8)
  175. should.Equal("f", obj.Field9)
  176. }
  177. func Test_decode_ten_fields_struct(t *testing.T) {
  178. should := require.New(t)
  179. type TestObject struct {
  180. Field1 string
  181. Field2 string
  182. Field3 string
  183. Field4 string
  184. Field5 string
  185. Field6 string
  186. Field7 string
  187. Field8 string
  188. Field9 string
  189. Field10 string
  190. }
  191. obj := TestObject{}
  192. should.Nil(UnmarshalFromString(`{}`, &obj))
  193. should.Equal("", obj.Field1)
  194. should.Nil(UnmarshalFromString(`{"Field10":"x", "Field9": "x", "Field8":"x", "Field7":"x", "Field6":"x", "Field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e"}`, &obj))
  195. should.Equal("a", obj.Field1)
  196. should.Equal("stream", obj.Field2)
  197. should.Equal("c", obj.Field3)
  198. should.Equal("d", obj.Field4)
  199. should.Equal("e", obj.Field5)
  200. should.Equal("x", obj.Field6)
  201. should.Equal("x", obj.Field7)
  202. should.Equal("x", obj.Field8)
  203. should.Equal("x", obj.Field9)
  204. should.Equal("x", obj.Field10)
  205. }
  206. func Test_decode_more_than_ten_fields_struct(t *testing.T) {
  207. should := require.New(t)
  208. type TestObject struct {
  209. Field1 string
  210. Field2 string
  211. Field3 string
  212. Field4 string
  213. Field5 string
  214. Field6 string
  215. Field7 string
  216. Field8 string
  217. Field9 string
  218. Field10 string
  219. Field11 int
  220. }
  221. obj := TestObject{}
  222. should.Nil(UnmarshalFromString(`{}`, &obj))
  223. should.Equal("", obj.Field1)
  224. should.Nil(UnmarshalFromString(`{"field11":1, "field1": "a", "Field2": "stream", "Field3": "c", "Field4": "d", "Field5": "e"}`, &obj))
  225. should.Equal("a", obj.Field1)
  226. should.Equal("stream", obj.Field2)
  227. should.Equal("c", obj.Field3)
  228. should.Equal("d", obj.Field4)
  229. should.Equal("e", obj.Field5)
  230. should.Equal(1, obj.Field11)
  231. }
  232. func Test_decode_struct_field_with_tag(t *testing.T) {
  233. should := require.New(t)
  234. type TestObject struct {
  235. Field1 string `json:"field-1"`
  236. Field2 string `json:"-"`
  237. Field3 int `json:",string"`
  238. }
  239. obj := TestObject{Field2: "world"}
  240. UnmarshalFromString(`{"field-1": "hello", "field2": "", "Field3": "100"}`, &obj)
  241. should.Equal("hello", obj.Field1)
  242. should.Equal("world", obj.Field2)
  243. should.Equal(100, obj.Field3)
  244. }
  245. func Test_decode_struct_field_with_tag_string(t *testing.T) {
  246. should := require.New(t)
  247. type TestObject struct {
  248. Field1 int `json:",string"`
  249. }
  250. obj := TestObject{Field1: 100}
  251. should.Nil(UnmarshalFromString(`{"Field1": "100"}`, &obj))
  252. should.Equal(100, obj.Field1)
  253. }