jsoniter_reflect_struct_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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_struct_field_with_tag(t *testing.T) {
  82. should := require.New(t)
  83. type TestObject struct {
  84. Field1 string `json:"field-1"`
  85. Field2 string `json:"-"`
  86. Field3 int `json:",string"`
  87. }
  88. obj := TestObject{Field2: "world"}
  89. UnmarshalFromString(`{"field-1": "hello", "field2": "", "Field3": "100"}`, &obj)
  90. should.Equal("hello", obj.Field1)
  91. should.Equal("world", obj.Field2)
  92. should.Equal(100, obj.Field3)
  93. }
  94. func Test_write_val_zero_field_struct(t *testing.T) {
  95. should := require.New(t)
  96. type TestObject struct {
  97. }
  98. obj := TestObject{}
  99. str, err := MarshalToString(obj)
  100. should.Nil(err)
  101. should.Equal(`{}`, str)
  102. }
  103. func Test_write_val_one_field_struct(t *testing.T) {
  104. should := require.New(t)
  105. type TestObject struct {
  106. Field1 string `json:"field-1"`
  107. }
  108. obj := TestObject{"hello"}
  109. str, err := MarshalToString(obj)
  110. should.Nil(err)
  111. should.Equal(`{"field-1":"hello"}`, str)
  112. }