diff --git a/merge.go b/merge.go index 7c5fadc..3aa18c7 100644 --- a/merge.go +++ b/merge.go @@ -79,8 +79,8 @@ func pruneAryNulls(ary *partialArray) *partialArray { for _, v := range *ary { if v != nil { pruneNulls(v) - newAry = append(newAry, v) } + newAry = append(newAry, v) } *ary = newAry diff --git a/merge_test.go b/merge_test.go index 0acc17d..e739bab 100644 --- a/merge_test.go +++ b/merge_test.go @@ -53,6 +53,31 @@ func TestMergePatchNilDoc(t *testing.T) { } } +type arrayCases struct { + original, patch, res string +} + +func TestMergePatchNilArray(t *testing.T) { + + cases := []arrayCases { + {`{"a": [ {"b":"c"} ] }`, `{"a": [1]}`, `{"a": [1]}`}, + {`{"a": [ {"b":"c"} ] }`, `{"a": [null, 1]}`, `{"a": [null, 1]}`}, + {`["a",null]`, `[null]`, `[null]`}, + {`["a"]`, `[null]`, `[null]`}, + {`["a", "b"]`, `["a", null]`, `["a", null]`}, + {`{"a":["b"]}`, `{"a": ["b", null]}`, `{"a":["b", null]}`}, + {`{"a":[]}`, `{"a": ["b", null, null, "a"]}`, `{"a":["b", null, null, "a"]}`}, + } + + for _, c := range cases { + act := mergePatch(c.original, c.patch) + + if !compareJSON(c.res, act) { + t.Errorf("null values not preserved in array") + } + } +} + func TestMergePatchRecursesIntoObjects(t *testing.T) { doc := `{ "person": { "title": "hello", "age": 18 } }` pat := `{ "person": { "title": "goodbye" } }`