@@ -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,79 @@ 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
+ }
0 commit comments