go-json/cover_slice_test.go

1860 lines
37 KiB
Go

package json_test
import (
"bytes"
"testing"
"github.com/goccy/go-json"
)
func TestCoverSlice(t *testing.T) {
type structSlice struct {
A []int `json:"a"`
}
type structSliceOmitEmpty struct {
A []int `json:"a,omitempty"`
}
type structSliceString struct {
A []int `json:"a,string"`
}
type structSlicePtr struct {
A *[]int `json:"a"`
}
type structSlicePtrOmitEmpty struct {
A *[]int `json:"a,omitempty"`
}
type structSlicePtrString struct {
A *[]int `json:"a,string"`
}
type structSlicePtrContent struct {
A []*int `json:"a"`
}
type structSliceOmitEmptyPtrContent struct {
A []*int `json:"a,omitempty"`
}
type structSliceStringPtrContent struct {
A []*int `json:"a,string"`
}
type structSlicePtrPtrContent struct {
A *[]*int `json:"a"`
}
type structSlicePtrOmitEmptyPtrContent struct {
A *[]*int `json:"a,omitempty"`
}
type structSlicePtrStringPtrContent struct {
A *[]*int `json:"a,string"`
}
tests := []struct {
name string
data interface{}
}{
// HeadSliceZero
{
name: "HeadSliceZero",
data: struct {
A []int `json:"a"`
}{},
},
{
name: "HeadSliceZeroOmitEmpty",
data: struct {
A []int `json:"a,omitempty"`
}{},
},
{
name: "HeadSliceZeroString",
data: struct {
A []int `json:"a,string"`
}{},
},
// HeadSlice
{
name: "HeadSlice",
data: struct {
A []int `json:"a"`
}{A: []int{-1}},
},
{
name: "HeadSliceOmitEmpty",
data: struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}},
},
{
name: "HeadSliceString",
data: struct {
A []int `json:"a,string"`
}{A: []int{-1}},
},
// HeadSlicePtr
{
name: "HeadSlicePtr",
data: struct {
A *[]int `json:"a"`
}{A: sliceptr([]int{-1})},
},
{
name: "HeadSlicePtrOmitEmpty",
data: struct {
A *[]int `json:"a,omitempty"`
}{A: sliceptr([]int{-1})},
},
{
name: "HeadSlicePtrString",
data: struct {
A *[]int `json:"a,string"`
}{A: sliceptr([]int{-1})},
},
// HeadSlicePtrNil
{
name: "HeadSlicePtrNil",
data: struct {
A *[]int `json:"a"`
}{A: nil},
},
{
name: "HeadSlicePtrNilOmitEmpty",
data: struct {
A *[]int `json:"a,omitempty"`
}{A: nil},
},
{
name: "HeadSlicePtrNilString",
data: struct {
A *[]int `json:"a,string"`
}{A: nil},
},
// PtrHeadSliceZero
{
name: "PtrHeadSliceZero",
data: &struct {
A []int `json:"a"`
}{},
},
{
name: "PtrHeadSliceZeroOmitEmpty",
data: &struct {
A []int `json:"a,omitempty"`
}{},
},
{
name: "PtrHeadSliceZeroString",
data: &struct {
A []int `json:"a,string"`
}{},
},
// PtrHeadSlice
{
name: "PtrHeadSlice",
data: &struct {
A []int `json:"a"`
}{A: []int{-1}},
},
{
name: "PtrHeadSliceOmitEmpty",
data: &struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}},
},
{
name: "PtrHeadSliceString",
data: &struct {
A []int `json:"a,string"`
}{A: []int{-1}},
},
// PtrHeadSlicePtr
{
name: "PtrHeadSlicePtr",
data: &struct {
A *[]int `json:"a"`
}{A: sliceptr([]int{-1})},
},
{
name: "PtrHeadSlicePtrOmitEmpty",
data: &struct {
A *[]int `json:"a,omitempty"`
}{A: sliceptr([]int{-1})},
},
{
name: "PtrHeadSlicePtrString",
data: &struct {
A *[]int `json:"a,string"`
}{A: sliceptr([]int{-1})},
},
// PtrHeadSlicePtrNil
{
name: "PtrHeadSlicePtrNil",
data: &struct {
A *[]int `json:"a"`
}{A: nil},
},
{
name: "PtrHeadSlicePtrNilOmitEmpty",
data: &struct {
A *[]int `json:"a,omitempty"`
}{A: nil},
},
{
name: "PtrHeadSlicePtrNilString",
data: &struct {
A *[]int `json:"a,string"`
}{A: nil},
},
// PtrHeadSliceNil
{
name: "PtrHeadSliceNil",
data: (*struct {
A *[]int `json:"a"`
})(nil),
},
{
name: "PtrHeadSliceNilOmitEmpty",
data: (*struct {
A *[]int `json:"a,omitempty"`
})(nil),
},
{
name: "PtrHeadSliceNilString",
data: (*struct {
A *[]int `json:"a,string"`
})(nil),
},
// HeadSliceZeroMultiFields
{
name: "HeadSliceZeroMultiFields",
data: struct {
A []int `json:"a"`
B []int `json:"b"`
C []int `json:"c"`
}{},
},
{
name: "HeadSliceZeroMultiFieldsOmitEmpty",
data: struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
C []int `json:"c,omitempty"`
}{},
},
{
name: "HeadSliceZeroMultiFields",
data: struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
C []int `json:"c,string"`
}{},
},
// HeadSliceMultiFields
{
name: "HeadSliceMultiFields",
data: struct {
A []int `json:"a"`
B []int `json:"b"`
C []int `json:"c"`
}{A: []int{-1}, B: []int{-2}, C: []int{-3}},
},
{
name: "HeadSliceMultiFieldsOmitEmpty",
data: struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
C []int `json:"c,omitempty"`
}{A: []int{-1}, B: []int{-2}, C: []int{-3}},
},
{
name: "HeadSliceMultiFieldsString",
data: struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
C []int `json:"c,string"`
}{A: []int{-1}, B: []int{-2}, C: []int{-3}},
},
// HeadSlicePtrMultiFields
{
name: "HeadSlicePtrMultiFields",
data: struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
C *[]int `json:"c"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2}), C: sliceptr([]int{-3})},
},
{
name: "HeadSlicePtrMultiFieldsOmitEmpty",
data: struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
C *[]int `json:"c,omitempty"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2}), C: sliceptr([]int{-3})},
},
{
name: "HeadSlicePtrMultiFieldsString",
data: struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
C *[]int `json:"c,string"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2}), C: sliceptr([]int{-3})},
},
// HeadSlicePtrNilMultiFields
{
name: "HeadSlicePtrNilMultiFields",
data: struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
C *[]int `json:"c"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadSlicePtrNilMultiFieldsOmitEmpty",
data: struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
C *[]int `json:"c,omitempty"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadSlicePtrNilMultiFieldsString",
data: struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
C *[]int `json:"c,string"`
}{A: nil, B: nil, C: nil},
},
// PtrHeadSliceZeroMultiFields
{
name: "PtrHeadSliceZeroMultiFields",
data: &struct {
A []int `json:"a"`
B []int `json:"b"`
}{},
},
{
name: "PtrHeadSliceZeroMultiFieldsOmitEmpty",
data: &struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}{},
},
{
name: "PtrHeadSliceZeroMultiFieldsString",
data: &struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}{},
},
// PtrHeadSliceMultiFields
{
name: "PtrHeadSliceMultiFields",
data: &struct {
A []int `json:"a"`
B []int `json:"b"`
}{A: []int{-1}, B: nil},
},
{
name: "PtrHeadSliceMultiFieldsOmitEmpty",
data: &struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}{A: []int{-1}, B: nil},
},
{
name: "PtrHeadSliceMultiFieldsString",
data: &struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}{A: []int{-1}, B: nil},
},
// PtrHeadSlicePtrMultiFields
{
name: "PtrHeadSlicePtrMultiFields",
data: &struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2})},
},
{
name: "PtrHeadSlicePtrMultiFieldsOmitEmpty",
data: &struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2})},
},
{
name: "PtrHeadSlicePtrMultiFieldsString",
data: &struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{-2})},
},
// PtrHeadSlicePtrNilMultiFields
{
name: "PtrHeadSlicePtrNilMultiFields",
data: &struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilMultiFieldsOmitEmpty",
data: &struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilMultiFieldsString",
data: &struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}{A: nil, B: nil},
},
// PtrHeadSliceNilMultiFields
{
name: "PtrHeadSliceNilMultiFields",
data: (*struct {
A []int `json:"a"`
B []int `json:"b"`
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsOmitEmpty",
data: (*struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsString",
data: (*struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
})(nil),
},
// PtrHeadSliceNilMultiFields
{
name: "PtrHeadSliceNilMultiFields",
data: (*struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsOmitEmpty",
data: (*struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsString",
data: (*struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
})(nil),
},
// HeadSliceZeroNotRoot
{
name: "HeadSliceZeroNotRoot",
data: struct {
A struct {
A []int `json:"a"`
}
}{},
},
{
name: "HeadSliceZeroNotRootOmitEmpty",
data: struct {
A struct {
A []int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadSliceZeroNotRootString",
data: struct {
A struct {
A []int `json:"a,string"`
}
}{},
},
// HeadSliceNotRoot
{
name: "HeadSliceNotRoot",
data: struct {
A struct {
A []int `json:"a"`
}
}{A: struct {
A []int `json:"a"`
}{A: []int{-1}}},
},
{
name: "HeadSliceNotRootOmitEmpty",
data: struct {
A struct {
A []int `json:"a,omitempty"`
}
}{A: struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}}},
},
{
name: "HeadSliceNotRootString",
data: struct {
A struct {
A []int `json:"a,string"`
}
}{A: struct {
A []int `json:"a,string"`
}{A: []int{-1}}},
},
// HeadSlicePtrNotRoot
{
name: "HeadSlicePtrNotRoot",
data: struct {
A struct {
A *[]int `json:"a"`
}
}{A: struct {
A *[]int `json:"a"`
}{sliceptr([]int{-1})}},
},
{
name: "HeadSlicePtrNotRootOmitEmpty",
data: struct {
A struct {
A *[]int `json:"a,omitempty"`
}
}{A: struct {
A *[]int `json:"a,omitempty"`
}{sliceptr([]int{-1})}},
},
{
name: "HeadSlicePtrNotRootString",
data: struct {
A struct {
A *[]int `json:"a,string"`
}
}{A: struct {
A *[]int `json:"a,string"`
}{sliceptr([]int{-1})}},
},
// HeadSlicePtrNilNotRoot
{
name: "HeadSlicePtrNilNotRoot",
data: struct {
A struct {
A *[]int `json:"a"`
}
}{},
},
{
name: "HeadSlicePtrNilNotRootOmitEmpty",
data: struct {
A struct {
A *[]int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadSlicePtrNilNotRootString",
data: struct {
A struct {
A *[]int `json:"a,string"`
}
}{},
},
// PtrHeadSliceZeroNotRoot
{
name: "PtrHeadSliceZeroNotRoot",
data: struct {
A *struct {
A []int `json:"a"`
}
}{A: new(struct {
A []int `json:"a"`
})},
},
{
name: "PtrHeadSliceZeroNotRootOmitEmpty",
data: struct {
A *struct {
A []int `json:"a,omitempty"`
}
}{A: new(struct {
A []int `json:"a,omitempty"`
})},
},
{
name: "PtrHeadSliceZeroNotRootString",
data: struct {
A *struct {
A []int `json:"a,string"`
}
}{A: new(struct {
A []int `json:"a,string"`
})},
},
// PtrHeadSliceNotRoot
{
name: "PtrHeadSliceNotRoot",
data: struct {
A *struct {
A []int `json:"a"`
}
}{A: &(struct {
A []int `json:"a"`
}{A: []int{-1}})},
},
{
name: "PtrHeadSliceNotRootOmitEmpty",
data: struct {
A *struct {
A []int `json:"a,omitempty"`
}
}{A: &(struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}})},
},
{
name: "PtrHeadSliceNotRootString",
data: struct {
A *struct {
A []int `json:"a,string"`
}
}{A: &(struct {
A []int `json:"a,string"`
}{A: []int{-1}})},
},
// PtrHeadSlicePtrNotRoot
{
name: "PtrHeadSlicePtrNotRoot",
data: struct {
A *struct {
A *[]int `json:"a"`
}
}{A: &(struct {
A *[]int `json:"a"`
}{A: sliceptr([]int{-1})})},
},
{
name: "PtrHeadSlicePtrNotRootOmitEmpty",
data: struct {
A *struct {
A *[]int `json:"a,omitempty"`
}
}{A: &(struct {
A *[]int `json:"a,omitempty"`
}{A: sliceptr([]int{-1})})},
},
{
name: "PtrHeadSlicePtrNotRootString",
data: struct {
A *struct {
A *[]int `json:"a,string"`
}
}{A: &(struct {
A *[]int `json:"a,string"`
}{A: sliceptr([]int{-1})})},
},
// PtrHeadSlicePtrNilNotRoot
{
name: "PtrHeadSlicePtrNilNotRoot",
data: struct {
A *struct {
A *[]int `json:"a"`
}
}{A: &(struct {
A *[]int `json:"a"`
}{A: nil})},
},
{
name: "PtrHeadSlicePtrNilNotRootOmitEmpty",
data: struct {
A *struct {
A *[]int `json:"a,omitempty"`
}
}{A: &(struct {
A *[]int `json:"a,omitempty"`
}{A: nil})},
},
{
name: "PtrHeadSlicePtrNilNotRootString",
data: struct {
A *struct {
A *[]int `json:"a,string"`
}
}{A: &(struct {
A *[]int `json:"a,string"`
}{A: nil})},
},
// PtrHeadSliceNilNotRoot
{
name: "PtrHeadSliceNilNotRoot",
data: struct {
A *struct {
A *[]int `json:"a"`
}
}{A: nil},
},
{
name: "PtrHeadSliceNilNotRootOmitEmpty",
data: struct {
A *struct {
A *[]int `json:"a,omitempty"`
} `json:",omitempty"`
}{A: nil},
},
{
name: "PtrHeadSliceNilNotRootString",
data: struct {
A *struct {
A *[]int `json:"a,string"`
} `json:",string"`
}{A: nil},
},
// HeadSliceZeroMultiFieldsNotRoot
{
name: "HeadSliceZeroMultiFieldsNotRoot",
data: struct {
A struct {
A []int `json:"a"`
}
B struct {
B []int `json:"b"`
}
}{},
},
{
name: "HeadSliceZeroMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A []int `json:"a,omitempty"`
}
B struct {
B []int `json:"b,omitempty"`
}
}{},
},
{
name: "HeadSliceZeroMultiFieldsNotRootString",
data: struct {
A struct {
A []int `json:"a,string"`
}
B struct {
B []int `json:"b,string"`
}
}{},
},
// HeadSliceMultiFieldsNotRoot
{
name: "HeadSliceMultiFieldsNotRoot",
data: struct {
A struct {
A []int `json:"a"`
}
B struct {
B []int `json:"b"`
}
}{A: struct {
A []int `json:"a"`
}{A: []int{-1}}, B: struct {
B []int `json:"b"`
}{B: []int{0}}},
},
{
name: "HeadSliceMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A []int `json:"a,omitempty"`
}
B struct {
B []int `json:"b,omitempty"`
}
}{A: struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}}, B: struct {
B []int `json:"b,omitempty"`
}{B: []int{1}}},
},
{
name: "HeadSliceMultiFieldsNotRootString",
data: struct {
A struct {
A []int `json:"a,string"`
}
B struct {
B []int `json:"b,string"`
}
}{A: struct {
A []int `json:"a,string"`
}{A: []int{-1}}, B: struct {
B []int `json:"b,string"`
}{B: []int{1}}},
},
// HeadSlicePtrMultiFieldsNotRoot
{
name: "HeadSlicePtrMultiFieldsNotRoot",
data: struct {
A struct {
A *[]int `json:"a"`
}
B struct {
B *[]int `json:"b"`
}
}{A: struct {
A *[]int `json:"a"`
}{A: sliceptr([]int{-1})}, B: struct {
B *[]int `json:"b"`
}{B: sliceptr([]int{1})}},
},
{
name: "HeadSlicePtrMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A *[]int `json:"a,omitempty"`
}
B struct {
B *[]int `json:"b,omitempty"`
}
}{A: struct {
A *[]int `json:"a,omitempty"`
}{A: sliceptr([]int{-1})}, B: struct {
B *[]int `json:"b,omitempty"`
}{B: sliceptr([]int{1})}},
},
{
name: "HeadSlicePtrMultiFieldsNotRootString",
data: struct {
A struct {
A *[]int `json:"a,string"`
}
B struct {
B *[]int `json:"b,string"`
}
}{A: struct {
A *[]int `json:"a,string"`
}{A: sliceptr([]int{-1})}, B: struct {
B *[]int `json:"b,string"`
}{B: sliceptr([]int{1})}},
},
// HeadSlicePtrNilMultiFieldsNotRoot
{
name: "HeadSlicePtrNilMultiFieldsNotRoot",
data: struct {
A struct {
A *[]int `json:"a"`
}
B struct {
B *[]int `json:"b"`
}
}{A: struct {
A *[]int `json:"a"`
}{A: nil}, B: struct {
B *[]int `json:"b"`
}{B: nil}},
},
{
name: "HeadSlicePtrNilMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A *[]int `json:"a,omitempty"`
}
B struct {
B *[]int `json:"b,omitempty"`
}
}{A: struct {
A *[]int `json:"a,omitempty"`
}{A: nil}, B: struct {
B *[]int `json:"b,omitempty"`
}{B: nil}},
},
{
name: "HeadSlicePtrNilMultiFieldsNotRootString",
data: struct {
A struct {
A *[]int `json:"a,string"`
}
B struct {
B *[]int `json:"b,string"`
}
}{A: struct {
A *[]int `json:"a,string"`
}{A: nil}, B: struct {
B *[]int `json:"b,string"`
}{B: nil}},
},
// PtrHeadSliceZeroMultiFieldsNotRoot
{
name: "PtrHeadSliceZeroMultiFieldsNotRoot",
data: &struct {
A struct {
A []int `json:"a"`
}
B struct {
B []int `json:"b"`
}
}{},
},
{
name: "PtrHeadSliceZeroMultiFieldsNotRootOmitEmpty",
data: &struct {
A struct {
A []int `json:"a,omitempty"`
}
B struct {
B []int `json:"b,omitempty"`
}
}{},
},
{
name: "PtrHeadSliceZeroMultiFieldsNotRootString",
data: &struct {
A struct {
A []int `json:"a,string"`
}
B struct {
B []int `json:"b,string"`
}
}{},
},
// PtrHeadSliceMultiFieldsNotRoot
{
name: "PtrHeadSliceMultiFieldsNotRoot",
data: &struct {
A struct {
A []int `json:"a"`
}
B struct {
B []int `json:"b"`
}
}{A: struct {
A []int `json:"a"`
}{A: []int{-1}}, B: struct {
B []int `json:"b"`
}{B: []int{1}}},
},
{
name: "PtrHeadSliceMultiFieldsNotRootOmitEmpty",
data: &struct {
A struct {
A []int `json:"a,omitempty"`
}
B struct {
B []int `json:"b,omitempty"`
}
}{A: struct {
A []int `json:"a,omitempty"`
}{A: []int{-1}}, B: struct {
B []int `json:"b,omitempty"`
}{B: []int{1}}},
},
{
name: "PtrHeadSliceMultiFieldsNotRootString",
data: &struct {
A struct {
A []int `json:"a,string"`
}
B struct {
B []int `json:"b,string"`
}
}{A: struct {
A []int `json:"a,string"`
}{A: []int{-1}}, B: struct {
B []int `json:"b,string"`
}{B: []int{1}}},
},
// PtrHeadSlicePtrMultiFieldsNotRoot
{
name: "PtrHeadSlicePtrMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[]int `json:"a"`
}
B *struct {
B *[]int `json:"b"`
}
}{A: &(struct {
A *[]int `json:"a"`
}{A: sliceptr([]int{-1})}), B: &(struct {
B *[]int `json:"b"`
}{B: sliceptr([]int{1})})},
},
{
name: "PtrHeadSlicePtrMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[]int `json:"a,omitempty"`
}
B *struct {
B *[]int `json:"b,omitempty"`
}
}{A: &(struct {
A *[]int `json:"a,omitempty"`
}{A: sliceptr([]int{-1})}), B: &(struct {
B *[]int `json:"b,omitempty"`
}{B: sliceptr([]int{1})})},
},
{
name: "PtrHeadSlicePtrMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[]int `json:"a,string"`
}
B *struct {
B *[]int `json:"b,string"`
}
}{A: &(struct {
A *[]int `json:"a,string"`
}{A: sliceptr([]int{-1})}), B: &(struct {
B *[]int `json:"b,string"`
}{B: sliceptr([]int{1})})},
},
// PtrHeadSlicePtrNilMultiFieldsNotRoot
{
name: "PtrHeadSlicePtrNilMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[]int `json:"a"`
}
B *struct {
B *[]int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[]int `json:"a,omitempty"`
} `json:",omitempty"`
B *struct {
B *[]int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[]int `json:"a,string"`
} `json:",string"`
B *struct {
B *[]int `json:"b,string"`
} `json:",string"`
}{A: nil, B: nil},
},
// PtrHeadSliceNilMultiFieldsNotRoot
{
name: "PtrHeadSliceNilMultiFieldsNotRoot",
data: (*struct {
A *struct {
A *[]int `json:"a"`
}
B *struct {
B *[]int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A *[]int `json:"a,omitempty"`
}
B *struct {
B *[]int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadSliceNilMultiFieldsNotRootString",
data: (*struct {
A *struct {
A *[]int `json:"a,string"`
}
B *struct {
B *[]int `json:"b,string"`
}
})(nil),
},
// PtrHeadSliceDoubleMultiFieldsNotRoot
{
name: "PtrHeadSliceDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A []int `json:"a"`
B []int `json:"b"`
}
B *struct {
A []int `json:"a"`
B []int `json:"b"`
}
}{A: &(struct {
A []int `json:"a"`
B []int `json:"b"`
}{A: []int{-1}, B: []int{1}}), B: &(struct {
A []int `json:"a"`
B []int `json:"b"`
}{A: []int{-1}, B: nil})},
},
{
name: "PtrHeadSliceDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}
B *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}
}{A: &(struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}{A: []int{-1}, B: []int{1}}), B: &(struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}{A: []int{-1}, B: nil})},
},
{
name: "PtrHeadSliceDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
B *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
}{A: &(struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}{A: []int{-1}, B: []int{1}}), B: &(struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}{A: []int{-1}, B: nil})},
},
// PtrHeadSliceNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A []int `json:"a"`
B []int `json:"b"`
}
B *struct {
A []int `json:"a"`
B []int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
} `json:",omitempty"`
B *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
B *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
}{A: nil, B: nil},
},
// PtrHeadSliceNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRoot",
data: (*struct {
A *struct {
A []int `json:"a"`
B []int `json:"b"`
}
B *struct {
A []int `json:"a"`
B []int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}
B *struct {
A []int `json:"a,omitempty"`
B []int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadSliceNilDoubleMultiFieldsNotRootString",
data: (*struct {
A *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
B *struct {
A []int `json:"a,string"`
B []int `json:"b,string"`
}
})(nil),
},
// PtrHeadSlicePtrDoubleMultiFieldsNotRoot
{
name: "PtrHeadSlicePtrDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
B *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
}{A: &(struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{1})}), B: &(struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}{A: nil, B: nil})},
},
{
name: "PtrHeadSlicePtrDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}
B *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}
}{A: &(struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{1})}), B: &(struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}{A: nil, B: nil})},
},
{
name: "PtrHeadSlicePtrDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
B *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
}{A: &(struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}{A: sliceptr([]int{-1}), B: sliceptr([]int{1})}), B: &(struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}{A: nil, B: nil})},
},
// PtrHeadSlicePtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
B *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
} `json:",omitempty"`
B *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
B *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
}{A: nil, B: nil},
},
// PtrHeadSlicePtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRoot",
data: (*struct {
A *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
B *struct {
A *[]int `json:"a"`
B *[]int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}
B *struct {
A *[]int `json:"a,omitempty"`
B *[]int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadSlicePtrNilDoubleMultiFieldsNotRootString",
data: (*struct {
A *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
B *struct {
A *[]int `json:"a,string"`
B *[]int `json:"b,string"`
}
})(nil),
},
// AnonymousHeadSlice
{
name: "AnonymousHeadSlice",
data: struct {
structSlice
B []int `json:"b"`
}{
structSlice: structSlice{A: []int{-1}},
B: nil,
},
},
{
name: "AnonymousHeadSliceOmitEmpty",
data: struct {
structSliceOmitEmpty
B []int `json:"b,omitempty"`
}{
structSliceOmitEmpty: structSliceOmitEmpty{A: []int{-1}},
B: nil,
},
},
{
name: "AnonymousHeadSliceString",
data: struct {
structSliceString
B []int `json:"b,string"`
}{
structSliceString: structSliceString{A: []int{-1}},
B: nil,
},
},
// PtrAnonymousHeadSlice
{
name: "PtrAnonymousHeadSlice",
data: struct {
*structSlice
B []int `json:"b"`
}{
structSlice: &structSlice{A: []int{-1}},
B: nil,
},
},
{
name: "PtrAnonymousHeadSliceOmitEmpty",
data: struct {
*structSliceOmitEmpty
B []int `json:"b,omitempty"`
}{
structSliceOmitEmpty: &structSliceOmitEmpty{A: []int{-1}},
B: nil,
},
},
{
name: "PtrAnonymousHeadSliceString",
data: struct {
*structSliceString
B []int `json:"b,string"`
}{
structSliceString: &structSliceString{A: []int{-1}},
B: nil,
},
},
// PtrAnonymousHeadSliceNil
{
name: "PtrAnonymousHeadSliceNil",
data: struct {
*structSlice
B []int `json:"b"`
}{
structSlice: &structSlice{A: nil},
B: nil,
},
},
{
name: "PtrAnonymousHeadSliceNilOmitEmpty",
data: struct {
*structSliceOmitEmpty
B []int `json:"b,omitempty"`
}{
structSliceOmitEmpty: &structSliceOmitEmpty{A: nil},
B: nil,
},
},
{
name: "PtrAnonymousHeadSliceNilString",
data: struct {
*structSliceString
B []int `json:"b,string"`
}{
structSliceString: &structSliceString{A: nil},
B: nil,
},
},
// NilPtrAnonymousHeadSlice
{
name: "NilPtrAnonymousHeadSlice",
data: struct {
*structSlice
B []int `json:"b"`
}{
structSlice: nil,
B: []int{-1},
},
},
{
name: "NilPtrAnonymousHeadSliceOmitEmpty",
data: struct {
*structSliceOmitEmpty
B []int `json:"b,omitempty"`
}{
structSliceOmitEmpty: nil,
B: []int{-1},
},
},
{
name: "NilPtrAnonymousHeadSliceString",
data: struct {
*structSliceString
B []int `json:"b,string"`
}{
structSliceString: nil,
B: []int{-1},
},
},
// AnonymousHeadSlicePtr
{
name: "AnonymousHeadSlicePtr",
data: struct {
structSlicePtr
B *[]int `json:"b"`
}{
structSlicePtr: structSlicePtr{A: sliceptr([]int{-1})},
B: nil,
},
},
{
name: "AnonymousHeadSlicePtrOmitEmpty",
data: struct {
structSlicePtrOmitEmpty
B *[]int `json:"b,omitempty"`
}{
structSlicePtrOmitEmpty: structSlicePtrOmitEmpty{A: sliceptr([]int{-1})},
B: nil,
},
},
{
name: "AnonymousHeadSlicePtrString",
data: struct {
structSlicePtrString
B *[]int `json:"b,string"`
}{
structSlicePtrString: structSlicePtrString{A: sliceptr([]int{-1})},
B: nil,
},
},
// AnonymousHeadSlicePtrNil
{
name: "AnonymousHeadSlicePtrNil",
data: struct {
structSlicePtr
B *[]int `json:"b"`
}{
structSlicePtr: structSlicePtr{A: nil},
B: sliceptr([]int{-1}),
},
},
{
name: "AnonymousHeadSlicePtrNilOmitEmpty",
data: struct {
structSlicePtrOmitEmpty
B *[]int `json:"b,omitempty"`
}{
structSlicePtrOmitEmpty: structSlicePtrOmitEmpty{A: nil},
B: sliceptr([]int{-1}),
},
},
{
name: "AnonymousHeadSlicePtrNilString",
data: struct {
structSlicePtrString
B *[]int `json:"b,string"`
}{
structSlicePtrString: structSlicePtrString{A: nil},
B: sliceptr([]int{-1}),
},
},
// PtrAnonymousHeadSlicePtr
{
name: "PtrAnonymousHeadSlicePtr",
data: struct {
*structSlicePtr
B *[]int `json:"b"`
}{
structSlicePtr: &structSlicePtr{A: sliceptr([]int{-1})},
B: nil,
},
},
{
name: "PtrAnonymousHeadSlicePtrOmitEmpty",
data: struct {
*structSlicePtrOmitEmpty
B *[]int `json:"b,omitempty"`
}{
structSlicePtrOmitEmpty: &structSlicePtrOmitEmpty{A: sliceptr([]int{-1})},
B: nil,
},
},
{
name: "PtrAnonymousHeadSlicePtrString",
data: struct {
*structSlicePtrString
B *[]int `json:"b,string"`
}{
structSlicePtrString: &structSlicePtrString{A: sliceptr([]int{-1})},
B: nil,
},
},
// NilPtrAnonymousHeadSlicePtr
{
name: "NilPtrAnonymousHeadSlicePtr",
data: struct {
*structSlicePtr
B *[]int `json:"b"`
}{
structSlicePtr: nil,
B: sliceptr([]int{-1}),
},
},
{
name: "NilPtrAnonymousHeadSlicePtrOmitEmpty",
data: struct {
*structSlicePtrOmitEmpty
B *[]int `json:"b,omitempty"`
}{
structSlicePtrOmitEmpty: nil,
B: sliceptr([]int{-1}),
},
},
{
name: "NilPtrAnonymousHeadSlicePtrString",
data: struct {
*structSlicePtrString
B *[]int `json:"b,string"`
}{
structSlicePtrString: nil,
B: sliceptr([]int{-1}),
},
},
// AnonymousHeadSliceOnly
{
name: "AnonymousHeadSliceOnly",
data: struct {
structSlice
}{
structSlice: structSlice{A: []int{-1}},
},
},
{
name: "AnonymousHeadSliceOnlyOmitEmpty",
data: struct {
structSliceOmitEmpty
}{
structSliceOmitEmpty: structSliceOmitEmpty{A: []int{-1}},
},
},
{
name: "AnonymousHeadSliceOnlyString",
data: struct {
structSliceString
}{
structSliceString: structSliceString{A: []int{-1}},
},
},
// PtrAnonymousHeadSliceOnly
{
name: "PtrAnonymousHeadSliceOnly",
data: struct {
*structSlice
}{
structSlice: &structSlice{A: []int{-1}},
},
},
{
name: "PtrAnonymousHeadSliceOnlyOmitEmpty",
data: struct {
*structSliceOmitEmpty
}{
structSliceOmitEmpty: &structSliceOmitEmpty{A: []int{-1}},
},
},
{
name: "PtrAnonymousHeadSliceOnlyString",
data: struct {
*structSliceString
}{
structSliceString: &structSliceString{A: []int{-1}},
},
},
// NilPtrAnonymousHeadSliceOnly
{
name: "NilPtrAnonymousHeadSliceOnly",
data: struct {
*structSlice
}{
structSlice: nil,
},
},
{
name: "NilPtrAnonymousHeadSliceOnlyOmitEmpty",
data: struct {
*structSliceOmitEmpty
}{
structSliceOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadSliceOnlyString",
data: struct {
*structSliceString
}{
structSliceString: nil,
},
},
// AnonymousHeadSlicePtrOnly
{
name: "AnonymousHeadSlicePtrOnly",
data: struct {
structSlicePtr
}{
structSlicePtr: structSlicePtr{A: sliceptr([]int{-1})},
},
},
{
name: "AnonymousHeadSlicePtrOnlyOmitEmpty",
data: struct {
structSlicePtrOmitEmpty
}{
structSlicePtrOmitEmpty: structSlicePtrOmitEmpty{A: sliceptr([]int{-1})},
},
},
{
name: "AnonymousHeadSlicePtrOnlyString",
data: struct {
structSlicePtrString
}{
structSlicePtrString: structSlicePtrString{A: sliceptr([]int{-1})},
},
},
// AnonymousHeadSlicePtrNilOnly
{
name: "AnonymousHeadSlicePtrNilOnly",
data: struct {
structSlicePtr
}{
structSlicePtr: structSlicePtr{A: nil},
},
},
{
name: "AnonymousHeadSlicePtrNilOnlyOmitEmpty",
data: struct {
structSlicePtrOmitEmpty
}{
structSlicePtrOmitEmpty: structSlicePtrOmitEmpty{A: nil},
},
},
{
name: "AnonymousHeadSlicePtrNilOnlyString",
data: struct {
structSlicePtrString
}{
structSlicePtrString: structSlicePtrString{A: nil},
},
},
// PtrAnonymousHeadSlicePtrOnly
{
name: "PtrAnonymousHeadSlicePtrOnly",
data: struct {
*structSlicePtr
}{
structSlicePtr: &structSlicePtr{A: sliceptr([]int{-1})},
},
},
{
name: "PtrAnonymousHeadSlicePtrOnlyOmitEmpty",
data: struct {
*structSlicePtrOmitEmpty
}{
structSlicePtrOmitEmpty: &structSlicePtrOmitEmpty{A: sliceptr([]int{-1})},
},
},
{
name: "PtrAnonymousHeadSlicePtrOnlyString",
data: struct {
*structSlicePtrString
}{
structSlicePtrString: &structSlicePtrString{A: sliceptr([]int{-1})},
},
},
// NilPtrAnonymousHeadSlicePtrOnly
{
name: "NilPtrAnonymousHeadSlicePtrOnly",
data: struct {
*structSlicePtr
}{
structSlicePtr: nil,
},
},
{
name: "NilPtrAnonymousHeadSlicePtrOnlyOmitEmpty",
data: struct {
*structSlicePtrOmitEmpty
}{
structSlicePtrOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadSlicePtrOnlyString",
data: struct {
*structSlicePtrString
}{
structSlicePtrString: nil,
},
},
}
for _, test := range tests {
for _, indent := range []bool{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())
}
}
}
}
}