Take empty arrays into account to break down chunks Previous implementation assumed 'a' and 'b' to be undefined, but not empty array. Change-Id: I7a339d839b0645612f666de973f5563f0c0d6af0
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts index c3d758c..5a432dd 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor.ts
@@ -679,15 +679,18 @@ */ _breakdownChunk(chunk: DiffContent): DiffContent[] { let key: 'a' | 'b' | 'ab' | null = null; - if (chunk.a && !chunk.b) { + const {a, b, ab, move_details} = chunk; + if (a?.length && !b?.length) { key = 'a'; - } else if (chunk.b && !chunk.a) { + } else if (b?.length && !a?.length) { key = 'b'; - } else if (chunk.ab) { + } else if (ab?.length) { key = 'ab'; } - if (!key) { + // Move chunks should not be divided because of move label + // positioned in the top of the chunk + if (!key || move_details) { return [chunk]; }
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js index 5496b62..0c3c9bf 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-processor/gr-diff-processor_test.js
@@ -590,6 +590,43 @@ assert.deepEqual(result[1].ab, content[0].ab.slice(120)); }); + test('breaks down added chunks', () => { + const size = 120 * 2 + 5; + const content = _.times(size, () => `${Math.random()}`); + element.context = 5; + const splitContent = element._splitLargeChunks([{a: [], b: content}]) + .map(r => r.b); + assert.equal(splitContent.length, 3); + assert.deepEqual(splitContent[0], content.slice(0, 5)); + assert.deepEqual(splitContent[1], content.slice(5, 125)); + assert.deepEqual(splitContent[2], content.slice(125)); + }); + + test('breaks down removed chunks', () => { + const size = 120 * 2 + 5; + const content = _.times(size, () => `${Math.random()}`); + element.context = 5; + const splitContent = element._splitLargeChunks([{a: content, b: []}]) + .map(r => r.a); + assert.equal(splitContent.length, 3); + assert.deepEqual(splitContent[0], content.slice(0, 5)); + assert.deepEqual(splitContent[1], content.slice(5, 125)); + assert.deepEqual(splitContent[2], content.slice(125)); + }); + + test('does not break down moved chunks', () => { + const size = 120 * 2 + 5; + const content = _.times(size, () => `${Math.random()}`); + element.context = 5; + const splitContent = element._splitLargeChunks([{ + a: content, + b: [], + move_details: {changed: false}, + }]).map(r => r.a); + assert.equal(splitContent.length, 1); + assert.deepEqual(splitContent[0], content); + }); + test('does not break-down common chunks w/ context', () => { const content = [{ ab: _.times(75, () => `${Math.random()}`),