Skip to content

Commit

Permalink
Resolve PR comments
Browse files Browse the repository at this point in the history
  • Loading branch information
heaths committed Jan 31, 2024
1 parent 3df15ac commit 8602882
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 11 deletions.
15 changes: 15 additions & 0 deletions pkg/jsonmerge/array_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,18 @@ func TestArrayMerger_multiplePages(t *testing.T) {

require.NoError(t, merger.Close())
}

func TestArrayMerger_emptyObject(t *testing.T) {
merger := NewArrayMerger()
w := &bytes.Buffer{}

r1 := bytes.NewBufferString(`{}`)
p1 := merger.NewPage(r1, true)
n, err := io.Copy(w, p1)
require.NoError(t, err)
assert.Equal(t, int64(2), n)
assert.NoError(t, p1.Close())
assert.Equal(t, `{}`, w.String())

require.NoError(t, merger.Close())
}
15 changes: 4 additions & 11 deletions pkg/jsonmerge/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,14 @@ type objectMergerPage struct {
buffer bytes.Buffer
}

// Read caches the data in an internal buffer to be merged in Close.
// No data is copied into p so it's not written to stdout.
func (page *objectMergerPage) Read(p []byte) (int, error) {
// Read into a temporary buffer to be merged and written later.
p = make([]byte, len(p))
n, err := page.Reader.Read(p)
if err != nil {
return 0, err
}
if n == 0 {
return 0, io.EOF
}

_, err = page.buffer.Write(p[:n])
_, err := io.CopyN(&page.buffer, page.Reader, int64(len(p)))
return 0, err
}

// Close converts the internal buffer to a JSON object and merges it with the final JSON object.
func (page *objectMergerPage) Close() error {
var src map[string]interface{}

Expand Down
24 changes: 24 additions & 0 deletions pkg/jsonmerge/object_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,27 @@ func TestObjectMerger_multiplePages(t *testing.T) {
require.NoError(t, merger.Close())
assert.JSONEq(t, `{"a":1,"b":3,"c":{"d":4},"arr":["a","b","c","d"]}`, w.String())
}

func TestObjectMerger_invalidJSON(t *testing.T) {
w := &bytes.Buffer{}
merger := NewObjectMerger(w)

r1 := bytes.NewBufferString(`invalid`)
p1 := merger.NewPage(r1, true)
n, err := io.Copy(w, p1)
require.NoError(t, err)
assert.Equal(t, int64(0), n)
assert.Error(t, p1.Close())
}

func TestObjectMerger_array(t *testing.T) {
w := &bytes.Buffer{}
merger := NewObjectMerger(w)

r1 := bytes.NewBufferString(`[]`)
p1 := merger.NewPage(r1, true)
n, err := io.Copy(w, p1)
require.NoError(t, err)
assert.Equal(t, int64(0), n)
assert.Error(t, p1.Close())
}

0 comments on commit 8602882

Please sign in to comment.