forked from mirror/go-json
1901 lines
42 KiB
Go
1901 lines
42 KiB
Go
package json_test
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/goccy/go-json"
|
|
)
|
|
|
|
type recursiveMap struct {
|
|
A int
|
|
B map[string]*recursiveMap
|
|
}
|
|
|
|
func TestCoverMap(t *testing.T) {
|
|
type structMap struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
type structMapOmitEmpty struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
type structMapString struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
type structMapPtr struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
type structMapPtrOmitEmpty struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
type structMapPtrString struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
|
|
type structMapPtrContent struct {
|
|
A map[string]*int `json:"a"`
|
|
}
|
|
type structMapOmitEmptyPtrContent struct {
|
|
A map[string]*int `json:"a,omitempty"`
|
|
}
|
|
type structMapStringPtrContent struct {
|
|
A map[string]*int `json:"a,string"`
|
|
}
|
|
type structMapPtrPtrContent struct {
|
|
A *map[string]*int `json:"a"`
|
|
}
|
|
type structMapPtrOmitEmptyPtrContent struct {
|
|
A *map[string]*int `json:"a,omitempty"`
|
|
}
|
|
type structMapPtrStringPtrContent struct {
|
|
A *map[string]*int `json:"a,string"`
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
data interface{}
|
|
}{
|
|
{
|
|
name: "NestedMap",
|
|
data: map[string]map[string]int{"a": {"b": 1}},
|
|
},
|
|
{
|
|
name: "RecursiveMap",
|
|
data: map[string]*recursiveMap{
|
|
"keyA": {
|
|
A: 1,
|
|
B: map[string]*recursiveMap{
|
|
"keyB": {
|
|
A: 2,
|
|
B: map[string]*recursiveMap{
|
|
"keyC": {
|
|
A: 3,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"keyD": {
|
|
A: 4,
|
|
B: map[string]*recursiveMap{
|
|
"keyE": {
|
|
A: 5,
|
|
B: map[string]*recursiveMap{
|
|
"keyF": {
|
|
A: 6,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
|
|
// HeadMapZero
|
|
{
|
|
name: "HeadMapZero",
|
|
data: struct {
|
|
A map[string]int `json:"a"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroOmitEmpty",
|
|
data: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroString",
|
|
data: struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{},
|
|
},
|
|
|
|
// HeadMap
|
|
{
|
|
name: "HeadMap",
|
|
data: struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
{
|
|
name: "HeadMapOmitEmpty",
|
|
data: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
{
|
|
name: "HeadMapString",
|
|
data: struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
|
|
// HeadMapPtr
|
|
{
|
|
name: "HeadMapPtr",
|
|
data: struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
{
|
|
name: "HeadMapPtrOmitEmpty",
|
|
data: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
{
|
|
name: "HeadMapPtrString",
|
|
data: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
|
|
// HeadMapPtrNil
|
|
{
|
|
name: "HeadMapPtrNil",
|
|
data: struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilOmitEmpty",
|
|
data: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilString",
|
|
data: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: nil},
|
|
},
|
|
|
|
// PtrHeadMapZero
|
|
{
|
|
name: "PtrHeadMapZero",
|
|
data: &struct {
|
|
A map[string]int `json:"a"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroOmitEmpty",
|
|
data: &struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroString",
|
|
data: &struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{},
|
|
},
|
|
|
|
// PtrHeadMap
|
|
{
|
|
name: "PtrHeadMap",
|
|
data: &struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
{
|
|
name: "PtrHeadMapOmitEmpty",
|
|
data: &struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
{
|
|
name: "PtrHeadMapString",
|
|
data: &struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}},
|
|
},
|
|
|
|
// PtrHeadMapPtr
|
|
{
|
|
name: "PtrHeadMapPtr",
|
|
data: &struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrOmitEmpty",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrString",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNil
|
|
{
|
|
name: "PtrHeadMapPtrNil",
|
|
data: &struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilOmitEmpty",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilString",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: nil},
|
|
},
|
|
|
|
// PtrHeadMapNil
|
|
{
|
|
name: "PtrHeadMapNil",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilOmitEmpty",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilString",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a,string"`
|
|
})(nil),
|
|
},
|
|
|
|
// HeadMapZeroMultiFields
|
|
{
|
|
name: "HeadMapZeroMultiFields",
|
|
data: struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
C map[string]int `json:"c"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroMultiFieldsOmitEmpty",
|
|
data: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
C map[string]int `json:"c,omitempty"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroMultiFields",
|
|
data: struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
C map[string]int `json:"c,string"`
|
|
}{},
|
|
},
|
|
|
|
// HeadMapMultiFields
|
|
{
|
|
name: "HeadMapMultiFields",
|
|
data: struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
C map[string]int `json:"c"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
|
|
},
|
|
{
|
|
name: "HeadMapMultiFieldsOmitEmpty",
|
|
data: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
C map[string]int `json:"c,omitempty"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
|
|
},
|
|
{
|
|
name: "HeadMapMultiFieldsString",
|
|
data: struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
C map[string]int `json:"c,string"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 2}, C: map[string]int{"m": -3}},
|
|
},
|
|
|
|
// HeadMapPtrMultiFields
|
|
{
|
|
name: "HeadMapPtrMultiFields",
|
|
data: struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
C *map[string]int `json:"c"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
|
|
},
|
|
{
|
|
name: "HeadMapPtrMultiFieldsOmitEmpty",
|
|
data: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
C *map[string]int `json:"c,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
|
|
},
|
|
{
|
|
name: "HeadMapPtrMultiFieldsString",
|
|
data: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
C *map[string]int `json:"c,string"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2}), C: mapptr(map[string]int{"m": -3})},
|
|
},
|
|
|
|
// HeadMapPtrNilMultiFields
|
|
{
|
|
name: "HeadMapPtrNilMultiFields",
|
|
data: struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
C *map[string]int `json:"c"`
|
|
}{A: nil, B: nil, C: nil},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilMultiFieldsOmitEmpty",
|
|
data: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
C *map[string]int `json:"c,omitempty"`
|
|
}{A: nil, B: nil, C: nil},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilMultiFieldsString",
|
|
data: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
C *map[string]int `json:"c,string"`
|
|
}{A: nil, B: nil, C: nil},
|
|
},
|
|
|
|
// PtrHeadMapZeroMultiFields
|
|
{
|
|
name: "PtrHeadMapZeroMultiFields",
|
|
data: &struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroMultiFieldsOmitEmpty",
|
|
data: &struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroMultiFieldsString",
|
|
data: &struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}{},
|
|
},
|
|
|
|
// PtrHeadMapMultiFields
|
|
{
|
|
name: "PtrHeadMapMultiFields",
|
|
data: &struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}{A: map[string]int{"m": -1}, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapMultiFieldsOmitEmpty",
|
|
data: &struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{A: map[string]int{"m": -1}, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapMultiFieldsString",
|
|
data: &struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}{A: map[string]int{"m": -1}, B: nil},
|
|
},
|
|
|
|
// PtrHeadMapPtrMultiFields
|
|
{
|
|
name: "PtrHeadMapPtrMultiFields",
|
|
data: &struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrMultiFieldsOmitEmpty",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrMultiFieldsString",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 2})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNilMultiFields
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFields",
|
|
data: &struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFieldsOmitEmpty",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFieldsString",
|
|
data: &struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
|
|
// PtrHeadMapNilMultiFields
|
|
{
|
|
name: "PtrHeadMapNilMultiFields",
|
|
data: (*struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsOmitEmpty",
|
|
data: (*struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsString",
|
|
data: (*struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
})(nil),
|
|
},
|
|
|
|
// PtrHeadMapNilMultiFields
|
|
{
|
|
name: "PtrHeadMapNilMultiFields",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsOmitEmpty",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsString",
|
|
data: (*struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
})(nil),
|
|
},
|
|
|
|
// HeadMapZeroNotRoot
|
|
{
|
|
name: "HeadMapZeroNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
}{},
|
|
},
|
|
|
|
// HeadMapNotRoot
|
|
{
|
|
name: "HeadMapNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}}},
|
|
},
|
|
{
|
|
name: "HeadMapNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}}},
|
|
},
|
|
{
|
|
name: "HeadMapNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}}},
|
|
},
|
|
|
|
// HeadMapPtrNotRoot
|
|
{
|
|
name: "HeadMapPtrNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a"`
|
|
}{mapptr(map[string]int{"m": -1})}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{mapptr(map[string]int{"m": -1})}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{mapptr(map[string]int{"m": -1})}},
|
|
},
|
|
|
|
// HeadMapPtrNilNotRoot
|
|
{
|
|
name: "HeadMapPtrNilNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
}{},
|
|
},
|
|
|
|
// PtrHeadMapZeroNotRoot
|
|
{
|
|
name: "PtrHeadMapZeroNotRoot",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
}{A: new(struct {
|
|
A map[string]int `json:"a"`
|
|
})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroNotRootOmitEmpty",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: new(struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroNotRootString",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
}{A: new(struct {
|
|
A map[string]int `json:"a,string"`
|
|
})},
|
|
},
|
|
|
|
// PtrHeadMapNotRoot
|
|
{
|
|
name: "PtrHeadMapNotRoot",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNotRootOmitEmpty",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNotRootString",
|
|
data: struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrNotRoot",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: mapptr(map[string]int{"m": -1})})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNotRootOmitEmpty",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1})})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNotRootString",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: mapptr(map[string]int{"m": -1})})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNilNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrNilNotRoot",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilNotRootOmitEmpty",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilNotRootString",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: nil})},
|
|
},
|
|
|
|
// PtrHeadMapNilNotRoot
|
|
{
|
|
name: "PtrHeadMapNilNotRoot",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilNotRootOmitEmpty",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
} `json:",omitempty"`
|
|
}{A: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilNotRootString",
|
|
data: struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
} `json:",string"`
|
|
}{A: nil},
|
|
},
|
|
|
|
// HeadMapZeroMultiFieldsNotRoot
|
|
{
|
|
name: "HeadMapZeroMultiFieldsNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroMultiFieldsNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "HeadMapZeroMultiFieldsNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{},
|
|
},
|
|
|
|
// HeadMapMultiFieldsNotRoot
|
|
{
|
|
name: "HeadMapMultiFieldsNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b"`
|
|
}{B: map[string]int{"m": 0}}},
|
|
},
|
|
{
|
|
name: "HeadMapMultiFieldsNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{B: map[string]int{"m": 1}}},
|
|
},
|
|
{
|
|
name: "HeadMapMultiFieldsNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b,string"`
|
|
}{B: map[string]int{"m": 1}}},
|
|
},
|
|
|
|
// HeadMapPtrMultiFieldsNotRoot
|
|
{
|
|
name: "HeadMapPtrMultiFieldsNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: mapptr(map[string]int{"m": -1})}, B: struct {
|
|
B *map[string]int `json:"b"`
|
|
}{B: mapptr(map[string]int{"m": 1})}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrMultiFieldsNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1})}, B: struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{B: mapptr(map[string]int{"m": 1})}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrMultiFieldsNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: mapptr(map[string]int{"m": -1})}, B: struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}{B: mapptr(map[string]int{"m": 1})}},
|
|
},
|
|
|
|
// HeadMapPtrNilMultiFieldsNotRoot
|
|
{
|
|
name: "HeadMapPtrNilMultiFieldsNotRoot",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: nil}, B: struct {
|
|
B *map[string]int `json:"b"`
|
|
}{B: nil}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilMultiFieldsNotRootOmitEmpty",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: nil}, B: struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{B: nil}},
|
|
},
|
|
{
|
|
name: "HeadMapPtrNilMultiFieldsNotRootString",
|
|
data: struct {
|
|
A struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
}{A: struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: nil}, B: struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}{B: nil}},
|
|
},
|
|
|
|
// PtrHeadMapZeroMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapZeroMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{},
|
|
},
|
|
{
|
|
name: "PtrHeadMapZeroMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{},
|
|
},
|
|
|
|
// PtrHeadMapMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b"`
|
|
}{B: map[string]int{"m": 1}}},
|
|
},
|
|
{
|
|
name: "PtrHeadMapMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{B: map[string]int{"m": 1}}},
|
|
},
|
|
{
|
|
name: "PtrHeadMapMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A struct {
|
|
A map[string]int `json:"a,string"`
|
|
}
|
|
B struct {
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{A: struct {
|
|
A map[string]int `json:"a,string"`
|
|
}{A: map[string]int{"m": -1}}, B: struct {
|
|
B map[string]int `json:"b,string"`
|
|
}{B: map[string]int{"m": 1}}},
|
|
},
|
|
|
|
// PtrHeadMapPtrMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a"`
|
|
}{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
|
|
B *map[string]int `json:"b"`
|
|
}{B: mapptr(map[string]int{"m": 1})})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{B: mapptr(map[string]int{"m": 1})})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}{A: mapptr(map[string]int{"m": -1})}), B: &(struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}{B: mapptr(map[string]int{"m": 1})})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNilMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
} `json:",omitempty"`
|
|
B *struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
} `json:",omitempty"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
} `json:",string"`
|
|
B *struct {
|
|
B *map[string]int `json:"b,string"`
|
|
} `json:",string"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
|
|
// PtrHeadMapNilMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsNotRoot",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsNotRootOmitEmpty",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilMultiFieldsNotRootString",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
}
|
|
B *struct {
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
})(nil),
|
|
},
|
|
|
|
// PtrHeadMapDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapDoubleMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}{A: map[string]int{"m": -1}, B: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{A: map[string]int{"m": -1}, B: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapDoubleMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}{A: map[string]int{"m": -1}, B: map[string]int{"m": 1}}), B: &(struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}{A: map[string]int{"m": -1}, B: nil})},
|
|
},
|
|
|
|
// PtrHeadMapNilDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
} `json:",omitempty"`
|
|
B *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
} `json:",omitempty"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
}{A: nil, B: nil},
|
|
},
|
|
|
|
// PtrHeadMapNilDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRoot",
|
|
data: (*struct {
|
|
A *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a"`
|
|
B map[string]int `json:"b"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: (*struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a,omitempty"`
|
|
B map[string]int `json:"b,omitempty"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapNilDoubleMultiFieldsNotRootString",
|
|
data: (*struct {
|
|
A *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A map[string]int `json:"a,string"`
|
|
B map[string]int `json:"b,string"`
|
|
}
|
|
})(nil),
|
|
},
|
|
|
|
// PtrHeadMapPtrDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrDoubleMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}{A: nil, B: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{A: nil, B: nil})},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrDoubleMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
}{A: &(struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}{A: mapptr(map[string]int{"m": -1}), B: mapptr(map[string]int{"m": 1})}), B: &(struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}{A: nil, B: nil})},
|
|
},
|
|
|
|
// PtrHeadMapPtrNilDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRoot",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
} `json:",omitempty"`
|
|
B *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
} `json:",omitempty"`
|
|
}{A: nil, B: nil},
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootString",
|
|
data: &struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
}{A: nil, B: nil},
|
|
},
|
|
|
|
// PtrHeadMapPtrNilDoubleMultiFieldsNotRoot
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRoot",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a"`
|
|
B *map[string]int `json:"b"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootOmitEmpty",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a,omitempty"`
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}
|
|
})(nil),
|
|
},
|
|
{
|
|
name: "PtrHeadMapPtrNilDoubleMultiFieldsNotRootString",
|
|
data: (*struct {
|
|
A *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
B *struct {
|
|
A *map[string]int `json:"a,string"`
|
|
B *map[string]int `json:"b,string"`
|
|
}
|
|
})(nil),
|
|
},
|
|
|
|
// AnonymousHeadMap
|
|
{
|
|
name: "AnonymousHeadMap",
|
|
data: struct {
|
|
structMap
|
|
B map[string]int `json:"b"`
|
|
}{
|
|
structMap: structMap{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapOmitEmpty",
|
|
data: struct {
|
|
structMapOmitEmpty
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapOmitEmpty: structMapOmitEmpty{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapString",
|
|
data: struct {
|
|
structMapString
|
|
B map[string]int `json:"b,string"`
|
|
}{
|
|
structMapString: structMapString{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
|
|
// PtrAnonymousHeadMap
|
|
{
|
|
name: "PtrAnonymousHeadMap",
|
|
data: struct {
|
|
*structMap
|
|
B map[string]int `json:"b"`
|
|
}{
|
|
structMap: &structMap{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapOmitEmpty",
|
|
data: struct {
|
|
*structMapOmitEmpty
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapOmitEmpty: &structMapOmitEmpty{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapString",
|
|
data: struct {
|
|
*structMapString
|
|
B map[string]int `json:"b,string"`
|
|
}{
|
|
structMapString: &structMapString{A: map[string]int{"m": -1}},
|
|
B: nil,
|
|
},
|
|
},
|
|
|
|
// PtrAnonymousHeadMapNil
|
|
{
|
|
name: "PtrAnonymousHeadMapNil",
|
|
data: struct {
|
|
*structMap
|
|
B map[string]int `json:"b"`
|
|
}{
|
|
structMap: &structMap{A: nil},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapNilOmitEmpty",
|
|
data: struct {
|
|
*structMapOmitEmpty
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapOmitEmpty: &structMapOmitEmpty{A: nil},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapNilString",
|
|
data: struct {
|
|
*structMapString
|
|
B map[string]int `json:"b,string"`
|
|
}{
|
|
structMapString: &structMapString{A: nil},
|
|
B: nil,
|
|
},
|
|
},
|
|
|
|
// NilPtrAnonymousHeadMap
|
|
{
|
|
name: "NilPtrAnonymousHeadMap",
|
|
data: struct {
|
|
*structMap
|
|
B map[string]int `json:"b"`
|
|
}{
|
|
structMap: nil,
|
|
B: map[string]int{"m": -1},
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapOmitEmpty",
|
|
data: struct {
|
|
*structMapOmitEmpty
|
|
B map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapOmitEmpty: nil,
|
|
B: map[string]int{"m": -1},
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapString",
|
|
data: struct {
|
|
*structMapString
|
|
B map[string]int `json:"b,string"`
|
|
}{
|
|
structMapString: nil,
|
|
B: map[string]int{"m": -1},
|
|
},
|
|
},
|
|
|
|
// AnonymousHeadMapPtr
|
|
{
|
|
name: "AnonymousHeadMapPtr",
|
|
data: struct {
|
|
structMapPtr
|
|
B *map[string]int `json:"b"`
|
|
}{
|
|
structMapPtr: structMapPtr{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrOmitEmpty",
|
|
data: struct {
|
|
structMapPtrOmitEmpty
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrString",
|
|
data: struct {
|
|
structMapPtrString
|
|
B *map[string]int `json:"b,string"`
|
|
}{
|
|
structMapPtrString: structMapPtrString{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
|
|
// AnonymousHeadMapPtrNil
|
|
{
|
|
name: "AnonymousHeadMapPtrNil",
|
|
data: struct {
|
|
structMapPtr
|
|
B *map[string]int `json:"b"`
|
|
}{
|
|
structMapPtr: structMapPtr{A: nil},
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrNilOmitEmpty",
|
|
data: struct {
|
|
structMapPtrOmitEmpty
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: nil},
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrNilString",
|
|
data: struct {
|
|
structMapPtrString
|
|
B *map[string]int `json:"b,string"`
|
|
}{
|
|
structMapPtrString: structMapPtrString{A: nil},
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
|
|
// PtrAnonymousHeadMapPtr
|
|
{
|
|
name: "PtrAnonymousHeadMapPtr",
|
|
data: struct {
|
|
*structMapPtr
|
|
B *map[string]int `json:"b"`
|
|
}{
|
|
structMapPtr: &structMapPtr{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapPtrOmitEmpty",
|
|
data: struct {
|
|
*structMapPtrOmitEmpty
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapPtrOmitEmpty: &structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapPtrString",
|
|
data: struct {
|
|
*structMapPtrString
|
|
B *map[string]int `json:"b,string"`
|
|
}{
|
|
structMapPtrString: &structMapPtrString{A: mapptr(map[string]int{"m": -1})},
|
|
B: nil,
|
|
},
|
|
},
|
|
|
|
// NilPtrAnonymousHeadMapPtr
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtr",
|
|
data: struct {
|
|
*structMapPtr
|
|
B *map[string]int `json:"b"`
|
|
}{
|
|
structMapPtr: nil,
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtrOmitEmpty",
|
|
data: struct {
|
|
*structMapPtrOmitEmpty
|
|
B *map[string]int `json:"b,omitempty"`
|
|
}{
|
|
structMapPtrOmitEmpty: nil,
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtrString",
|
|
data: struct {
|
|
*structMapPtrString
|
|
B *map[string]int `json:"b,string"`
|
|
}{
|
|
structMapPtrString: nil,
|
|
B: mapptr(map[string]int{"m": -1}),
|
|
},
|
|
},
|
|
|
|
// AnonymousHeadMapOnly
|
|
{
|
|
name: "AnonymousHeadMapOnly",
|
|
data: struct {
|
|
structMap
|
|
}{
|
|
structMap: structMap{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapOnlyOmitEmpty",
|
|
data: struct {
|
|
structMapOmitEmpty
|
|
}{
|
|
structMapOmitEmpty: structMapOmitEmpty{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapOnlyString",
|
|
data: struct {
|
|
structMapString
|
|
}{
|
|
structMapString: structMapString{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
|
|
// PtrAnonymousHeadMapOnly
|
|
{
|
|
name: "PtrAnonymousHeadMapOnly",
|
|
data: struct {
|
|
*structMap
|
|
}{
|
|
structMap: &structMap{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapOnlyOmitEmpty",
|
|
data: struct {
|
|
*structMapOmitEmpty
|
|
}{
|
|
structMapOmitEmpty: &structMapOmitEmpty{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapOnlyString",
|
|
data: struct {
|
|
*structMapString
|
|
}{
|
|
structMapString: &structMapString{A: map[string]int{"m": -1}},
|
|
},
|
|
},
|
|
|
|
// NilPtrAnonymousHeadMapOnly
|
|
{
|
|
name: "NilPtrAnonymousHeadMapOnly",
|
|
data: struct {
|
|
*structMap
|
|
}{
|
|
structMap: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapOnlyOmitEmpty",
|
|
data: struct {
|
|
*structMapOmitEmpty
|
|
}{
|
|
structMapOmitEmpty: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapOnlyString",
|
|
data: struct {
|
|
*structMapString
|
|
}{
|
|
structMapString: nil,
|
|
},
|
|
},
|
|
|
|
// AnonymousHeadMapPtrOnly
|
|
{
|
|
name: "AnonymousHeadMapPtrOnly",
|
|
data: struct {
|
|
structMapPtr
|
|
}{
|
|
structMapPtr: structMapPtr{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrOnlyOmitEmpty",
|
|
data: struct {
|
|
structMapPtrOmitEmpty
|
|
}{
|
|
structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrOnlyString",
|
|
data: struct {
|
|
structMapPtrString
|
|
}{
|
|
structMapPtrString: structMapPtrString{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
|
|
// AnonymousHeadMapPtrNilOnly
|
|
{
|
|
name: "AnonymousHeadMapPtrNilOnly",
|
|
data: struct {
|
|
structMapPtr
|
|
}{
|
|
structMapPtr: structMapPtr{A: nil},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrNilOnlyOmitEmpty",
|
|
data: struct {
|
|
structMapPtrOmitEmpty
|
|
}{
|
|
structMapPtrOmitEmpty: structMapPtrOmitEmpty{A: nil},
|
|
},
|
|
},
|
|
{
|
|
name: "AnonymousHeadMapPtrNilOnlyString",
|
|
data: struct {
|
|
structMapPtrString
|
|
}{
|
|
structMapPtrString: structMapPtrString{A: nil},
|
|
},
|
|
},
|
|
|
|
// PtrAnonymousHeadMapPtrOnly
|
|
{
|
|
name: "PtrAnonymousHeadMapPtrOnly",
|
|
data: struct {
|
|
*structMapPtr
|
|
}{
|
|
structMapPtr: &structMapPtr{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapPtrOnlyOmitEmpty",
|
|
data: struct {
|
|
*structMapPtrOmitEmpty
|
|
}{
|
|
structMapPtrOmitEmpty: &structMapPtrOmitEmpty{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
{
|
|
name: "PtrAnonymousHeadMapPtrOnlyString",
|
|
data: struct {
|
|
*structMapPtrString
|
|
}{
|
|
structMapPtrString: &structMapPtrString{A: mapptr(map[string]int{"m": -1})},
|
|
},
|
|
},
|
|
|
|
// NilPtrAnonymousHeadMapPtrOnly
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtrOnly",
|
|
data: struct {
|
|
*structMapPtr
|
|
}{
|
|
structMapPtr: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtrOnlyOmitEmpty",
|
|
data: struct {
|
|
*structMapPtrOmitEmpty
|
|
}{
|
|
structMapPtrOmitEmpty: nil,
|
|
},
|
|
},
|
|
{
|
|
name: "NilPtrAnonymousHeadMapPtrOnlyString",
|
|
data: struct {
|
|
*structMapPtrString
|
|
}{
|
|
structMapPtrString: nil,
|
|
},
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
for _, indent := range []bool{true, false} {
|
|
for _, htmlEscape := range []bool{true, false} {
|
|
var buf bytes.Buffer
|
|
enc := json.NewEncoder(&buf)
|
|
enc.SetEscapeHTML(htmlEscape)
|
|
if indent {
|
|
enc.SetIndent("", " ")
|
|
}
|
|
if err := enc.Encode(test.data); err != nil {
|
|
t.Fatalf("%s(htmlEscape:%v,indent:%v): %+v: %s", test.name, htmlEscape, indent, test.data, err)
|
|
}
|
|
stdresult := encodeByEncodingJSON(test.data, indent, htmlEscape)
|
|
if buf.String() != stdresult {
|
|
t.Errorf("%s(htmlEscape:%v,indent:%v): doesn't compatible with encoding/json. expected %q but got %q", test.name, htmlEscape, indent, stdresult, buf.String())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|