jsoniter_reflect_struct_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package jsoniter
  2. import (
  3. "testing"
  4. "github.com/json-iterator/go/require"
  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": "b"}`, &obj))
  27. should.Equal("a", obj.field1)
  28. should.Equal("b", 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": "b", "field3": "c"}`, &obj))
  41. should.Equal("a", obj.field1)
  42. should.Equal("b", 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": "b", "field3": "c", "field4": "d"}`, &obj))
  57. should.Equal("a", obj.field1)
  58. should.Equal("b", 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": "b", "field3": "c", "field4": "d", "field5": "e"}`, &obj))
  75. should.Equal("a", obj.field1)
  76. should.Equal("b", 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_ten_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. field7 string
  91. field8 string
  92. field9 string
  93. field10 string
  94. }
  95. obj := TestObject{}
  96. should.Nil(UnmarshalFromString(`{}`, &obj))
  97. should.Equal("", obj.field1)
  98. should.Nil(UnmarshalFromString(`{"field1": "a", "field2": "b", "field3": "c", "field4": "d", "field5": "e"}`, &obj))
  99. should.Equal("a", obj.field1)
  100. should.Equal("b", obj.field2)
  101. should.Equal("c", obj.field3)
  102. should.Equal("d", obj.field4)
  103. should.Equal("e", obj.field5)
  104. }
  105. func Test_decode_struct_field_with_tag(t *testing.T) {
  106. should := require.New(t)
  107. type TestObject struct {
  108. Field1 string `json:"field-1"`
  109. Field2 string `json:"-"`
  110. Field3 int `json:",string"`
  111. }
  112. obj := TestObject{Field2: "world"}
  113. UnmarshalFromString(`{"field-1": "hello", "field2": "", "Field3": "100"}`, &obj)
  114. should.Equal("hello", obj.Field1)
  115. should.Equal("world", obj.Field2)
  116. should.Equal(100, obj.Field3)
  117. }
  118. func Test_write_val_zero_field_struct(t *testing.T) {
  119. should := require.New(t)
  120. type TestObject struct {
  121. }
  122. obj := TestObject{}
  123. str, err := MarshalToString(obj)
  124. should.Nil(err)
  125. should.Equal(`{}`, str)
  126. }
  127. func Test_write_val_one_field_struct(t *testing.T) {
  128. should := require.New(t)
  129. type TestObject struct {
  130. Field1 string `json:"field-1"`
  131. }
  132. obj := TestObject{"hello"}
  133. str, err := MarshalToString(obj)
  134. should.Nil(err)
  135. should.Equal(`{"field-1":"hello"}`, str)
  136. }