go-json/cover_int_test.go

2943 lines
46 KiB
Go

package json_test
import (
"bytes"
"strings"
"testing"
"github.com/goccy/go-json"
)
func TestCoverInt(t *testing.T) {
type structInt struct {
A int `json:"a"`
}
type structIntOmitEmpty struct {
A int `json:"a,omitempty"`
}
type structIntString struct {
A int `json:"a,string"`
}
type structIntPtr struct {
A *int `json:"a"`
}
type structIntPtrOmitEmpty struct {
A *int `json:"a,omitempty"`
}
type structIntPtrString struct {
A *int `json:"a,string"`
}
tests := []struct {
name string
expected string
indentExpected string
data interface{}
}{
// HeadIntZero
{
name: "HeadIntZero",
expected: `{"a":0}`,
indentExpected: `
{
"a": 0
}
`,
data: struct {
A int `json:"a"`
}{},
},
{
name: "HeadIntZeroOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
A int `json:"a,omitempty"`
}{},
},
{
name: "HeadIntZeroString",
expected: `{"a":"0"}`,
indentExpected: `
{
"a": "0"
}
`,
data: struct {
A int `json:"a,string"`
}{},
},
// HeadInt
{
name: "HeadInt",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
A int `json:"a"`
}{A: 1},
},
{
name: "HeadIntOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
A int `json:"a,omitempty"`
}{A: 1},
},
{
name: "HeadIntString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
A int `json:"a,string"`
}{A: 1},
},
// HeadIntPtr
{
name: "HeadIntPtr",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
A *int `json:"a"`
}{A: intptr(1)},
},
{
name: "HeadIntPtrOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
A *int `json:"a,omitempty"`
}{A: intptr(1)},
},
{
name: "HeadIntPtrString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
A *int `json:"a,string"`
}{A: intptr(1)},
},
// HeadIntPtrNil
{
name: "HeadIntPtrNil",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: struct {
A *int `json:"a"`
}{A: nil},
},
{
name: "HeadIntPtrNilOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
A *int `json:"a,omitempty"`
}{A: nil},
},
{
name: "HeadIntPtrNilString",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: struct {
A *int `json:"a,string"`
}{A: nil},
},
// PtrHeadIntZero
{
name: "PtrHeadIntZero",
expected: `{"a":0}`,
indentExpected: `
{
"a": 0
}
`,
data: &struct {
A int `json:"a"`
}{},
},
{
name: "PtrHeadIntZeroOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: &struct {
A int `json:"a,omitempty"`
}{},
},
{
name: "PtrHeadIntZeroString",
expected: `{"a":"0"}`,
indentExpected: `
{
"a": "0"
}
`,
data: &struct {
A int `json:"a,string"`
}{},
},
// PtrHeadInt
{
name: "PtrHeadInt",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: &struct {
A int `json:"a"`
}{A: 1},
},
{
name: "PtrHeadIntOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: &struct {
A int `json:"a,omitempty"`
}{A: 1},
},
{
name: "PtrHeadIntString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: &struct {
A int `json:"a,string"`
}{A: 1},
},
// PtrHeadIntPtr
{
name: "PtrHeadIntPtr",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: &struct {
A *int `json:"a"`
}{A: intptr(1)},
},
{
name: "PtrHeadIntPtrOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: &struct {
A *int `json:"a,omitempty"`
}{A: intptr(1)},
},
{
name: "PtrHeadIntPtrString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: &struct {
A *int `json:"a,string"`
}{A: intptr(1)},
},
// PtrHeadIntPtrNil
{
name: "PtrHeadIntPtrNil",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: &struct {
A *int `json:"a"`
}{A: nil},
},
{
name: "PtrHeadIntPtrNilOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: &struct {
A *int `json:"a,omitempty"`
}{A: nil},
},
{
name: "PtrHeadIntPtrNilString",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: &struct {
A *int `json:"a,string"`
}{A: nil},
},
// PtrHeadIntNil
{
name: "PtrHeadIntNil",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a"`
})(nil),
},
{
name: "PtrHeadIntNilOmitEmpty",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a,omitempty"`
})(nil),
},
{
name: "PtrHeadIntNilString",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a,string"`
})(nil),
},
// HeadIntZeroMultiFields
{
name: "HeadIntZeroMultiFields",
expected: `{"a":0,"b":0}`,
indentExpected: `
{
"a": 0,
"b": 0
}
`,
data: struct {
A int `json:"a"`
B int `json:"b"`
}{},
},
{
name: "HeadIntZeroMultiFieldsOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
A int `json:"a,omitempty"`
B int `json:"b,omitempty"`
}{},
},
{
name: "HeadIntZeroMultiFields",
expected: `{"a":"0","b":"0"}`,
indentExpected: `
{
"a": "0",
"b": "0"
}
`,
data: struct {
A int `json:"a,string"`
B int `json:"b,string"`
}{},
},
// HeadIntMultiFields
{
name: "HeadIntMultiFields",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
A int `json:"a"`
B int `json:"b"`
}{A: 1, B: 2},
},
{
name: "HeadIntMultiFieldsOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
A int `json:"a,omitempty"`
B int `json:"b,omitempty"`
}{A: 1, B: 2},
},
{
name: "HeadIntMultiFieldsString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
A int `json:"a,string"`
B int `json:"b,string"`
}{A: 1, B: 2},
},
// HeadIntPtrMultiFields
{
name: "HeadIntPtrMultiFields",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
A *int `json:"a"`
B *int `json:"b"`
}{A: intptr(1), B: intptr(2)},
},
{
name: "HeadIntPtrMultiFieldsOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
}{A: intptr(1), B: intptr(2)},
},
{
name: "HeadIntPtrMultiFieldsString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
}{A: intptr(1), B: intptr(2)},
},
// HeadIntPtrNilMultiFields
{
name: "HeadIntPtrNilMultiFields",
expected: `{"a":null,"b":null}`,
indentExpected: `
{
"a": null,
"b": null
}
`,
data: struct {
A *int `json:"a"`
B *int `json:"b"`
}{A: nil, B: nil},
},
{
name: "HeadIntPtrNilMultiFieldsOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
}{A: nil, B: nil},
},
{
name: "HeadIntPtrNilMultiFieldsString",
expected: `{"a":null,"b":null}`,
indentExpected: `
{
"a": null,
"b": null
}
`,
data: struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
}{A: nil, B: nil},
},
// PtrHeadIntZeroMultiFields
{
name: "PtrHeadIntZeroMultiFields",
expected: `{"a":0,"b":0}`,
indentExpected: `
{
"a": 0,
"b": 0
}
`,
data: &struct {
A int `json:"a"`
B int `json:"b"`
}{},
},
{
name: "PtrHeadIntZeroMultiFieldsOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: &struct {
A int `json:"a,omitempty"`
B int `json:"b,omitempty"`
}{},
},
{
name: "PtrHeadIntZeroMultiFieldsString",
expected: `{"a":"0","b":"0"}`,
indentExpected: `
{
"a": "0",
"b": "0"
}
`,
data: &struct {
A int `json:"a,string"`
B int `json:"b,string"`
}{},
},
// PtrHeadIntMultiFields
{
name: "PtrHeadIntMultiFields",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: &struct {
A int `json:"a"`
B int `json:"b"`
}{A: 1, B: 2},
},
{
name: "PtrHeadIntMultiFieldsOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: &struct {
A int `json:"a,omitempty"`
B int `json:"b,omitempty"`
}{A: 1, B: 2},
},
{
name: "PtrHeadIntMultiFieldsString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: &struct {
A int `json:"a,string"`
B int `json:"b,string"`
}{A: 1, B: 2},
},
// PtrHeadIntPtrMultiFields
{
name: "PtrHeadIntPtrMultiFields",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: &struct {
A *int `json:"a"`
B *int `json:"b"`
}{A: intptr(1), B: intptr(2)},
},
{
name: "PtrHeadIntPtrMultiFieldsOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: &struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
}{A: intptr(1), B: intptr(2)},
},
{
name: "PtrHeadIntPtrMultiFieldsString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: &struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
}{A: intptr(1), B: intptr(2)},
},
// PtrHeadIntPtrNilMultiFields
{
name: "PtrHeadIntPtrNilMultiFields",
expected: `{"a":null,"b":null}`,
indentExpected: `
{
"a": null,
"b": null
}
`,
data: &struct {
A *int `json:"a"`
B *int `json:"b"`
}{A: nil, B: nil},
},
{
name: "PtrHeadIntPtrNilMultiFieldsOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: &struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
}{A: nil, B: nil},
},
{
name: "PtrHeadIntPtrNilMultiFieldsString",
expected: `{"a":null,"b":null}`,
indentExpected: `
{
"a": null,
"b": null
}
`,
data: &struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
}{A: nil, B: nil},
},
// PtrHeadIntNilMultiFields
{
name: "PtrHeadIntNilMultiFields",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a"`
B *int `json:"b"`
})(nil),
},
{
name: "PtrHeadIntNilMultiFieldsOmitEmpty",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
})(nil),
},
{
name: "PtrHeadIntNilMultiFieldsString",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
})(nil),
},
// HeadIntZeroNotRoot
{
name: "HeadIntZeroNotRoot",
expected: `{"A":{"a":0}}`,
indentExpected: `
{
"A": {
"a": 0
}
}
`,
data: struct {
A struct {
A int `json:"a"`
}
}{},
},
{
name: "HeadIntZeroNotRootOmitEmpty",
expected: `{"A":{}}`,
indentExpected: `
{
"A": {}
}
`,
data: struct {
A struct {
A int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadIntZeroNotRootString",
expected: `{"A":{"a":"0"}}`,
indentExpected: `
{
"A": {
"a": "0"
}
}
`,
data: struct {
A struct {
A int `json:"a,string"`
}
}{},
},
// HeadIntNotRoot
{
name: "HeadIntNotRoot",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A struct {
A int `json:"a"`
}
}{A: struct {
A int `json:"a"`
}{A: 1}},
},
{
name: "HeadIntNotRootOmitEmpty",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A struct {
A int `json:"a,omitempty"`
}
}{A: struct {
A int `json:"a,omitempty"`
}{A: 1}},
},
{
name: "HeadIntNotRootString",
expected: `{"A":{"a":"1"}}`,
indentExpected: `
{
"A": {
"a": "1"
}
}
`,
data: struct {
A struct {
A int `json:"a,string"`
}
}{A: struct {
A int `json:"a,string"`
}{A: 1}},
},
// HeadIntPtrNotRoot
{
name: "HeadIntPtrNotRoot",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A struct {
A *int `json:"a"`
}
}{A: struct {
A *int `json:"a"`
}{intptr(1)}},
},
{
name: "HeadIntPtrNotRootOmitEmpty",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A struct {
A *int `json:"a,omitempty"`
}
}{A: struct {
A *int `json:"a,omitempty"`
}{intptr(1)}},
},
{
name: "HeadIntPtrNotRootString",
expected: `{"A":{"a":"1"}}`,
indentExpected: `
{
"A": {
"a": "1"
}
}
`,
data: struct {
A struct {
A *int `json:"a,string"`
}
}{A: struct {
A *int `json:"a,string"`
}{intptr(1)}},
},
// HeadIntPtrNilNotRoot
{
name: "HeadIntPtrNilNotRoot",
expected: `{"A":{"a":null}}`,
indentExpected: `
{
"A": {
"a": null
}
}
`,
data: struct {
A struct {
A *int `json:"a"`
}
}{},
},
{
name: "HeadIntPtrNilNotRootOmitEmpty",
expected: `{"A":{}}`,
indentExpected: `
{
"A": {}
}
`,
data: struct {
A struct {
A *int `json:"a,omitempty"`
}
}{},
},
{
name: "HeadIntPtrNilNotRootString",
expected: `{"A":{"a":null}}`,
indentExpected: `
{
"A": {
"a": null
}
}
`,
data: struct {
A struct {
A *int `json:"a,string"`
}
}{},
},
// PtrHeadIntZeroNotRoot
{
name: "PtrHeadIntZeroNotRoot",
expected: `{"A":{"a":0}}`,
indentExpected: `
{
"A": {
"a": 0
}
}
`,
data: struct {
A *struct {
A int `json:"a"`
}
}{A: new(struct {
A int `json:"a"`
})},
},
{
name: "PtrHeadIntZeroNotRootOmitEmpty",
expected: `{"A":{}}`,
indentExpected: `
{
"A": {}
}
`,
data: struct {
A *struct {
A int `json:"a,omitempty"`
}
}{A: new(struct {
A int `json:"a,omitempty"`
})},
},
{
name: "PtrHeadIntZeroNotRootString",
expected: `{"A":{"a":"0"}}`,
indentExpected: `
{
"A": {
"a": "0"
}
}
`,
data: struct {
A *struct {
A int `json:"a,string"`
}
}{A: new(struct {
A int `json:"a,string"`
})},
},
// PtrHeadIntNotRoot
{
name: "PtrHeadIntNotRoot",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A *struct {
A int `json:"a"`
}
}{A: &(struct {
A int `json:"a"`
}{A: 1})},
},
{
name: "PtrHeadIntNotRootOmitEmpty",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A *struct {
A int `json:"a,omitempty"`
}
}{A: &(struct {
A int `json:"a,omitempty"`
}{A: 1})},
},
{
name: "PtrHeadIntNotRootString",
expected: `{"A":{"a":"1"}}`,
indentExpected: `
{
"A": {
"a": "1"
}
}
`,
data: struct {
A *struct {
A int `json:"a,string"`
}
}{A: &(struct {
A int `json:"a,string"`
}{A: 1})},
},
// PtrHeadIntPtrNotRoot
{
name: "PtrHeadIntPtrNotRoot",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A *struct {
A *int `json:"a"`
}
}{A: &(struct {
A *int `json:"a"`
}{A: intptr(1)})},
},
{
name: "PtrHeadIntPtrNotRootOmitEmpty",
expected: `{"A":{"a":1}}`,
indentExpected: `
{
"A": {
"a": 1
}
}
`,
data: struct {
A *struct {
A *int `json:"a,omitempty"`
}
}{A: &(struct {
A *int `json:"a,omitempty"`
}{A: intptr(1)})},
},
{
name: "PtrHeadIntPtrNotRootString",
expected: `{"A":{"a":"1"}}`,
indentExpected: `
{
"A": {
"a": "1"
}
}
`,
data: struct {
A *struct {
A *int `json:"a,string"`
}
}{A: &(struct {
A *int `json:"a,string"`
}{A: intptr(1)})},
},
// PtrHeadIntPtrNilNotRoot
{
name: "PtrHeadIntPtrNilNotRoot",
expected: `{"A":{"a":null}}`,
indentExpected: `
{
"A": {
"a": null
}
}
`,
data: struct {
A *struct {
A *int `json:"a"`
}
}{A: &(struct {
A *int `json:"a"`
}{A: nil})},
},
{
name: "PtrHeadIntPtrNilNotRootOmitEmpty",
expected: `{"A":{}}`,
indentExpected: `
{
"A": {}
}
`,
data: struct {
A *struct {
A *int `json:"a,omitempty"`
}
}{A: &(struct {
A *int `json:"a,omitempty"`
}{A: nil})},
},
{
name: "PtrHeadIntPtrNilNotRootString",
expected: `{"A":{"a":null}}`,
indentExpected: `
{
"A": {
"a": null
}
}
`,
data: struct {
A *struct {
A *int `json:"a,string"`
}
}{A: &(struct {
A *int `json:"a,string"`
}{A: nil})},
},
// PtrHeadIntNilNotRoot
{
name: "PtrHeadIntNilNotRoot",
expected: `{"A":null}`,
indentExpected: `
{
"A": null
}
`,
data: struct {
A *struct {
A *int `json:"a"`
}
}{A: nil},
},
{
name: "PtrHeadIntNilNotRootOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
A *struct {
A *int `json:"a,omitempty"`
} `json:",omitempty"`
}{A: nil},
},
{
name: "PtrHeadIntNilNotRootString",
expected: `{"A":null}`,
indentExpected: `
{
"A": null
}
`,
data: struct {
A *struct {
A *int `json:"a,string"`
} `json:",string"`
}{A: nil},
},
// HeadIntZeroMultiFieldsNotRoot
{
name: "HeadIntZeroMultiFieldsNotRoot",
expected: `{"A":{"a":0},"B":{"b":0}}`,
indentExpected: `
{
"A": {
"a": 0
},
"B": {
"b": 0
}
}
`,
data: struct {
A struct {
A int `json:"a"`
}
B struct {
B int `json:"b"`
}
}{},
},
{
name: "HeadIntZeroMultiFieldsNotRootOmitEmpty",
expected: `{"A":{},"B":{}}`,
indentExpected: `
{
"A": {},
"B": {}
}
`,
data: struct {
A struct {
A int `json:"a,omitempty"`
}
B struct {
B int `json:"b,omitempty"`
}
}{},
},
{
name: "HeadIntZeroMultiFieldsNotRootString",
expected: `{"A":{"a":"0"},"B":{"b":"0"}}`,
indentExpected: `
{
"A": {
"a": "0"
},
"B": {
"b": "0"
}
}
`,
data: struct {
A struct {
A int `json:"a,string"`
}
B struct {
B int `json:"b,string"`
}
}{},
},
// HeadIntMultiFieldsNotRoot
{
name: "HeadIntMultiFieldsNotRoot",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: struct {
A struct {
A int `json:"a"`
}
B struct {
B int `json:"b"`
}
}{A: struct {
A int `json:"a"`
}{A: 1}, B: struct {
B int `json:"b"`
}{B: 2}},
},
{
name: "HeadIntMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: struct {
A struct {
A int `json:"a,omitempty"`
}
B struct {
B int `json:"b,omitempty"`
}
}{A: struct {
A int `json:"a,omitempty"`
}{A: 1}, B: struct {
B int `json:"b,omitempty"`
}{B: 2}},
},
{
name: "HeadIntMultiFieldsNotRootString",
expected: `{"A":{"a":"1"},"B":{"b":"2"}}`,
indentExpected: `
{
"A": {
"a": "1"
},
"B": {
"b": "2"
}
}
`,
data: struct {
A struct {
A int `json:"a,string"`
}
B struct {
B int `json:"b,string"`
}
}{A: struct {
A int `json:"a,string"`
}{A: 1}, B: struct {
B int `json:"b,string"`
}{B: 2}},
},
// HeadIntPtrMultiFieldsNotRoot
{
name: "HeadIntPtrMultiFieldsNotRoot",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: struct {
A struct {
A *int `json:"a"`
}
B struct {
B *int `json:"b"`
}
}{A: struct {
A *int `json:"a"`
}{A: intptr(1)}, B: struct {
B *int `json:"b"`
}{B: intptr(2)}},
},
{
name: "HeadIntPtrMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: struct {
A struct {
A *int `json:"a,omitempty"`
}
B struct {
B *int `json:"b,omitempty"`
}
}{A: struct {
A *int `json:"a,omitempty"`
}{A: intptr(1)}, B: struct {
B *int `json:"b,omitempty"`
}{B: intptr(2)}},
},
{
name: "HeadIntPtrMultiFieldsNotRootString",
expected: `{"A":{"a":"1"},"B":{"b":"2"}}`,
indentExpected: `
{
"A": {
"a": "1"
},
"B": {
"b": "2"
}
}
`,
data: struct {
A struct {
A *int `json:"a,string"`
}
B struct {
B *int `json:"b,string"`
}
}{A: struct {
A *int `json:"a,string"`
}{A: intptr(1)}, B: struct {
B *int `json:"b,string"`
}{B: intptr(2)}},
},
// HeadIntPtrNilMultiFieldsNotRoot
{
name: "HeadIntPtrNilMultiFieldsNotRoot",
expected: `{"A":{"a":null},"B":{"b":null}}`,
indentExpected: `
{
"A": {
"a": null
},
"B": {
"b": null
}
}
`,
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: "HeadIntPtrNilMultiFieldsNotRootOmitEmpty",
expected: `{"A":{},"B":{}}`,
indentExpected: `
{
"A": {},
"B": {}
}
`,
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: "HeadIntPtrNilMultiFieldsNotRootString",
expected: `{"A":{"a":null},"B":{"b":null}}`,
indentExpected: `
{
"A": {
"a": null
},
"B": {
"b": null
}
}
`,
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}},
},
// PtrHeadIntZeroMultiFieldsNotRoot
{
name: "PtrHeadIntZeroMultiFieldsNotRoot",
expected: `{"A":{"a":0},"B":{"b":0}}`,
indentExpected: `
{
"A": {
"a": 0
},
"B": {
"b": 0
}
}
`,
data: &struct {
A struct {
A int `json:"a"`
}
B struct {
B int `json:"b"`
}
}{},
},
{
name: "PtrHeadIntZeroMultiFieldsNotRootOmitEmpty",
expected: `{"A":{},"B":{}}`,
indentExpected: `
{
"A": {},
"B": {}
}
`,
data: &struct {
A struct {
A int `json:"a,omitempty"`
}
B struct {
B int `json:"b,omitempty"`
}
}{},
},
{
name: "PtrHeadIntZeroMultiFieldsNotRootString",
expected: `{"A":{"a":"0"},"B":{"b":"0"}}`,
indentExpected: `
{
"A": {
"a": "0"
},
"B": {
"b": "0"
}
}
`,
data: &struct {
A struct {
A int `json:"a,string"`
}
B struct {
B int `json:"b,string"`
}
}{},
},
// PtrHeadIntMultiFieldsNotRoot
{
name: "PtrHeadIntMultiFieldsNotRoot",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: &struct {
A struct {
A int `json:"a"`
}
B struct {
B int `json:"b"`
}
}{A: struct {
A int `json:"a"`
}{A: 1}, B: struct {
B int `json:"b"`
}{B: 2}},
},
{
name: "PtrHeadIntMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: &struct {
A struct {
A int `json:"a,omitempty"`
}
B struct {
B int `json:"b,omitempty"`
}
}{A: struct {
A int `json:"a,omitempty"`
}{A: 1}, B: struct {
B int `json:"b,omitempty"`
}{B: 2}},
},
{
name: "PtrHeadIntMultiFieldsNotRootString",
expected: `{"A":{"a":"1"},"B":{"b":"2"}}`,
indentExpected: `
{
"A": {
"a": "1"
},
"B": {
"b": "2"
}
}
`,
data: &struct {
A struct {
A int `json:"a,string"`
}
B struct {
B int `json:"b,string"`
}
}{A: struct {
A int `json:"a,string"`
}{A: 1}, B: struct {
B int `json:"b,string"`
}{B: 2}},
},
// PtrHeadIntPtrMultiFieldsNotRoot
{
name: "PtrHeadIntPtrMultiFieldsNotRoot",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: &struct {
A *struct {
A *int `json:"a"`
}
B *struct {
B *int `json:"b"`
}
}{A: &(struct {
A *int `json:"a"`
}{A: intptr(1)}), B: &(struct {
B *int `json:"b"`
}{B: intptr(2)})},
},
{
name: "PtrHeadIntPtrMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1},"B":{"b":2}}`,
indentExpected: `
{
"A": {
"a": 1
},
"B": {
"b": 2
}
}
`,
data: &struct {
A *struct {
A *int `json:"a,omitempty"`
}
B *struct {
B *int `json:"b,omitempty"`
}
}{A: &(struct {
A *int `json:"a,omitempty"`
}{A: intptr(1)}), B: &(struct {
B *int `json:"b,omitempty"`
}{B: intptr(2)})},
},
{
name: "PtrHeadIntPtrMultiFieldsNotRootString",
expected: `{"A":{"a":"1"},"B":{"b":"2"}}`,
indentExpected: `
{
"A": {
"a": "1"
},
"B": {
"b": "2"
}
}
`,
data: &struct {
A *struct {
A *int `json:"a,string"`
}
B *struct {
B *int `json:"b,string"`
}
}{A: &(struct {
A *int `json:"a,string"`
}{A: intptr(1)}), B: &(struct {
B *int `json:"b,string"`
}{B: intptr(2)})},
},
// PtrHeadIntPtrNilMultiFieldsNotRoot
{
name: "PtrHeadIntPtrNilMultiFieldsNotRoot",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
data: &struct {
A *struct {
A *int `json:"a"`
}
B *struct {
B *int `json:"b"`
}
}{A: nil, B: nil},
},
{
name: "PtrHeadIntPtrNilMultiFieldsNotRootOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
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: "PtrHeadIntPtrNilMultiFieldsNotRootString",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
data: &struct {
A *struct {
A *int `json:"a,string"`
} `json:",string"`
B *struct {
B *int `json:"b,string"`
} `json:",string"`
}{A: nil, B: nil},
},
// PtrHeadIntNilMultiFieldsNotRoot
{
name: "PtrHeadIntNilMultiFieldsNotRoot",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *struct {
A *int `json:"a"`
}
B *struct {
B *int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadIntNilMultiFieldsNotRootOmitEmpty",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *struct {
A *int `json:"a,omitempty"`
}
B *struct {
B *int `json:"b,omitempty"`
}
})(nil),
},
{
name: "PtrHeadIntNilMultiFieldsNotRootString",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *struct {
A *int `json:"a,string"`
}
B *struct {
B *int `json:"b,string"`
}
})(nil),
},
// PtrHeadIntDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntDoubleMultiFieldsNotRoot",
expected: `{"A":{"a":1,"b":2},"B":{"a":3,"b":4}}`,
indentExpected: `
{
"A": {
"a": 1,
"b": 2
},
"B": {
"a": 3,
"b": 4
}
}
`,
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: 1, B: 2}), B: &(struct {
A int `json:"a"`
B int `json:"b"`
}{A: 3, B: 4})},
},
{
name: "PtrHeadIntDoubleMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1,"b":2},"B":{"a":3,"b":4}}`,
indentExpected: `
{
"A": {
"a": 1,
"b": 2
},
"B": {
"a": 3,
"b": 4
}
}
`,
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: 1, B: 2}), B: &(struct {
A int `json:"a,omitempty"`
B int `json:"b,omitempty"`
}{A: 3, B: 4})},
},
{
name: "PtrHeadIntDoubleMultiFieldsNotRootString",
expected: `{"A":{"a":"1","b":"2"},"B":{"a":"3","b":"4"}}`,
indentExpected: `
{
"A": {
"a": "1",
"b": "2"
},
"B": {
"a": "3",
"b": "4"
}
}
`,
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: 1, B: 2}), B: &(struct {
A int `json:"a,string"`
B int `json:"b,string"`
}{A: 3, B: 4})},
},
// PtrHeadIntNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntNilDoubleMultiFieldsNotRoot",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
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: "PtrHeadIntNilDoubleMultiFieldsNotRootOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
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: "PtrHeadIntNilDoubleMultiFieldsNotRootString",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
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},
},
// PtrHeadIntNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntNilDoubleMultiFieldsNotRoot",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *struct {
A int `json:"a"`
B int `json:"b"`
}
B *struct {
A int `json:"a"`
B int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadIntNilDoubleMultiFieldsNotRootOmitEmpty",
expected: `null`,
indentExpected: `
null
`,
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: "PtrHeadIntNilDoubleMultiFieldsNotRootString",
expected: `null`,
indentExpected: `
null
`,
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),
},
// PtrHeadIntPtrDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntPtrDoubleMultiFieldsNotRoot",
expected: `{"A":{"a":1,"b":2},"B":{"a":3,"b":4}}`,
indentExpected: `
{
"A": {
"a": 1,
"b": 2
},
"B": {
"a": 3,
"b": 4
}
}
`,
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: intptr(1), B: intptr(2)}), B: &(struct {
A *int `json:"a"`
B *int `json:"b"`
}{A: intptr(3), B: intptr(4)})},
},
{
name: "PtrHeadIntPtrDoubleMultiFieldsNotRootOmitEmpty",
expected: `{"A":{"a":1,"b":2},"B":{"a":3,"b":4}}`,
indentExpected: `
{
"A": {
"a": 1,
"b": 2
},
"B": {
"a": 3,
"b": 4
}
}
`,
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: intptr(1), B: intptr(2)}), B: &(struct {
A *int `json:"a,omitempty"`
B *int `json:"b,omitempty"`
}{A: intptr(3), B: intptr(4)})},
},
{
name: "PtrHeadIntPtrDoubleMultiFieldsNotRootString",
expected: `{"A":{"a":"1","b":"2"},"B":{"a":"3","b":"4"}}`,
indentExpected: `
{
"A": {
"a": "1",
"b": "2"
},
"B": {
"a": "3",
"b": "4"
}
}
`,
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: intptr(1), B: intptr(2)}), B: &(struct {
A *int `json:"a,string"`
B *int `json:"b,string"`
}{A: intptr(3), B: intptr(4)})},
},
// PtrHeadIntPtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRoot",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
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: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
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: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootString",
expected: `{"A":null,"B":null}`,
indentExpected: `
{
"A": null,
"B": null
}
`,
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},
},
// PtrHeadIntPtrNilDoubleMultiFieldsNotRoot
{
name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRoot",
expected: `null`,
indentExpected: `
null
`,
data: (*struct {
A *struct {
A *int `json:"a"`
B *int `json:"b"`
}
B *struct {
A *int `json:"a"`
B *int `json:"b"`
}
})(nil),
},
{
name: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootOmitEmpty",
expected: `null`,
indentExpected: `
null
`,
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: "PtrHeadIntPtrNilDoubleMultiFieldsNotRootString",
expected: `null`,
indentExpected: `
null
`,
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),
},
// AnonymousHeadInt
{
name: "AnonymousHeadInt",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
structInt
B int `json:"b"`
}{
structInt: structInt{A: 1},
B: 2,
},
},
{
name: "AnonymousHeadIntOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
structIntOmitEmpty
B int `json:"b,omitempty"`
}{
structIntOmitEmpty: structIntOmitEmpty{A: 1},
B: 2,
},
},
{
name: "AnonymousHeadIntString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
structIntString
B int `json:"b,string"`
}{
structIntString: structIntString{A: 1},
B: 2,
},
},
// PtrAnonymousHeadInt
{
name: "PtrAnonymousHeadInt",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
*structInt
B int `json:"b"`
}{
structInt: &structInt{A: 1},
B: 2,
},
},
{
name: "PtrAnonymousHeadIntOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
*structIntOmitEmpty
B int `json:"b,omitempty"`
}{
structIntOmitEmpty: &structIntOmitEmpty{A: 1},
B: 2,
},
},
{
name: "PtrAnonymousHeadIntString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
*structIntString
B int `json:"b,string"`
}{
structIntString: &structIntString{A: 1},
B: 2,
},
},
// NilPtrAnonymousHeadInt
{
name: "NilPtrAnonymousHeadInt",
expected: `{"b":2}`,
indentExpected: `
{
"b": 2
}
`,
data: struct {
*structInt
B int `json:"b"`
}{
structInt: nil,
B: 2,
},
},
{
name: "NilPtrAnonymousHeadIntOmitEmpty",
expected: `{"b":2}`,
indentExpected: `
{
"b": 2
}
`,
data: struct {
*structIntOmitEmpty
B int `json:"b,omitempty"`
}{
structIntOmitEmpty: nil,
B: 2,
},
},
{
name: "NilPtrAnonymousHeadIntString",
expected: `{"b":"2"}`,
indentExpected: `
{
"b": "2"
}
`,
data: struct {
*structIntString
B int `json:"b,string"`
}{
structIntString: nil,
B: 2,
},
},
// AnonymousHeadIntPtr
{
name: "AnonymousHeadIntPtr",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
structIntPtr
B *int `json:"b"`
}{
structIntPtr: structIntPtr{A: intptr(1)},
B: intptr(2),
},
},
{
name: "AnonymousHeadIntPtrOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
structIntPtrOmitEmpty
B *int `json:"b,omitempty"`
}{
structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: intptr(1)},
B: intptr(2),
},
},
{
name: "AnonymousHeadIntPtrString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
structIntPtrString
B *int `json:"b,string"`
}{
structIntPtrString: structIntPtrString{A: intptr(1)},
B: intptr(2),
},
},
// AnonymousHeadIntPtrNil
{
name: "AnonymousHeadIntPtrNil",
expected: `{"a":null,"b":2}`,
indentExpected: `
{
"a": null,
"b": 2
}
`,
data: struct {
structIntPtr
B *int `json:"b"`
}{
structIntPtr: structIntPtr{A: nil},
B: intptr(2),
},
},
{
name: "AnonymousHeadIntPtrNilOmitEmpty",
expected: `{"b":2}`,
indentExpected: `
{
"b": 2
}
`,
data: struct {
structIntPtrOmitEmpty
B *int `json:"b,omitempty"`
}{
structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: nil},
B: intptr(2),
},
},
{
name: "AnonymousHeadIntPtrNilString",
expected: `{"a":null,"b":"2"}`,
indentExpected: `
{
"a": null,
"b": "2"
}
`,
data: struct {
structIntPtrString
B *int `json:"b,string"`
}{
structIntPtrString: structIntPtrString{A: nil},
B: intptr(2),
},
},
// PtrAnonymousHeadIntPtr
{
name: "PtrAnonymousHeadIntPtr",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
*structIntPtr
B *int `json:"b"`
}{
structIntPtr: &structIntPtr{A: intptr(1)},
B: intptr(2),
},
},
{
name: "PtrAnonymousHeadIntPtrOmitEmpty",
expected: `{"a":1,"b":2}`,
indentExpected: `
{
"a": 1,
"b": 2
}
`,
data: struct {
*structIntPtrOmitEmpty
B *int `json:"b,omitempty"`
}{
structIntPtrOmitEmpty: &structIntPtrOmitEmpty{A: intptr(1)},
B: intptr(2),
},
},
{
name: "PtrAnonymousHeadIntPtrString",
expected: `{"a":"1","b":"2"}`,
indentExpected: `
{
"a": "1",
"b": "2"
}
`,
data: struct {
*structIntPtrString
B *int `json:"b,string"`
}{
structIntPtrString: &structIntPtrString{A: intptr(1)},
B: intptr(2),
},
},
// NilPtrAnonymousHeadIntPtr
{
name: "NilPtrAnonymousHeadIntPtr",
expected: `{"b":2}`,
indentExpected: `
{
"b": 2
}
`,
data: struct {
*structIntPtr
B *int `json:"b"`
}{
structIntPtr: nil,
B: intptr(2),
},
},
{
name: "NilPtrAnonymousHeadIntPtrOmitEmpty",
expected: `{"b":2}`,
indentExpected: `
{
"b": 2
}
`,
data: struct {
*structIntPtrOmitEmpty
B *int `json:"b,omitempty"`
}{
structIntPtrOmitEmpty: nil,
B: intptr(2),
},
},
{
name: "NilPtrAnonymousHeadIntPtrString",
expected: `{"b":"2"}`,
indentExpected: `
{
"b": "2"
}
`,
data: struct {
*structIntPtrString
B *int `json:"b,string"`
}{
structIntPtrString: nil,
B: intptr(2),
},
},
// AnonymousHeadIntOnly
{
name: "AnonymousHeadIntOnly",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
structInt
}{
structInt: structInt{A: 1},
},
},
{
name: "AnonymousHeadIntOnlyOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
structIntOmitEmpty
}{
structIntOmitEmpty: structIntOmitEmpty{A: 1},
},
},
{
name: "AnonymousHeadIntOnlyString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
structIntString
}{
structIntString: structIntString{A: 1},
},
},
// PtrAnonymousHeadIntOnly
{
name: "PtrAnonymousHeadIntOnly",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
*structInt
}{
structInt: &structInt{A: 1},
},
},
{
name: "PtrAnonymousHeadIntOnlyOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
*structIntOmitEmpty
}{
structIntOmitEmpty: &structIntOmitEmpty{A: 1},
},
},
{
name: "PtrAnonymousHeadIntOnlyString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
*structIntString
}{
structIntString: &structIntString{A: 1},
},
},
// NilPtrAnonymousHeadIntOnly
{
name: "NilPtrAnonymousHeadIntOnly",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structInt
}{
structInt: nil,
},
},
{
name: "NilPtrAnonymousHeadIntOnlyOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structIntOmitEmpty
}{
structIntOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadIntOnlyString",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structIntString
}{
structIntString: nil,
},
},
// AnonymousHeadIntPtrOnly
{
name: "AnonymousHeadIntPtrOnly",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
structIntPtr
}{
structIntPtr: structIntPtr{A: intptr(1)},
},
},
{
name: "AnonymousHeadIntPtrOnlyOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
structIntPtrOmitEmpty
}{
structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: intptr(1)},
},
},
{
name: "AnonymousHeadIntPtrOnlyString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
structIntPtrString
}{
structIntPtrString: structIntPtrString{A: intptr(1)},
},
},
// AnonymousHeadIntPtrNilOnly
{
name: "AnonymousHeadIntPtrNilOnly",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: struct {
structIntPtr
}{
structIntPtr: structIntPtr{A: nil},
},
},
{
name: "AnonymousHeadIntPtrNilOnlyOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
structIntPtrOmitEmpty
}{
structIntPtrOmitEmpty: structIntPtrOmitEmpty{A: nil},
},
},
{
name: "AnonymousHeadIntPtrNilOnlyString",
expected: `{"a":null}`,
indentExpected: `
{
"a": null
}
`,
data: struct {
structIntPtrString
}{
structIntPtrString: structIntPtrString{A: nil},
},
},
// PtrAnonymousHeadIntPtrOnly
{
name: "PtrAnonymousHeadIntPtrOnly",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
*structIntPtr
}{
structIntPtr: &structIntPtr{A: intptr(1)},
},
},
{
name: "PtrAnonymousHeadIntPtrOnlyOmitEmpty",
expected: `{"a":1}`,
indentExpected: `
{
"a": 1
}
`,
data: struct {
*structIntPtrOmitEmpty
}{
structIntPtrOmitEmpty: &structIntPtrOmitEmpty{A: intptr(1)},
},
},
{
name: "PtrAnonymousHeadIntPtrOnlyString",
expected: `{"a":"1"}`,
indentExpected: `
{
"a": "1"
}
`,
data: struct {
*structIntPtrString
}{
structIntPtrString: &structIntPtrString{A: intptr(1)},
},
},
// NilPtrAnonymousHeadIntPtrOnly
{
name: "NilPtrAnonymousHeadIntPtrOnly",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structIntPtr
}{
structIntPtr: nil,
},
},
{
name: "NilPtrAnonymousHeadIntPtrOnlyOmitEmpty",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structIntPtrOmitEmpty
}{
structIntPtrOmitEmpty: nil,
},
},
{
name: "NilPtrAnonymousHeadIntPtrOnlyString",
expected: `{}`,
indentExpected: `
{}
`,
data: struct {
*structIntPtrString
}{
structIntPtrString: 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:%T): %s: %s", test.name, htmlEscape, test.expected, err)
}
stdresult := encodeByEncodingJSON(test.data, indent, htmlEscape)
if buf.String() != stdresult {
t.Errorf("%s(htmlEscape:%T): doesn't compatible with encoding/json. expected %q but got %q", test.name, htmlEscape, stdresult, buf.String())
}
if indent {
got := "\n" + buf.String()
if got != test.indentExpected {
t.Fatalf("%s(htmlEscape:%T): expected %q but got %q", test.name, htmlEscape, test.indentExpected, got)
}
} else {
if strings.TrimRight(buf.String(), "\n") != test.expected {
t.Fatalf("%s(htmlEscape:%T): expected %q but got %q", test.name, htmlEscape, test.expected, buf.String())
}
}
}
}
}
}