Skip to content

Commit be7260a

Browse files
committed
add tests
1 parent 7609d8b commit be7260a

File tree

2 files changed

+165
-4
lines changed

2 files changed

+165
-4
lines changed

decode_object_test.go

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,25 @@ func (o *ObjectNull) NKeys() int {
948948
return 2
949949
}
950950

951+
type ObjectNullZeroNKeys struct {
952+
SubObject *ObjectNullZeroNKeys
953+
SubArray *testSliceBools
954+
}
955+
956+
func (o *ObjectNullZeroNKeys) UnmarshalJSONObject(dec *Decoder, k string) error {
957+
switch k {
958+
case "subobject":
959+
return dec.AddObjectNull(&o.SubObject)
960+
case "subarray":
961+
return dec.AddArrayNull(&o.SubArray)
962+
}
963+
return nil
964+
}
965+
966+
func (o *ObjectNullZeroNKeys) NKeys() int {
967+
return 0
968+
}
969+
951970
func TestDecodeObjectNull(t *testing.T) {
952971
t.Run("sub obj should not be nil", func(t *testing.T) {
953972
var o = &ObjectNull{}
@@ -985,6 +1004,40 @@ func TestDecodeObjectNull(t *testing.T) {
9851004
assert.Nil(t, o.SubObject)
9861005
},
9871006
)
1007+
t.Run(
1008+
"skip data",
1009+
func(t *testing.T) {
1010+
var o = &ObjectNull{}
1011+
var err = UnmarshalJSONObject([]byte(`{
1012+
"subobject": {
1013+
"subobject": {},
1014+
"subarray": [],
1015+
"subarray": [],
1016+
"skipped": ""
1017+
}
1018+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1019+
return dec.ObjectNull(&o.SubObject)
1020+
}))
1021+
assert.Nil(t, err)
1022+
assert.NotNil(t, o.SubObject)
1023+
assert.Nil(t, o.SubArray)
1024+
},
1025+
)
1026+
t.Run(
1027+
"skip data not child",
1028+
func(t *testing.T) {
1029+
var o = &ObjectNull{}
1030+
var dec = NewDecoder(strings.NewReader(`{
1031+
"subobject": {},
1032+
"subarray": [],
1033+
"subarray": [],
1034+
"skipped": ""
1035+
}`))
1036+
var _, err = dec.decodeObjectNull(&o)
1037+
assert.Nil(t, err)
1038+
assert.NotNil(t, o.SubObject)
1039+
},
1040+
)
9881041
t.Run(
9891042
"should return an error as type is not ptr",
9901043
func(t *testing.T) {
@@ -1060,6 +1113,17 @@ func TestDecodeObjectNull(t *testing.T) {
10601113
assert.IsType(t, InvalidUnmarshalError(""), err)
10611114
},
10621115
)
1116+
t.Run(
1117+
"invalid JSON for object",
1118+
func(t *testing.T) {
1119+
var o = &ObjectNull{}
1120+
var err = UnmarshalJSONObject([]byte(`{"subobject":{"subobject":{"a":a}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1121+
return dec.ObjectNull(&o.SubObject)
1122+
}))
1123+
assert.NotNil(t, err)
1124+
assert.IsType(t, InvalidJSONError(""), err)
1125+
},
1126+
)
10631127
t.Run(
10641128
"invalid JSON for object",
10651129
func(t *testing.T) {
@@ -1071,6 +1135,17 @@ func TestDecodeObjectNull(t *testing.T) {
10711135
assert.IsType(t, InvalidJSONError(""), err)
10721136
},
10731137
)
1138+
t.Run(
1139+
"invalid JSON for object",
1140+
func(t *testing.T) {
1141+
var o = &ObjectNull{}
1142+
var err = UnmarshalJSONObject([]byte(`{"subobject":{"subobject":{"sub}}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1143+
return dec.ObjectNull(&o.SubObject)
1144+
}))
1145+
assert.NotNil(t, err)
1146+
assert.IsType(t, InvalidJSONError(""), err)
1147+
},
1148+
)
10741149
t.Run(
10751150
"invalid JSON for object",
10761151
func(t *testing.T) {
@@ -1122,6 +1197,92 @@ func TestDecodeObjectNull(t *testing.T) {
11221197
assert.IsType(t, InvalidJSONError(""), err)
11231198
},
11241199
)
1200+
t.Run(
1201+
"zero nkeys, no error, two keys",
1202+
func(t *testing.T) {
1203+
var o = &ObjectNullZeroNKeys{}
1204+
var err = UnmarshalJSONObject([]byte(`{
1205+
"subobject": {
1206+
"subobject": {
1207+
"subobject":{}
1208+
},
1209+
"subarray": []
1210+
}
1211+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1212+
return dec.ObjectNull(&o.SubObject)
1213+
}))
1214+
assert.Nil(t, err)
1215+
},
1216+
)
1217+
t.Run(
1218+
"zero nkeys, no error, two keys, skip data",
1219+
func(t *testing.T) {
1220+
var o = &ObjectNullZeroNKeys{}
1221+
var err = UnmarshalJSONObject([]byte(`{
1222+
"subobject": {
1223+
"subobject": {
1224+
"subobject":{}
1225+
},
1226+
"subarray": [],
1227+
"skipped": 1
1228+
}
1229+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1230+
return dec.ObjectNull(&o.SubObject)
1231+
}))
1232+
assert.Nil(t, err)
1233+
},
1234+
)
1235+
t.Run(
1236+
"zero nkeys, error skip data",
1237+
func(t *testing.T) {
1238+
var o = &ObjectNullZeroNKeys{}
1239+
var err = UnmarshalJSONObject([]byte(`{
1240+
"subobject": {
1241+
"subobject": {
1242+
"subobject":{}
1243+
},
1244+
"subarray": [],
1245+
"skippedInvalid": "q
1246+
}
1247+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1248+
return dec.ObjectNull(&o.SubObject)
1249+
}))
1250+
assert.NotNil(t, err)
1251+
assert.IsType(t, InvalidJSONError(""), err)
1252+
},
1253+
)
1254+
t.Run(
1255+
"zero nkeys, error invalid json in keys",
1256+
func(t *testing.T) {
1257+
var o = &ObjectNullZeroNKeys{}
1258+
var err = UnmarshalJSONObject([]byte(`{
1259+
"subobject": {
1260+
"subobj
1261+
}
1262+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1263+
return dec.ObjectNull(&o.SubObject)
1264+
}))
1265+
assert.NotNil(t, err)
1266+
assert.IsType(t, InvalidJSONError(""), err)
1267+
},
1268+
)
1269+
t.Run(
1270+
"zero nkeys, error invalid json, sub object",
1271+
func(t *testing.T) {
1272+
var o = &ObjectNullZeroNKeys{}
1273+
var err = UnmarshalJSONObject([]byte(`{
1274+
"subobject": {
1275+
"subobject": {
1276+
"subobj
1277+
}
1278+
}
1279+
}`), DecodeObjectFunc(func(dec *Decoder, k string) error {
1280+
return dec.ObjectNull(&o.SubObject)
1281+
}))
1282+
assert.NotNil(t, err)
1283+
assert.IsType(t, InvalidJSONError(""), err)
1284+
},
1285+
)
11251286
}
11261287

11271288
func TestDecodeObjectComplex(t *testing.T) {

decode_sqlnull_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,13 @@ type SQLDecodeObject struct {
211211
func (s *SQLDecodeObject) UnmarshalJSONObject(dec *Decoder, k string) error {
212212
switch k {
213213
case "s":
214-
return dec.SQLNullString(&s.S)
214+
return dec.AddSQLNullString(&s.S)
215215
case "f":
216-
return dec.SQLNullFloat64(&s.F)
216+
return dec.AddSQLNullFloat64(&s.F)
217217
case "i":
218-
return dec.SQLNullInt64(&s.I)
218+
return dec.AddSQLNullInt64(&s.I)
219219
case "b":
220-
return dec.SQLNullBool(&s.B)
220+
return dec.AddSQLNullBool(&s.B)
221221
}
222222
return nil
223223
}

0 commit comments

Comments
 (0)