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()}`),