Fix MarshalJSON of array

Signed-off-by: Tamal Saha <tamal@appscode.com>
This commit is contained in:
Tamal Saha
2020-05-01 16:24:40 -07:00
parent 0a8d367633
commit 802d79ae32
2 changed files with 42 additions and 13 deletions

View File

@@ -688,11 +688,18 @@ func (rn *RNode) MarshalJSON() ([]byte, error) {
return nil, err
}
if rn.YNode().Kind == SequenceNode {
var a []interface{}
if err := Unmarshal([]byte(s), &a); err != nil {
return nil, err
}
return json.Marshal(a)
}
m := map[string]interface{}{}
if err := Unmarshal([]byte(s), &m); err != nil {
return nil, err
}
return json.Marshal(m)
}

View File

@@ -105,21 +105,43 @@ metadata:
}
func TestRNode_MarshalJSON(t *testing.T) {
instance, err := Parse(`
tests := []struct {
name string
ydoc string
want string
}{
{
name: "object",
ydoc: `
hello: world
`)
if !assert.NoError(t, err) {
t.FailNow()
`,
want: `{"hello":"world"}`,
},
{
name: "array",
ydoc: `
- name: s1
- name: s2
`,
want: `[{"name":"s1"},{"name":"s2"}]`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
instance, err := Parse(tt.ydoc)
if !assert.NoError(t, err) {
t.FailNow()
}
actual, err := instance.MarshalJSON()
if !assert.NoError(t, err) {
t.FailNow()
}
actual, err := instance.MarshalJSON()
if !assert.NoError(t, err) {
t.FailNow()
}
expected := `{"hello":"world"}`
if !assert.Equal(t,
strings.TrimSpace(expected), strings.TrimSpace(string(actual))) {
t.FailNow()
if !assert.Equal(t,
strings.TrimSpace(tt.want), strings.TrimSpace(string(actual))) {
t.FailNow()
}
})
}
}