@@ -2,9 +2,10 @@ package test
2
2
3
3
import (
4
4
"encoding/json"
5
+ "testing"
6
+
5
7
"github.com/json-iterator/go"
6
8
"github.com/stretchr/testify/require"
7
- "testing"
8
9
)
9
10
10
11
func Test_use_number_for_unmarshal (t * testing.T ) {
@@ -45,3 +46,129 @@ func Test_read_large_number_as_interface(t *testing.T) {
45
46
should .Nil (err )
46
47
should .Equal (`123456789123456789123456789` , output )
47
48
}
49
+
50
+ type caseSensitiveStruct struct {
51
+ A string `json:"a"`
52
+ B string `json:"b,omitempty"`
53
+ C * C `json:"C,omitempty"`
54
+ }
55
+
56
+ type C struct {
57
+ D int64 `json:"D,omitempty"`
58
+ E * E `json:"e,omitempty"`
59
+ }
60
+
61
+ type E struct {
62
+ F string `json:"F,omitempty"`
63
+ }
64
+
65
+ func Test_CaseSensitive (t * testing.T ) {
66
+ should := require .New (t )
67
+
68
+ testCases := []struct {
69
+ input string
70
+ expectedOutput string
71
+ caseSensitive bool
72
+ }{
73
+ {
74
+ input : `{"A":"foo","B":"bar"}` ,
75
+ expectedOutput : `{"a":"foo","b":"bar"}` ,
76
+ caseSensitive : false ,
77
+ },
78
+ {
79
+ input : `{"a":"foo","b":"bar"}` ,
80
+ expectedOutput : `{"a":"foo","b":"bar"}` ,
81
+ caseSensitive : true ,
82
+ },
83
+ {
84
+ input : `{"a":"foo","b":"bar","C":{"D":10}}` ,
85
+ expectedOutput : `{"a":"foo","b":"bar","C":{"D":10}}` ,
86
+ caseSensitive : true ,
87
+ },
88
+ {
89
+ input : `{"a":"foo","B":"bar","c":{"d":10}}` ,
90
+ expectedOutput : `{"a":"foo"}` ,
91
+ caseSensitive : true ,
92
+ },
93
+ {
94
+ input : `{"a":"foo","C":{"d":10}}` ,
95
+ expectedOutput : `{"a":"foo","C":{}}` ,
96
+ caseSensitive : true ,
97
+ },
98
+ {
99
+ input : `{"a":"foo","C":{"D":10,"e":{"f":"baz"}}}` ,
100
+ expectedOutput : `{"a":"foo","C":{"D":10,"e":{}}}` ,
101
+ caseSensitive : true ,
102
+ },
103
+ {
104
+ input : `{"a":"foo","C":{"D":10,"e":{"F":"baz"}}}` ,
105
+ expectedOutput : `{"a":"foo","C":{"D":10,"e":{"F":"baz"}}}` ,
106
+ caseSensitive : true ,
107
+ },
108
+ {
109
+ input : `{"A":"foo","c":{"d":10,"E":{"f":"baz"}}}` ,
110
+ expectedOutput : `{"a":"foo","C":{"D":10,"e":{"F":"baz"}}}` ,
111
+ caseSensitive : false ,
112
+ },
113
+ }
114
+
115
+ for _ , tc := range testCases {
116
+ val := caseSensitiveStruct {}
117
+ err := jsoniter.Config {CaseSensitive : tc .caseSensitive }.Froze ().UnmarshalFromString (tc .input , & val )
118
+ should .Nil (err )
119
+
120
+ output , err := jsoniter .MarshalToString (val )
121
+ should .Nil (err )
122
+ should .Equal (tc .expectedOutput , output )
123
+ }
124
+ }
125
+
126
+ type structWithElevenFields struct {
127
+ A string `json:"A,omitempty"`
128
+ B string `json:"B,omitempty"`
129
+ C string `json:"C,omitempty"`
130
+ D string `json:"d,omitempty"`
131
+ E string `json:"e,omitempty"`
132
+ F string `json:"f,omitempty"`
133
+ G string `json:"g,omitempty"`
134
+ H string `json:"h,omitempty"`
135
+ I string `json:"i,omitempty"`
136
+ J string `json:"j,omitempty"`
137
+ K string `json:"k,omitempty"`
138
+ }
139
+
140
+ func Test_CaseSensitive_MoreThanTenFields (t * testing.T ) {
141
+ should := require .New (t )
142
+
143
+ testCases := []struct {
144
+ input string
145
+ expectedOutput string
146
+ caseSensitive bool
147
+ }{
148
+ {
149
+ input : `{"A":"1","B":"2","C":"3","d":"4","e":"5","f":"6","g":"7","h":"8","i":"9","j":"10","k":"11"}` ,
150
+ expectedOutput : `{"A":"1","B":"2","C":"3","d":"4","e":"5","f":"6","g":"7","h":"8","i":"9","j":"10","k":"11"}` ,
151
+ caseSensitive : true ,
152
+ },
153
+ {
154
+ input : `{"a":"1","b":"2","c":"3","D":"4","E":"5","F":"6"}` ,
155
+ expectedOutput : `{"A":"1","B":"2","C":"3","d":"4","e":"5","f":"6"}` ,
156
+ caseSensitive : false ,
157
+ },
158
+ {
159
+ input : `{"A":"1","b":"2","d":"4","E":"5"}` ,
160
+ expectedOutput : `{"A":"1","d":"4"}` ,
161
+ caseSensitive : true ,
162
+ },
163
+ }
164
+
165
+ for _ , tc := range testCases {
166
+ val := structWithElevenFields {}
167
+ err := jsoniter.Config {CaseSensitive : tc .caseSensitive }.Froze ().UnmarshalFromString (tc .input , & val )
168
+ should .Nil (err )
169
+
170
+ output , err := jsoniter .MarshalToString (val )
171
+ should .Nil (err )
172
+ should .Equal (tc .expectedOutput , output )
173
+ }
174
+ }
0 commit comments