go-json/cover_marshal_json_test.go

2139 lines
49 KiB
Go
Raw Normal View History

package json_test
import (
"bytes"
"fmt"
"testing"
"github.com/goccy/go-json"
)
type coverMarshalJSON struct {
A int
}
func (c coverMarshalJSON) MarshalJSON() ([]byte, error) {
return []byte(`"hello"`), nil
}
type coverPtrMarshalJSON struct {
B int
}
func (c *coverPtrMarshalJSON) MarshalJSON() ([]byte, error) {
return []byte(`"hello"`), nil
}
func TestCoverMarshalJSON(t *testing.T) {
type structMarshalJSON struct {
A coverMarshalJSON `json:"a"`
}
type structMarshalJSONOmitEmpty struct {
A coverMarshalJSON `json:"a,omitempty"`
}
type structMarshalJSONString struct {
A coverMarshalJSON `json:"a,string"`
}
type structPtrMarshalJSON struct {
A coverPtrMarshalJSON `json:"a"`
}
type structPtrMarshalJSONOmitEmpty struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
}
type structPtrMarshalJSONString struct {
A coverPtrMarshalJSON `json:"a,string"`
}
type structMarshalJSONPtr struct {
A *coverMarshalJSON `json:"a"`
}
type structMarshalJSONPtrOmitEmpty struct {
A *coverMarshalJSON `json:"a,omitempty"`
}
type structMarshalJSONPtrString struct {
A *coverMarshalJSON `json:"a,string"`
}
type structPtrMarshalJSONPtr struct {
A *coverPtrMarshalJSON `json:"a"`
}
type structPtrMarshalJSONPtrOmitEmpty struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
}
type structPtrMarshalJSONPtrString struct {
A *coverPtrMarshalJSON `json:"a,string"`
}
tests := []struct {
name string
data interface{}
}{
// HeadMarshalJSONZero
{
name: "HeadMarshalJSONZero",
data: struct {
A coverMarshalJSON `json:"a"`
}{},
},
{
name: "HeadMarshalJSONZeroOmitEmpty",
data: struct {
A coverMarshalJSON `json:"a,omitempty"`
}{},
},
{
name: "HeadMarshalJSONZeroString",
data: struct {
A coverMarshalJSON `json:"a,string"`
}{},
},
{
name: "HeadPtrMarshalJSONZero",
data: struct {
A coverPtrMarshalJSON `json:"a"`
}{},
},
{
name: "HeadPtrMarshalJSONZeroOmitEmpty",
data: struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
}{},
},
{
name: "HeadPtrMarshalJSONZeroString",
data: struct {
A coverPtrMarshalJSON `json:"a,string"`
}{},
},
// HeadMarshalJSON
{
name: "HeadMarshalJSON",
data: struct {
A coverMarshalJSON `json:"a"`
}{A: coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONOmitEmpty",
data: struct {
A coverMarshalJSON `json:"a,omitempty"`
}{A: coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONString",
data: struct {
A coverMarshalJSON `json:"a,string"`
}{A: coverMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSON",
data: struct {
A coverPtrMarshalJSON `json:"a"`
}{A: coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONOmitEmpty",
data: struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
}{A: coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONString",
data: struct {
A coverPtrMarshalJSON `json:"a,string"`
}{A: coverPtrMarshalJSON{}},
},
// HeadMarshalJSONPtr
{
name: "HeadMarshalJSONPtr",
data: struct {
A *coverMarshalJSON `json:"a"`
}{A: &coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONPtrOmitEmpty",
data: struct {
A *coverMarshalJSON `json:"a,omitempty"`
}{A: &coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONPtrString",
data: struct {
A *coverMarshalJSON `json:"a,string"`
}{A: &coverMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtr",
data: struct {
A *coverPtrMarshalJSON `json:"a"`
}{A: &coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtrOmitEmpty",
data: struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
}{A: &coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtrString",
data: struct {
A *coverPtrMarshalJSON `json:"a,string"`
}{A: &coverPtrMarshalJSON{}},
},
// HeadMarshalJSONPtrNil
{
name: "HeadMarshalJSONPtrNil",
data: struct {
A *coverMarshalJSON `json:"a"`
}{A: nil},
},
{
name: "HeadMarshalJSONPtrNilOmitEmpty",
data: struct {
A *coverMarshalJSON `json:"a,omitempty"`
}{A: nil},
},
{
name: "HeadMarshalJSONPtrNilString",
data: struct {
A *coverMarshalJSON `json:"a,string"`
}{A: nil},
},
{
name: "HeadPtrMarshalJSONPtrNil",
data: struct {
A *coverPtrMarshalJSON `json:"a"`
}{A: nil},
},
{
name: "HeadPtrMarshalJSONPtrNilOmitEmpty",
data: struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
}{A: nil},
},
{
name: "HeadPtrMarshalJSONPtrNilString",
data: struct {
A *coverPtrMarshalJSON `json:"a,string"`
}{A: nil},
},
// PtrHeadMarshalJSONZero
{
name: "PtrHeadMarshalJSONZero",
data: &struct {
A coverMarshalJSON `json:"a"`
}{},
},
{
name: "PtrHeadMarshalJSONZeroOmitEmpty",
data: &struct {
A coverMarshalJSON `json:"a,omitempty"`
}{},
},
{
name: "PtrHeadMarshalJSONZeroString",
data: &struct {
A coverMarshalJSON `json:"a,string"`
}{},
},
{
name: "PtrHeadPtrMarshalJSONZero",
data: &struct {
A coverPtrMarshalJSON `json:"a"`
}{},
},
{
name: "PtrHeadPtrMarshalJSONZeroOmitEmpty",
data: &struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
}{},
},
{
name: "PtrHeadPtrMarshalJSONZeroString",
data: &struct {
A coverPtrMarshalJSON `json:"a,string"`
}{},
},
// PtrHeadMarshalJSON
{
name: "PtrHeadMarshalJSON",
data: &struct {
A coverMarshalJSON `json:"a"`
}{A: coverMarshalJSON{}},
},
{
name: "PtrHeadMarshalJSONOmitEmpty",
data: &struct {
A coverMarshalJSON `json:"a,omitempty"`
}{A: coverMarshalJSON{}},
},
{
name: "PtrHeadMarshalJSONString",
data: &struct {
A coverMarshalJSON `json:"a,string"`
}{A: coverMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSON",
data: &struct {
A coverPtrMarshalJSON `json:"a"`
}{A: coverPtrMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSONOmitEmpty",
data: &struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
}{A: coverPtrMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSONString",
data: &struct {
A coverPtrMarshalJSON `json:"a,string"`
}{A: coverPtrMarshalJSON{}},
},
// PtrHeadMarshalJSONPtr
{
name: "PtrHeadMarshalJSONPtr",
data: &struct {
A *coverMarshalJSON `json:"a"`
}{A: &coverMarshalJSON{}},
},
{
name: "PtrHeadMarshalJSONPtrOmitEmpty",
data: &struct {
A *coverMarshalJSON `json:"a,omitempty"`
}{A: &coverMarshalJSON{}},
},
{
name: "PtrHeadMarshalJSONPtrString",
data: &struct {
A *coverMarshalJSON `json:"a,string"`
}{A: &coverMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSONPtr",
data: &struct {
A *coverPtrMarshalJSON `json:"a"`
}{A: &coverPtrMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSONPtrOmitEmpty",
data: &struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
}{A: &coverPtrMarshalJSON{}},
},
{
name: "PtrHeadPtrMarshalJSONPtrString",
data: &struct {
A *coverPtrMarshalJSON `json:"a,string"`
}{A: &coverPtrMarshalJSON{}},
},
// PtrHeadMarshalJSONPtrNil
{
name: "PtrHeadMarshalJSONPtrNil",
data: &struct {
A *coverMarshalJSON `json:"a"`
}{A: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilOmitEmpty",
data: &struct {
A *coverMarshalJSON `json:"a,omitempty"`
}{A: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilString",
data: &struct {
A *coverMarshalJSON `json:"a,string"`
}{A: nil},
},
{
name: "PtrHeadPtrMarshalJSONPtrNil",
data: &struct {
A *coverPtrMarshalJSON `json:"a"`
}{A: nil},
},
{
name: "PtrHeadPtrMarshalJSONPtrNilOmitEmpty",
data: &struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
}{A: nil},
},
{
name: "PtrHeadPtrMarshalJSONPtrNilString",
data: &struct {
A *coverPtrMarshalJSON `json:"a,string"`
}{A: nil},
},
// PtrHeadMarshalJSONNil
{
name: "PtrHeadMarshalJSONNil",
data: (*struct {
A *coverMarshalJSON `json:"a"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilOmitEmpty",
data: (*struct {
A *coverMarshalJSON `json:"a,omitempty"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilString",
data: (*struct {
A *coverMarshalJSON `json:"a,string"`
})(nil),
},
{
name: "PtrHeadPtrMarshalJSONNil",
data: (*struct {
A *coverPtrMarshalJSON `json:"a"`
})(nil),
},
{
name: "PtrHeadPtrMarshalJSONNilOmitEmpty",
data: (*struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
})(nil),
},
{
name: "PtrHeadPtrMarshalJSONNilString",
data: (*struct {
A *coverPtrMarshalJSON `json:"a,string"`
})(nil),
},
// HeadMarshalJSONZeroMultiFields
{
name: "HeadMarshalJSONZeroMultiFields",
data: struct {
A coverMarshalJSON `json:"a"`
B coverMarshalJSON `json:"b"`
C coverMarshalJSON `json:"c"`
}{},
},
{
name: "HeadMarshalJSONZeroMultiFieldsOmitEmpty",
data: struct {
A coverMarshalJSON `json:"a,omitempty"`
B coverMarshalJSON `json:"b,omitempty"`
C coverMarshalJSON `json:"c,omitempty"`
}{},
},
{
name: "HeadMarshalJSONZeroMultiFields",
data: struct {
A coverMarshalJSON `json:"a,string"`
B coverMarshalJSON `json:"b,string"`
C coverMarshalJSON `json:"c,string"`
}{},
},
{
name: "HeadPtrMarshalJSONZeroMultiFields",
data: struct {
A coverPtrMarshalJSON `json:"a"`
B coverPtrMarshalJSON `json:"b"`
C coverPtrMarshalJSON `json:"c"`
}{},
},
{
name: "HeadPtrMarshalJSONZeroMultiFieldsOmitEmpty",
data: struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
B coverPtrMarshalJSON `json:"b,omitempty"`
C coverPtrMarshalJSON `json:"c,omitempty"`
}{},
},
{
name: "HeadPtrMarshalJSONZeroMultiFields",
data: struct {
A coverPtrMarshalJSON `json:"a,string"`
B coverPtrMarshalJSON `json:"b,string"`
C coverPtrMarshalJSON `json:"c,string"`
}{},
},
// HeadMarshalJSONMultiFields
{
name: "HeadMarshalJSONMultiFields",
data: struct {
A coverMarshalJSON `json:"a"`
B coverMarshalJSON `json:"b"`
C coverMarshalJSON `json:"c"`
}{A: coverMarshalJSON{}, B: coverMarshalJSON{}, C: coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONMultiFieldsOmitEmpty",
data: struct {
A coverMarshalJSON `json:"a,omitempty"`
B coverMarshalJSON `json:"b,omitempty"`
C coverMarshalJSON `json:"c,omitempty"`
}{A: coverMarshalJSON{}, B: coverMarshalJSON{}, C: coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONMultiFieldsString",
data: struct {
A coverMarshalJSON `json:"a,string"`
B coverMarshalJSON `json:"b,string"`
C coverMarshalJSON `json:"c,string"`
}{A: coverMarshalJSON{}, B: coverMarshalJSON{}, C: coverMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONMultiFields",
data: struct {
A coverPtrMarshalJSON `json:"a"`
B coverPtrMarshalJSON `json:"b"`
C coverPtrMarshalJSON `json:"c"`
}{A: coverPtrMarshalJSON{}, B: coverPtrMarshalJSON{}, C: coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONMultiFieldsOmitEmpty",
data: struct {
A coverPtrMarshalJSON `json:"a,omitempty"`
B coverPtrMarshalJSON `json:"b,omitempty"`
C coverPtrMarshalJSON `json:"c,omitempty"`
}{A: coverPtrMarshalJSON{}, B: coverPtrMarshalJSON{}, C: coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONMultiFieldsString",
data: struct {
A coverPtrMarshalJSON `json:"a,string"`
B coverPtrMarshalJSON `json:"b,string"`
C coverPtrMarshalJSON `json:"c,string"`
}{A: coverPtrMarshalJSON{}, B: coverPtrMarshalJSON{}, C: coverPtrMarshalJSON{}},
},
// HeadMarshalJSONPtrMultiFields
{
name: "HeadMarshalJSONPtrMultiFields",
data: struct {
A *coverMarshalJSON `json:"a"`
B *coverMarshalJSON `json:"b"`
C *coverMarshalJSON `json:"c"`
}{A: &coverMarshalJSON{}, B: &coverMarshalJSON{}, C: &coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONPtrMultiFieldsOmitEmpty",
data: struct {
A *coverMarshalJSON `json:"a,omitempty"`
B *coverMarshalJSON `json:"b,omitempty"`
C *coverMarshalJSON `json:"c,omitempty"`
}{A: &coverMarshalJSON{}, B: &coverMarshalJSON{}, C: &coverMarshalJSON{}},
},
{
name: "HeadMarshalJSONPtrMultiFieldsString",
data: struct {
A *coverMarshalJSON `json:"a,string"`
B *coverMarshalJSON `json:"b,string"`
C *coverMarshalJSON `json:"c,string"`
}{A: &coverMarshalJSON{}, B: &coverMarshalJSON{}, C: &coverMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtrMultiFields",
data: struct {
A *coverPtrMarshalJSON `json:"a"`
B *coverPtrMarshalJSON `json:"b"`
C *coverPtrMarshalJSON `json:"c"`
}{A: &coverPtrMarshalJSON{}, B: &coverPtrMarshalJSON{}, C: &coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtrMultiFieldsOmitEmpty",
data: struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
B *coverPtrMarshalJSON `json:"b,omitempty"`
C *coverPtrMarshalJSON `json:"c,omitempty"`
}{A: &coverPtrMarshalJSON{}, B: &coverPtrMarshalJSON{}, C: &coverPtrMarshalJSON{}},
},
{
name: "HeadPtrMarshalJSONPtrMultiFieldsString",
data: struct {
A *coverPtrMarshalJSON `json:"a,string"`
B *coverPtrMarshalJSON `json:"b,string"`
C *coverPtrMarshalJSON `json:"c,string"`
}{A: &coverPtrMarshalJSON{}, B: &coverPtrMarshalJSON{}, C: &coverPtrMarshalJSON{}},
},
// HeadMarshalJSONPtrNilMultiFields
{
name: "HeadMarshalJSONPtrNilMultiFields",
data: struct {
A *coverMarshalJSON `json:"a"`
B *coverMarshalJSON `json:"b"`
C *coverMarshalJSON `json:"c"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadMarshalJSONPtrNilMultiFieldsOmitEmpty",
data: struct {
A *coverMarshalJSON `json:"a,omitempty"`
B *coverMarshalJSON `json:"b,omitempty"`
C *coverMarshalJSON `json:"c,omitempty"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadMarshalJSONPtrNilMultiFieldsString",
data: struct {
A *coverMarshalJSON `json:"a,string"`
B *coverMarshalJSON `json:"b,string"`
C *coverMarshalJSON `json:"c,string"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadPtrMarshalJSONPtrNilMultiFields",
data: struct {
A *coverPtrMarshalJSON `json:"a"`
B *coverPtrMarshalJSON `json:"b"`
C *coverPtrMarshalJSON `json:"c"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadPtrMarshalJSONPtrNilMultiFieldsOmitEmpty",
data: struct {
A *coverPtrMarshalJSON `json:"a,omitempty"`
B *coverPtrMarshalJSON `json:"b,omitempty"`
C *coverPtrMarshalJSON `json:"c,omitempty"`
}{A: nil, B: nil, C: nil},
},
{
name: "HeadPtrMarshalJSONPtrNilMultiFieldsString",
data: struct {
A *coverPtrMarshalJSON `json:"a,string"`
B *coverPtrMarshalJSON `json:"b,string"`
C *coverPtrMarshalJSON `json:"c,string"`
}{A: nil, B: nil, C: nil},
},
/*
// PtrHeadMarshalJSONZeroMultiFields
{
name: "PtrHeadMarshalJSONZeroMultiFields",
data: &struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}{},
},
{
name: "PtrHeadMarshalJSONZeroMultiFieldsOmitEmpty",
data: &struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}{},
},
{
name: "PtrHeadMarshalJSONZeroMultiFieldsString",
data: &struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}{},
},
// PtrHeadMarshalJSONMultiFields
{
name: "PtrHeadMarshalJSONMultiFields",
data: &struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}{A: [2]int{-1}, B: [2]int{1}},
},
{
name: "PtrHeadMarshalJSONMultiFieldsOmitEmpty",
data: &struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}{A: [2]int{-1}, B: [2]int{1}},
},
{
name: "PtrHeadMarshalJSONMultiFieldsString",
data: &struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}{A: [2]int{-1}, B: [2]int{1}},
},
// PtrHeadMarshalJSONPtrMultiFields
{
name: "PtrHeadMarshalJSONPtrMultiFields",
data: &struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{-2})},
},
{
name: "PtrHeadMarshalJSONPtrMultiFieldsOmitEmpty",
data: &struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{-2})},
},
{
name: "PtrHeadMarshalJSONPtrMultiFieldsString",
data: &struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{-2})},
},
// PtrHeadMarshalJSONPtrNilMultiFields
{
name: "PtrHeadMarshalJSONPtrNilMultiFields",
data: &struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilMultiFieldsOmitEmpty",
data: &struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilMultiFieldsString",
data: &struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}{A: nil, B: nil},
},
// PtrHeadMarshalJSONNilMultiFields
{
name: "PtrHeadMarshalJSONNilMultiFields",
data: (*struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsOmitEmpty",
data: (*struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsString",
data: (*struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
})(nil),
},
// PtrHeadMarshalJSONNilMultiFields
{
name: "PtrHeadMarshalJSONNilMultiFields",
data: (*struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsOmitEmpty",
data: (*struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsString",
data: (*struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
})(nil),
},
// HeadMarshalJSONZeroNotRoot
{
name: "HeadMarshalJSONZeroNotRoot",
data: struct {
A struct {
A [2]int `json:"a"`
}
}{},
},
{
name: "HeadMarshalJSONZeroNotRootOmitEmpty",
data: struct {
A struct {
A [2]int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadMarshalJSONZeroNotRootString",
data: struct {
A struct {
A [2]int `json:"a,string"`
}
}{},
},
// HeadMarshalJSONNotRoot
{
name: "HeadMarshalJSONNotRoot",
data: struct {
A struct {
A [2]int `json:"a"`
}
}{A: struct {
A [2]int `json:"a"`
}{A: [2]int{-1}}},
},
{
name: "HeadMarshalJSONNotRootOmitEmpty",
data: struct {
A struct {
A [2]int `json:"a,omitempty"`
}
}{A: struct {
A [2]int `json:"a,omitempty"`
}{A: [2]int{-1}}},
},
{
name: "HeadMarshalJSONNotRootString",
data: struct {
A struct {
A [2]int `json:"a,string"`
}
}{A: struct {
A [2]int `json:"a,string"`
}{A: [2]int{-1}}},
},
// HeadMarshalJSONPtrNotRoot
{
name: "HeadMarshalJSONPtrNotRoot",
data: struct {
A struct {
A *[2]int `json:"a"`
}
}{A: struct {
A *[2]int `json:"a"`
}{arrayptr([2]int{-1})}},
},
{
name: "HeadMarshalJSONPtrNotRootOmitEmpty",
data: struct {
A struct {
A *[2]int `json:"a,omitempty"`
}
}{A: struct {
A *[2]int `json:"a,omitempty"`
}{arrayptr([2]int{-1})}},
},
{
name: "HeadMarshalJSONPtrNotRootString",
data: struct {
A struct {
A *[2]int `json:"a,string"`
}
}{A: struct {
A *[2]int `json:"a,string"`
}{arrayptr([2]int{-1})}},
},
// HeadMarshalJSONPtrNilNotRoot
{
name: "HeadMarshalJSONPtrNilNotRoot",
data: struct {
A struct {
A *[2]int `json:"a"`
}
}{},
},
{
name: "HeadMarshalJSONPtrNilNotRootOmitEmpty",
data: struct {
A struct {
A *[2]int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadMarshalJSONPtrNilNotRootString",
data: struct {
A struct {
A *[2]int `json:"a,string"`
}
}{},
},
// PtrHeadMarshalJSONZeroNotRoot
{
name: "PtrHeadMarshalJSONZeroNotRoot",
data: struct {
A *struct {
A [2]int `json:"a"`
}
}{A: new(struct {
A [2]int `json:"a"`
})},
},
{
name: "PtrHeadMarshalJSONZeroNotRootOmitEmpty",
data: struct {
A *struct {
A [2]int `json:"a,omitempty"`
}
}{A: new(struct {
A [2]int `json:"a,omitempty"`
})},
},
{
name: "PtrHeadMarshalJSONZeroNotRootString",
data: struct {
A *struct {
A [2]int `json:"a,string"`
}
}{A: new(struct {
A [2]int `json:"a,string"`
})},
},
// PtrHeadMarshalJSONNotRoot
{
name: "PtrHeadMarshalJSONNotRoot",
data: struct {
A *struct {
A [2]int `json:"a"`
}
}{A: &(struct {
A [2]int `json:"a"`
}{A: [2]int{-1}})},
},
{
name: "PtrHeadMarshalJSONNotRootOmitEmpty",
data: struct {
A *struct {
A [2]int `json:"a,omitempty"`
}
}{A: &(struct {
A [2]int `json:"a,omitempty"`
}{A: [2]int{-1}})},
},
{
name: "PtrHeadMarshalJSONNotRootString",
data: struct {
A *struct {
A [2]int `json:"a,string"`
}
}{A: &(struct {
A [2]int `json:"a,string"`
}{A: [2]int{-1}})},
},
// PtrHeadMarshalJSONPtrNotRoot
{
name: "PtrHeadMarshalJSONPtrNotRoot",
data: struct {
A *struct {
A *[2]int `json:"a"`
}
}{A: &(struct {
A *[2]int `json:"a"`
}{A: arrayptr([2]int{-1})})},
},
{
name: "PtrHeadMarshalJSONPtrNotRootOmitEmpty",
data: struct {
A *struct {
A *[2]int `json:"a,omitempty"`
}
}{A: &(struct {
A *[2]int `json:"a,omitempty"`
}{A: arrayptr([2]int{-1})})},
},
{
name: "PtrHeadMarshalJSONPtrNotRootString",
data: struct {
A *struct {
A *[2]int `json:"a,string"`
}
}{A: &(struct {
A *[2]int `json:"a,string"`
}{A: arrayptr([2]int{-1})})},
},
// PtrHeadMarshalJSONPtrNilNotRoot
{
name: "PtrHeadMarshalJSONPtrNilNotRoot",
data: struct {
A *struct {
A *[2]int `json:"a"`
}
}{A: &(struct {
A *[2]int `json:"a"`
}{A: nil})},
},
{
name: "PtrHeadMarshalJSONPtrNilNotRootOmitEmpty",
data: struct {
A *struct {
A *[2]int `json:"a,omitempty"`
}
}{A: &(struct {
A *[2]int `json:"a,omitempty"`
}{A: nil})},
},
{
name: "PtrHeadMarshalJSONPtrNilNotRootString",
data: struct {
A *struct {
A *[2]int `json:"a,string"`
}
}{A: &(struct {
A *[2]int `json:"a,string"`
}{A: nil})},
},
// PtrHeadMarshalJSONNilNotRoot
{
name: "PtrHeadMarshalJSONNilNotRoot",
data: struct {
A *struct {
A *[2]int `json:"a"`
}
}{A: nil},
},
{
name: "PtrHeadMarshalJSONNilNotRootOmitEmpty",
data: struct {
A *struct {
A *[2]int `json:"a,omitempty"`
} `json:",omitempty"`
}{A: nil},
},
{
name: "PtrHeadMarshalJSONNilNotRootString",
data: struct {
A *struct {
A *[2]int `json:"a,string"`
} `json:",string"`
}{A: nil},
},
// HeadMarshalJSONZeroMultiFieldsNotRoot
{
name: "HeadMarshalJSONZeroMultiFieldsNotRoot",
data: struct {
A struct {
A [2]int `json:"a"`
}
B struct {
B [2]int `json:"b"`
}
}{},
},
{
name: "HeadMarshalJSONZeroMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A [2]int `json:"a,omitempty"`
}
B struct {
B [2]int `json:"b,omitempty"`
}
}{},
},
{
name: "HeadMarshalJSONZeroMultiFieldsNotRootString",
data: struct {
A struct {
A [2]int `json:"a,string"`
}
B struct {
B [2]int `json:"b,string"`
}
}{},
},
// HeadMarshalJSONMultiFieldsNotRoot
{
name: "HeadMarshalJSONMultiFieldsNotRoot",
data: struct {
A struct {
A [2]int `json:"a"`
}
B struct {
B [2]int `json:"b"`
}
}{A: struct {
A [2]int `json:"a"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b"`
}{B: [2]int{0}}},
},
{
name: "HeadMarshalJSONMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A [2]int `json:"a,omitempty"`
}
B struct {
B [2]int `json:"b,omitempty"`
}
}{A: struct {
A [2]int `json:"a,omitempty"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b,omitempty"`
}{B: [2]int{1}}},
},
{
name: "HeadMarshalJSONMultiFieldsNotRootString",
data: struct {
A struct {
A [2]int `json:"a,string"`
}
B struct {
B [2]int `json:"b,string"`
}
}{A: struct {
A [2]int `json:"a,string"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b,string"`
}{B: [2]int{1}}},
},
// HeadMarshalJSONPtrMultiFieldsNotRoot
{
name: "HeadMarshalJSONPtrMultiFieldsNotRoot",
data: struct {
A struct {
A *[2]int `json:"a"`
}
B struct {
B *[2]int `json:"b"`
}
}{A: struct {
A *[2]int `json:"a"`
}{A: arrayptr([2]int{-1})}, B: struct {
B *[2]int `json:"b"`
}{B: arrayptr([2]int{1})}},
},
{
name: "HeadMarshalJSONPtrMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A *[2]int `json:"a,omitempty"`
}
B struct {
B *[2]int `json:"b,omitempty"`
}
}{A: struct {
A *[2]int `json:"a,omitempty"`
}{A: arrayptr([2]int{-1})}, B: struct {
B *[2]int `json:"b,omitempty"`
}{B: arrayptr([2]int{1})}},
},
{
name: "HeadMarshalJSONPtrMultiFieldsNotRootString",
data: struct {
A struct {
A *[2]int `json:"a,string"`
}
B struct {
B *[2]int `json:"b,string"`
}
}{A: struct {
A *[2]int `json:"a,string"`
}{A: arrayptr([2]int{-1})}, B: struct {
B *[2]int `json:"b,string"`
}{B: arrayptr([2]int{1})}},
},
// HeadMarshalJSONPtrNilMultiFieldsNotRoot
{
name: "HeadMarshalJSONPtrNilMultiFieldsNotRoot",
data: struct {
A struct {
A *[2]int `json:"a"`
}
B struct {
B *[2]int `json:"b"`
}
}{A: struct {
A *[2]int `json:"a"`
}{A: nil}, B: struct {
B *[2]int `json:"b"`
}{B: nil}},
},
{
name: "HeadMarshalJSONPtrNilMultiFieldsNotRootOmitEmpty",
data: struct {
A struct {
A *[2]int `json:"a,omitempty"`
}
B struct {
B *[2]int `json:"b,omitempty"`
}
}{A: struct {
A *[2]int `json:"a,omitempty"`
}{A: nil}, B: struct {
B *[2]int `json:"b,omitempty"`
}{B: nil}},
},
{
name: "HeadMarshalJSONPtrNilMultiFieldsNotRootString",
data: struct {
A struct {
A *[2]int `json:"a,string"`
}
B struct {
B *[2]int `json:"b,string"`
}
}{A: struct {
A *[2]int `json:"a,string"`
}{A: nil}, B: struct {
B *[2]int `json:"b,string"`
}{B: nil}},
},
// PtrHeadMarshalJSONZeroMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONZeroMultiFieldsNotRoot",
data: &struct {
A struct {
A [2]int `json:"a"`
}
B struct {
B [2]int `json:"b"`
}
}{},
},
{
name: "PtrHeadMarshalJSONZeroMultiFieldsNotRootOmitEmpty",
data: &struct {
A struct {
A [2]int `json:"a,omitempty"`
}
B struct {
B [2]int `json:"b,omitempty"`
}
}{},
},
{
name: "PtrHeadMarshalJSONZeroMultiFieldsNotRootString",
data: &struct {
A struct {
A [2]int `json:"a,string"`
}
B struct {
B [2]int `json:"b,string"`
}
}{},
},
// PtrHeadMarshalJSONMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONMultiFieldsNotRoot",
data: &struct {
A struct {
A [2]int `json:"a"`
}
B struct {
B [2]int `json:"b"`
}
}{A: struct {
A [2]int `json:"a"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b"`
}{B: [2]int{1}}},
},
{
name: "PtrHeadMarshalJSONMultiFieldsNotRootOmitEmpty",
data: &struct {
A struct {
A [2]int `json:"a,omitempty"`
}
B struct {
B [2]int `json:"b,omitempty"`
}
}{A: struct {
A [2]int `json:"a,omitempty"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b,omitempty"`
}{B: [2]int{1}}},
},
{
name: "PtrHeadMarshalJSONMultiFieldsNotRootString",
data: &struct {
A struct {
A [2]int `json:"a,string"`
}
B struct {
B [2]int `json:"b,string"`
}
}{A: struct {
A [2]int `json:"a,string"`
}{A: [2]int{-1}}, B: struct {
B [2]int `json:"b,string"`
}{B: [2]int{1}}},
},
// PtrHeadMarshalJSONPtrMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONPtrMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[2]int `json:"a"`
}
B *struct {
B *[2]int `json:"b"`
}
}{A: &(struct {
A *[2]int `json:"a"`
}{A: arrayptr([2]int{-1})}), B: &(struct {
B *[2]int `json:"b"`
}{B: arrayptr([2]int{1})})},
},
{
name: "PtrHeadMarshalJSONPtrMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[2]int `json:"a,omitempty"`
}
B *struct {
B *[2]int `json:"b,omitempty"`
}
}{A: &(struct {
A *[2]int `json:"a,omitempty"`
}{A: arrayptr([2]int{-1})}), B: &(struct {
B *[2]int `json:"b,omitempty"`
}{B: arrayptr([2]int{1})})},
},
{
name: "PtrHeadMarshalJSONPtrMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[2]int `json:"a,string"`
}
B *struct {
B *[2]int `json:"b,string"`
}
}{A: &(struct {
A *[2]int `json:"a,string"`
}{A: arrayptr([2]int{-1})}), B: &(struct {
B *[2]int `json:"b,string"`
}{B: arrayptr([2]int{1})})},
},
// PtrHeadMarshalJSONPtrNilMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONPtrNilMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[2]int `json:"a"`
}
B *struct {
B *[2]int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[2]int `json:"a,omitempty"`
} `json:",omitempty"`
B *struct {
B *[2]int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[2]int `json:"a,string"`
} `json:",string"`
B *struct {
B *[2]int `json:"b,string"`
} `json:",string"`
}{A: nil, B: nil},
},
// PtrHeadMarshalJSONNilMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONNilMultiFieldsNotRoot",
data: (*struct {
A *struct {
A *[2]int `json:"a"`
}
B *struct {
B *[2]int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A *[2]int `json:"a,omitempty"`
}
B *struct {
B *[2]int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONNilMultiFieldsNotRootString",
data: (*struct {
A *struct {
A *[2]int `json:"a,string"`
}
B *struct {
B *[2]int `json:"b,string"`
}
})(nil),
},
// PtrHeadMarshalJSONDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
B *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
}{A: &(struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}{A: [2]int{-1}, B: [2]int{1}}), B: &(struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}{A: [2]int{-1}, B: [2]int{1}})},
},
{
name: "PtrHeadMarshalJSONDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}
B *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}
}{A: &(struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}{A: [2]int{-1}, B: [2]int{1}}), B: &(struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}{A: [2]int{-1}, B: [2]int{1}})},
},
{
name: "PtrHeadMarshalJSONDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
B *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
}{A: &(struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}{A: [2]int{-1}, B: [2]int{1}}), B: &(struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}{A: [2]int{-1}, B: [2]int{1}})},
},
// PtrHeadMarshalJSONNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
B *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
} `json:",omitempty"`
B *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
B *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
}{A: nil, B: nil},
},
// PtrHeadMarshalJSONNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRoot",
data: (*struct {
A *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
B *struct {
A [2]int `json:"a"`
B [2]int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}
B *struct {
A [2]int `json:"a,omitempty"`
B [2]int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONNilDoubleMultiFieldsNotRootString",
data: (*struct {
A *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
B *struct {
A [2]int `json:"a,string"`
B [2]int `json:"b,string"`
}
})(nil),
},
// PtrHeadMarshalJSONPtrDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONPtrDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
B *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
}{A: &(struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{1})}), B: &(struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}{A: nil, B: nil})},
},
{
name: "PtrHeadMarshalJSONPtrDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}
B *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}
}{A: &(struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{1})}), B: &(struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}{A: nil, B: nil})},
},
{
name: "PtrHeadMarshalJSONPtrDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
B *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
}{A: &(struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}{A: arrayptr([2]int{-1}), B: arrayptr([2]int{1})}), B: &(struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}{A: nil, B: nil})},
},
// PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRoot",
data: &struct {
A *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
B *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRootOmitEmpty",
data: &struct {
A *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
} `json:",omitempty"`
B *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
} `json:",omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRootString",
data: &struct {
A *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
B *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
}{A: nil, B: nil},
},
// PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRoot",
data: (*struct {
A *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
B *struct {
A *[2]int `json:"a"`
B *[2]int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRootOmitEmpty",
data: (*struct {
A *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}
B *struct {
A *[2]int `json:"a,omitempty"`
B *[2]int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadMarshalJSONPtrNilDoubleMultiFieldsNotRootString",
data: (*struct {
A *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
B *struct {
A *[2]int `json:"a,string"`
B *[2]int `json:"b,string"`
}
})(nil),
},
// AnonymousHeadMarshalJSON
{
name: "AnonymousHeadMarshalJSON",
data: struct {
structMarshalJSON
B [2]int `json:"b"`
}{
structMarshalJSON: structMarshalJSON{A: [2]int{-1}},
B: [2]int{1},
},
},
{
name: "AnonymousHeadMarshalJSONOmitEmpty",
data: struct {
structMarshalJSONOmitEmpty
B [2]int `json:"b,omitempty"`
}{
structMarshalJSONOmitEmpty: structMarshalJSONOmitEmpty{A: [2]int{-1}},
B: [2]int{1},
},
},
{
name: "AnonymousHeadMarshalJSONString",
data: struct {
structMarshalJSONString
B [2]int `json:"b,string"`
}{
structMarshalJSONString: structMarshalJSONString{A: [2]int{-1}},
B: [2]int{1},
},
},
// PtrAnonymousHeadMarshalJSON
{
name: "PtrAnonymousHeadMarshalJSON",
data: struct {
*structMarshalJSON
B [2]int `json:"b"`
}{
structMarshalJSON: &structMarshalJSON{A: [2]int{-1}},
B: [2]int{1},
},
},
{
name: "PtrAnonymousHeadMarshalJSONOmitEmpty",
data: struct {
*structMarshalJSONOmitEmpty
B [2]int `json:"b,omitempty"`
}{
structMarshalJSONOmitEmpty: &structMarshalJSONOmitEmpty{A: [2]int{-1}},
B: [2]int{1},
},
},
{
name: "PtrAnonymousHeadMarshalJSONString",
data: struct {
*structMarshalJSONString
B [2]int `json:"b,string"`
}{
structMarshalJSONString: &structMarshalJSONString{A: [2]int{-1}},
B: [2]int{1},
},
},
// PtrAnonymousHeadMarshalJSONNil
{
name: "PtrAnonymousHeadMarshalJSONNil",
data: struct {
*structMarshalJSON
B [2]int `json:"b"`
}{
structMarshalJSON: &structMarshalJSON{A: [2]int{1}},
B: [2]int{1},
},
},
{
name: "PtrAnonymousHeadMarshalJSONNilOmitEmpty",
data: struct {
*structMarshalJSONOmitEmpty
B [2]int `json:"b,omitempty"`
}{
structMarshalJSONOmitEmpty: &structMarshalJSONOmitEmpty{A: [2]int{1}},
B: [2]int{1},
},
},
{
name: "PtrAnonymousHeadMarshalJSONNilString",
data: struct {
*structMarshalJSONString
B [2]int `json:"b,string"`
}{
structMarshalJSONString: &structMarshalJSONString{A: [2]int{1}},
B: [2]int{1},
},
},
// NilPtrAnonymousHeadMarshalJSON
{
name: "NilPtrAnonymousHeadMarshalJSON",
data: struct {
*structMarshalJSON
B [2]int `json:"b"`
}{
structMarshalJSON: nil,
B: [2]int{-1},
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONOmitEmpty",
data: struct {
*structMarshalJSONOmitEmpty
B [2]int `json:"b,omitempty"`
}{
structMarshalJSONOmitEmpty: nil,
B: [2]int{-1},
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONString",
data: struct {
*structMarshalJSONString
B [2]int `json:"b,string"`
}{
structMarshalJSONString: nil,
B: [2]int{-1},
},
},
// AnonymousHeadMarshalJSONPtr
{
name: "AnonymousHeadMarshalJSONPtr",
data: struct {
structMarshalJSONPtr
B *[2]int `json:"b"`
}{
structMarshalJSONPtr: structMarshalJSONPtr{A: arrayptr([2]int{-1})},
B: nil,
},
},
{
name: "AnonymousHeadMarshalJSONPtrOmitEmpty",
data: struct {
structMarshalJSONPtrOmitEmpty
B *[2]int `json:"b,omitempty"`
}{
structMarshalJSONPtrOmitEmpty: structMarshalJSONPtrOmitEmpty{A: arrayptr([2]int{-1})},
B: nil,
},
},
{
name: "AnonymousHeadMarshalJSONPtrString",
data: struct {
structMarshalJSONPtrString
B *[2]int `json:"b,string"`
}{
structMarshalJSONPtrString: structMarshalJSONPtrString{A: arrayptr([2]int{-1})},
B: nil,
},
},
// AnonymousHeadMarshalJSONPtrNil
{
name: "AnonymousHeadMarshalJSONPtrNil",
data: struct {
structMarshalJSONPtr
B *[2]int `json:"b"`
}{
structMarshalJSONPtr: structMarshalJSONPtr{A: nil},
B: arrayptr([2]int{-1}),
},
},
{
name: "AnonymousHeadMarshalJSONPtrNilOmitEmpty",
data: struct {
structMarshalJSONPtrOmitEmpty
B *[2]int `json:"b,omitempty"`
}{
structMarshalJSONPtrOmitEmpty: structMarshalJSONPtrOmitEmpty{A: nil},
B: arrayptr([2]int{-1}),
},
},
{
name: "AnonymousHeadMarshalJSONPtrNilString",
data: struct {
structMarshalJSONPtrString
B *[2]int `json:"b,string"`
}{
structMarshalJSONPtrString: structMarshalJSONPtrString{A: nil},
B: arrayptr([2]int{-1}),
},
},
// PtrAnonymousHeadMarshalJSONPtr
{
name: "PtrAnonymousHeadMarshalJSONPtr",
data: struct {
*structMarshalJSONPtr
B *[2]int `json:"b"`
}{
structMarshalJSONPtr: &structMarshalJSONPtr{A: arrayptr([2]int{-1})},
B: nil,
},
},
{
name: "PtrAnonymousHeadMarshalJSONPtrOmitEmpty",
data: struct {
*structMarshalJSONPtrOmitEmpty
B *[2]int `json:"b,omitempty"`
}{
structMarshalJSONPtrOmitEmpty: &structMarshalJSONPtrOmitEmpty{A: arrayptr([2]int{-1})},
B: nil,
},
},
{
name: "PtrAnonymousHeadMarshalJSONPtrString",
data: struct {
*structMarshalJSONPtrString
B *[2]int `json:"b,string"`
}{
structMarshalJSONPtrString: &structMarshalJSONPtrString{A: arrayptr([2]int{-1})},
B: nil,
},
},
// NilPtrAnonymousHeadMarshalJSONPtr
{
name: "NilPtrAnonymousHeadMarshalJSONPtr",
data: struct {
*structMarshalJSONPtr
B *[2]int `json:"b"`
}{
structMarshalJSONPtr: nil,
B: arrayptr([2]int{-1}),
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONPtrOmitEmpty",
data: struct {
*structMarshalJSONPtrOmitEmpty
B *[2]int `json:"b,omitempty"`
}{
structMarshalJSONPtrOmitEmpty: nil,
B: arrayptr([2]int{-1}),
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONPtrString",
data: struct {
*structMarshalJSONPtrString
B *[2]int `json:"b,string"`
}{
structMarshalJSONPtrString: nil,
B: arrayptr([2]int{-1}),
},
},
// AnonymousHeadMarshalJSONOnly
{
name: "AnonymousHeadMarshalJSONOnly",
data: struct {
structMarshalJSON
}{
structMarshalJSON: structMarshalJSON{A: [2]int{-1}},
},
},
{
name: "AnonymousHeadMarshalJSONOnlyOmitEmpty",
data: struct {
structMarshalJSONOmitEmpty
}{
structMarshalJSONOmitEmpty: structMarshalJSONOmitEmpty{A: [2]int{-1}},
},
},
{
name: "AnonymousHeadMarshalJSONOnlyString",
data: struct {
structMarshalJSONString
}{
structMarshalJSONString: structMarshalJSONString{A: [2]int{-1}},
},
},
// PtrAnonymousHeadMarshalJSONOnly
{
name: "PtrAnonymousHeadMarshalJSONOnly",
data: struct {
*structMarshalJSON
}{
structMarshalJSON: &structMarshalJSON{A: [2]int{-1}},
},
},
{
name: "PtrAnonymousHeadMarshalJSONOnlyOmitEmpty",
data: struct {
*structMarshalJSONOmitEmpty
}{
structMarshalJSONOmitEmpty: &structMarshalJSONOmitEmpty{A: [2]int{-1}},
},
},
{
name: "PtrAnonymousHeadMarshalJSONOnlyString",
data: struct {
*structMarshalJSONString
}{
structMarshalJSONString: &structMarshalJSONString{A: [2]int{-1}},
},
},
// NilPtrAnonymousHeadMarshalJSONOnly
{
name: "NilPtrAnonymousHeadMarshalJSONOnly",
data: struct {
*structMarshalJSON
}{
structMarshalJSON: nil,
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONOnlyOmitEmpty",
data: struct {
*structMarshalJSONOmitEmpty
}{
structMarshalJSONOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONOnlyString",
data: struct {
*structMarshalJSONString
}{
structMarshalJSONString: nil,
},
},
// AnonymousHeadMarshalJSONPtrOnly
{
name: "AnonymousHeadMarshalJSONPtrOnly",
data: struct {
structMarshalJSONPtr
}{
structMarshalJSONPtr: structMarshalJSONPtr{A: arrayptr([2]int{-1})},
},
},
{
name: "AnonymousHeadMarshalJSONPtrOnlyOmitEmpty",
data: struct {
structMarshalJSONPtrOmitEmpty
}{
structMarshalJSONPtrOmitEmpty: structMarshalJSONPtrOmitEmpty{A: arrayptr([2]int{-1})},
},
},
{
name: "AnonymousHeadMarshalJSONPtrOnlyString",
data: struct {
structMarshalJSONPtrString
}{
structMarshalJSONPtrString: structMarshalJSONPtrString{A: arrayptr([2]int{-1})},
},
},
// AnonymousHeadMarshalJSONPtrNilOnly
{
name: "AnonymousHeadMarshalJSONPtrNilOnly",
data: struct {
structMarshalJSONPtr
}{
structMarshalJSONPtr: structMarshalJSONPtr{A: nil},
},
},
{
name: "AnonymousHeadMarshalJSONPtrNilOnlyOmitEmpty",
data: struct {
structMarshalJSONPtrOmitEmpty
}{
structMarshalJSONPtrOmitEmpty: structMarshalJSONPtrOmitEmpty{A: nil},
},
},
{
name: "AnonymousHeadMarshalJSONPtrNilOnlyString",
data: struct {
structMarshalJSONPtrString
}{
structMarshalJSONPtrString: structMarshalJSONPtrString{A: nil},
},
},
// PtrAnonymousHeadMarshalJSONPtrOnly
{
name: "PtrAnonymousHeadMarshalJSONPtrOnly",
data: struct {
*structMarshalJSONPtr
}{
structMarshalJSONPtr: &structMarshalJSONPtr{A: arrayptr([2]int{-1})},
},
},
{
name: "PtrAnonymousHeadMarshalJSONPtrOnlyOmitEmpty",
data: struct {
*structMarshalJSONPtrOmitEmpty
}{
structMarshalJSONPtrOmitEmpty: &structMarshalJSONPtrOmitEmpty{A: arrayptr([2]int{-1})},
},
},
{
name: "PtrAnonymousHeadMarshalJSONPtrOnlyString",
data: struct {
*structMarshalJSONPtrString
}{
structMarshalJSONPtrString: &structMarshalJSONPtrString{A: arrayptr([2]int{-1})},
},
},
// NilPtrAnonymousHeadMarshalJSONPtrOnly
{
name: "NilPtrAnonymousHeadMarshalJSONPtrOnly",
data: struct {
*structMarshalJSONPtr
}{
structMarshalJSONPtr: nil,
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONPtrOnlyOmitEmpty",
data: struct {
*structMarshalJSONPtrOmitEmpty
}{
structMarshalJSONPtrOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadMarshalJSONPtrOnlyString",
data: struct {
*structMarshalJSONPtrString
}{
structMarshalJSONPtrString: nil,
},
},
*/
}
for _, test := range tests {
for _, indent := range []bool{false} {
for _, htmlEscape := range []bool{false} {
fmt.Println(test.name)
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())
}
}
}
}
}