Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions encode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2729,3 +2729,70 @@ func TestIssue459(t *testing.T) {
assertErr(t, err)
assertEq(t, "unexpected result", "{}", string(b))
}

func TestIssue576(t *testing.T) {
type ErrOmit struct {
Error string `json:"error,omitempty"`
}
type MyResult struct {
ErrOmit
Data string `json:"data"`
}
type Result struct {
MyResult
}

b, err := json.Marshal(Result{})
assertErr(t, err)
assertEq(t, "unexpected result", `{"data":""}`, string(b))

b, err = json.Marshal(Result{MyResult{Data: "hi"}})
assertErr(t, err)
assertEq(t, "unexpected result", `{"data":"hi"}`, string(b))

b, err = json.Marshal(Result{MyResult{ErrOmit{Error: "boom"}, "hi"}})
assertErr(t, err)
assertEq(t, "unexpected result", `{"error":"boom","data":"hi"}`, string(b))
}

func TestIssue581(t *testing.T) {
type Reason struct {
Code string `json:"reasonCode,omitempty"`
}
type Cov struct {
Type string `json:"type"`
}
type Inner struct {
Cov
R *Reason `json:"reason,omitempty"`
}
type Outer struct {
Inner
}

b, err := json.Marshal(Outer{})
assertErr(t, err)
assertEq(t, "unexpected result", `{"type":""}`, string(b))

b, err = json.Marshal(Outer{Inner{R: &Reason{Code: "x"}}})
assertErr(t, err)
assertEq(t, "unexpected result", `{"type":"","reason":{"reasonCode":"x"}}`, string(b))
}

func TestIssue554(t *testing.T) {
type Son struct {
B string `json:"b"`
C string `json:"c"`
}
type Father struct {
Son
A []string `json:"a,omitempty"`
}
type Grandpa struct {
Father
}

b, err := json.Marshal(&Grandpa{})
assertErr(t, err)
assertEq(t, "unexpected result", `{"b":"","c":""}`, string(b))
}
2 changes: 1 addition & 1 deletion internal/encoder/code.go
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,7 @@ func (c *StructCode) ToAnonymousOpcode(ctx *compileContext) Opcodes {
firstField.End = lastField
}
}
prevField = firstField
prevField = c.lastFieldCode(field, firstField)
codes = codes.Add(fieldCodes...)
}
ctx.structTypeToCodes[uintptr(unsafe.Pointer(c.typ))] = codes
Expand Down