Refactor context control to be a group, not a line
This breaks a dependency cycle between GrDiffLine and GrDiffGroup. The line only needed to need to know about groups, if it was of type CONTEXT_CONTROL. But there was not really a need for the context control to be modeled as a line. Moving this logic from line to group meant to re-write the diff builders a little bit such that context control is now handled a bit more explicitly, which is probably an improvement anyway. This change is driven by the desire to convert GrDiffLine and GrDiffGroup to TypeScript and the author did not see a great solution for how to otherwise break the dependency cycle. Change-Id: Id07b0b9b2c4f5caf7bcc99ac20164dd34c14653d
This commit is contained in:
@@ -80,7 +80,7 @@ suite('gr-diff-builder tests', () => {
|
||||
});
|
||||
|
||||
suite('context control', () => {
|
||||
function createContextLine(options) {
|
||||
function createContextGroups(options) {
|
||||
const offset = options.offset || 0;
|
||||
const numLines = options.count || 10;
|
||||
const lines = [];
|
||||
@@ -92,15 +92,12 @@ suite('gr-diff-builder tests', () => {
|
||||
lines.push(line);
|
||||
}
|
||||
|
||||
return {
|
||||
contextGroups: [new GrDiffGroup(GrDiffGroup.Type.BOTH, lines)],
|
||||
};
|
||||
return [new GrDiffGroup(GrDiffGroup.Type.BOTH, lines)];
|
||||
}
|
||||
|
||||
test('no +10 buttons for 10 or less lines', () => {
|
||||
const contextLine = createContextLine({count: 10});
|
||||
|
||||
const td = builder._createContextControl({}, contextLine);
|
||||
const contextGroups = createContextGroups({count: 10});
|
||||
const td = builder._createContextControl({}, contextGroups);
|
||||
const buttons = td.querySelectorAll('gr-button.showContext');
|
||||
|
||||
assert.equal(buttons.length, 1);
|
||||
@@ -108,10 +105,9 @@ suite('gr-diff-builder tests', () => {
|
||||
});
|
||||
|
||||
test('context control at the top', () => {
|
||||
const contextLine = createContextLine({offset: 0, count: 20});
|
||||
|
||||
const contextGroups = createContextGroups({offset: 0, count: 20});
|
||||
builder._numLinesLeft = 50;
|
||||
const td = builder._createContextControl({}, contextLine);
|
||||
const td = builder._createContextControl({}, contextGroups);
|
||||
const buttons = td.querySelectorAll('gr-button.showContext');
|
||||
|
||||
assert.equal(buttons.length, 2);
|
||||
@@ -120,10 +116,9 @@ suite('gr-diff-builder tests', () => {
|
||||
});
|
||||
|
||||
test('context control in the middle', () => {
|
||||
const contextLine = createContextLine({offset: 10, count: 20});
|
||||
|
||||
const contextGroups = createContextGroups({offset: 10, count: 20});
|
||||
builder._numLinesLeft = 50;
|
||||
const td = builder._createContextControl({}, contextLine);
|
||||
const td = builder._createContextControl({}, contextGroups);
|
||||
const buttons = td.querySelectorAll('gr-button.showContext');
|
||||
|
||||
assert.equal(buttons.length, 3);
|
||||
@@ -133,10 +128,9 @@ suite('gr-diff-builder tests', () => {
|
||||
});
|
||||
|
||||
test('context control at the top', () => {
|
||||
const contextLine = createContextLine({offset: 30, count: 20});
|
||||
|
||||
const contextGroups = createContextGroups({offset: 30, count: 20});
|
||||
builder._numLinesLeft = 50;
|
||||
const td = builder._createContextControl({}, contextLine);
|
||||
const td = builder._createContextControl({}, contextGroups);
|
||||
const buttons = td.querySelectorAll('gr-button.showContext');
|
||||
|
||||
assert.equal(buttons.length, 2);
|
||||
@@ -1203,7 +1197,7 @@ suite('gr-diff-builder tests', () => {
|
||||
line.beforeNumber = 3;
|
||||
line.afterNumber = 5;
|
||||
|
||||
const result = builder._createBlameCell(line);
|
||||
const result = builder._createBlameCell(line.beforeNumber);
|
||||
|
||||
assert.isTrue(getBlameStub.calledWithExactly(3));
|
||||
assert.equal(result.getAttribute('data-line-number'), '3');
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
import {GrDiffBuilder} from './gr-diff-builder.js';
|
||||
import {GrDiffGroup} from '../gr-diff/gr-diff-group';
|
||||
|
||||
/** @constructor */
|
||||
export function GrDiffBuilderSideBySide(diff, prefs, outputEl, layers) {
|
||||
@@ -36,6 +37,12 @@ GrDiffBuilderSideBySide.prototype.buildSectionElement = function(group) {
|
||||
if (group.ignoredWhitespaceOnly) {
|
||||
sectionEl.classList.add('ignoredWhitespaceOnly');
|
||||
}
|
||||
if (group.type === GrDiffGroup.Type.CONTEXT_CONTROL) {
|
||||
sectionEl.appendChild(
|
||||
this._createContextRow(sectionEl, group.contextGroups));
|
||||
return sectionEl;
|
||||
}
|
||||
|
||||
const pairs = group.getSideBySidePairs();
|
||||
for (let i = 0; i < pairs.length; i++) {
|
||||
sectionEl.appendChild(this._createRow(sectionEl, pairs[i].left,
|
||||
@@ -79,7 +86,7 @@ GrDiffBuilderSideBySide.prototype._createRow = function(section, leftLine,
|
||||
row.setAttribute('right-type', rightLine.type);
|
||||
row.tabIndex = -1;
|
||||
|
||||
row.appendChild(this._createBlameCell(leftLine));
|
||||
row.appendChild(this._createBlameCell(leftLine.beforeNumber));
|
||||
|
||||
this._appendPair(section, row, leftLine, leftLine.beforeNumber,
|
||||
GrDiffBuilder.Side.LEFT);
|
||||
@@ -92,13 +99,23 @@ GrDiffBuilderSideBySide.prototype._appendPair = function(section, row, line,
|
||||
lineNumber, side) {
|
||||
const lineNumberEl = this._createLineEl(line, lineNumber, line.type, side);
|
||||
row.appendChild(lineNumberEl);
|
||||
const action = this._createContextControl(section, line);
|
||||
if (action) {
|
||||
row.appendChild(action);
|
||||
} else {
|
||||
const textEl = this._createTextEl(lineNumberEl, line, side);
|
||||
row.appendChild(textEl);
|
||||
}
|
||||
row.appendChild(this._createTextEl(lineNumberEl, line, side));
|
||||
};
|
||||
|
||||
GrDiffBuilderSideBySide.prototype._createContextRow = function(section,
|
||||
contextGroups) {
|
||||
const row = this._createElement('tr');
|
||||
row.classList.add('diff-row', 'side-by-side');
|
||||
row.setAttribute('left-type', GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
row.setAttribute('right-type', GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
row.tabIndex = -1;
|
||||
|
||||
row.appendChild(this._createBlameCell(0));
|
||||
row.appendChild(this._createElement('td', 'contextLineNum'));
|
||||
row.appendChild(this._createContextControl(section, contextGroups));
|
||||
row.appendChild(this._createElement('td', 'contextLineNum'));
|
||||
row.appendChild(this._createContextControl(section, contextGroups));
|
||||
return row;
|
||||
};
|
||||
|
||||
GrDiffBuilderSideBySide.prototype._getNextContentOnSide = function(
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
import {GrDiffLine} from '../gr-diff/gr-diff-line.js';
|
||||
import {GrDiffBuilder} from './gr-diff-builder.js';
|
||||
import {GrDiffGroup} from '../gr-diff/gr-diff-group';
|
||||
|
||||
export function GrDiffBuilderUnified(diff, prefs, outputEl, layers) {
|
||||
GrDiffBuilder.call(this, diff, prefs, outputEl, layers);
|
||||
@@ -35,6 +36,11 @@ GrDiffBuilderUnified.prototype.buildSectionElement = function(group) {
|
||||
if (group.ignoredWhitespaceOnly) {
|
||||
sectionEl.classList.add('ignoredWhitespaceOnly');
|
||||
}
|
||||
if (group.type === GrDiffGroup.Type.CONTEXT_CONTROL) {
|
||||
sectionEl.appendChild(
|
||||
this._createContextRow(sectionEl, group.contextGroups));
|
||||
return sectionEl;
|
||||
}
|
||||
|
||||
for (let i = 0; i < group.lines.length; ++i) {
|
||||
const line = group.lines[i];
|
||||
@@ -76,22 +82,26 @@ GrDiffBuilderUnified.prototype._createRow = function(section, line) {
|
||||
const row = this._createElement('tr', line.type);
|
||||
row.classList.add('diff-row', 'unified');
|
||||
row.tabIndex = -1;
|
||||
row.appendChild(this._createBlameCell(line));
|
||||
|
||||
row.appendChild(this._createBlameCell(line.beforeNumber));
|
||||
let lineNumberEl = this._createLineEl(line, line.beforeNumber,
|
||||
GrDiffLine.Type.REMOVE, 'left');
|
||||
row.appendChild(lineNumberEl);
|
||||
lineNumberEl = this._createLineEl(line, line.afterNumber,
|
||||
GrDiffLine.Type.ADD, 'right');
|
||||
row.appendChild(lineNumberEl);
|
||||
row.appendChild(this._createTextEl(lineNumberEl, line));
|
||||
return row;
|
||||
};
|
||||
|
||||
const action = this._createContextControl(section, line);
|
||||
if (action) {
|
||||
row.appendChild(action);
|
||||
} else {
|
||||
const textEl = this._createTextEl(lineNumberEl, line);
|
||||
row.appendChild(textEl);
|
||||
}
|
||||
GrDiffBuilderUnified.prototype._createContextRow = function(section,
|
||||
contextGroups) {
|
||||
const row = this._createElement('tr', GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
row.classList.add('diff-row', 'unified');
|
||||
row.tabIndex = -1;
|
||||
row.appendChild(this._createBlameCell(0));
|
||||
row.appendChild(this._createElement('td', 'contextLineNum'));
|
||||
row.appendChild(this._createElement('td', 'contextLineNum'));
|
||||
row.appendChild(this._createContextControl(section, contextGroups));
|
||||
return row;
|
||||
};
|
||||
|
||||
|
||||
@@ -240,12 +240,13 @@ GrDiffBuilder.prototype.getSectionsByLineRange = function(
|
||||
group => group.element);
|
||||
};
|
||||
|
||||
GrDiffBuilder.prototype._createContextControl = function(section, line) {
|
||||
if (!line.contextGroups) return null;
|
||||
GrDiffBuilder.prototype._createContextControl = function(
|
||||
section, contextGroups) {
|
||||
if (!contextGroups) return null;
|
||||
|
||||
const leftStart = line.contextGroups[0].lineRange.left.start;
|
||||
const leftStart = contextGroups[0].lineRange.left.start;
|
||||
const leftEnd =
|
||||
line.contextGroups[line.contextGroups.length - 1].lineRange.left.end;
|
||||
contextGroups[contextGroups.length - 1].lineRange.left.end;
|
||||
|
||||
const numLines = leftEnd - leftStart + 1;
|
||||
|
||||
@@ -256,22 +257,24 @@ GrDiffBuilder.prototype._createContextControl = function(section, line) {
|
||||
|
||||
if (showPartialLinks && leftStart > 1) {
|
||||
td.appendChild(this._createContextButton(
|
||||
GrDiffBuilder.ContextButtonType.ABOVE, section, line, numLines));
|
||||
GrDiffBuilder.ContextButtonType.ABOVE, section, contextGroups,
|
||||
numLines));
|
||||
}
|
||||
|
||||
td.appendChild(this._createContextButton(
|
||||
GrDiffBuilder.ContextButtonType.ALL, section, line, numLines));
|
||||
GrDiffBuilder.ContextButtonType.ALL, section, contextGroups, numLines));
|
||||
|
||||
if (showPartialLinks && leftEnd < this._numLinesLeft) {
|
||||
td.appendChild(this._createContextButton(
|
||||
GrDiffBuilder.ContextButtonType.BELOW, section, line, numLines));
|
||||
GrDiffBuilder.ContextButtonType.BELOW, section, contextGroups,
|
||||
numLines));
|
||||
}
|
||||
|
||||
return td;
|
||||
};
|
||||
|
||||
GrDiffBuilder.prototype._createContextButton = function(type, section, line,
|
||||
numLines) {
|
||||
GrDiffBuilder.prototype._createContextButton = function(
|
||||
type, section, contextGroups, numLines) {
|
||||
const context = PARTIAL_CONTEXT_AMOUNT;
|
||||
|
||||
const button = this._createElement('gr-button', 'showContext');
|
||||
@@ -287,15 +290,15 @@ GrDiffBuilder.prototype._createContextButton = function(type, section, line,
|
||||
|
||||
text = 'Show ' + numLines + ' common line';
|
||||
if (numLines > 1) { text += 's'; }
|
||||
groups.push(...line.contextGroups);
|
||||
groups.push(...contextGroups);
|
||||
} else if (type === GrDiffBuilder.ContextButtonType.ABOVE) {
|
||||
text = '+' + context + ' above';
|
||||
groups = GrDiffGroup.hideInContextControl(line.contextGroups,
|
||||
context, numLines);
|
||||
groups = GrDiffGroup.hideInContextControl(
|
||||
contextGroups, context, numLines);
|
||||
} else if (type === GrDiffBuilder.ContextButtonType.BELOW) {
|
||||
text = '+' + context + ' below';
|
||||
groups = GrDiffGroup.hideInContextControl(line.contextGroups,
|
||||
0, numLines - context);
|
||||
groups = GrDiffGroup.hideInContextControl(
|
||||
contextGroups, 0, numLines - context);
|
||||
}
|
||||
const textSpan = this._createElement('span', 'showContext');
|
||||
dom(textSpan).textContent = text;
|
||||
@@ -319,11 +322,6 @@ GrDiffBuilder.prototype._createLineEl = function(
|
||||
if (line.type === GrDiffLine.Type.BLANK) {
|
||||
return td;
|
||||
}
|
||||
if (line.type === GrDiffLine.Type.CONTEXT_CONTROL) {
|
||||
td.classList.add('contextLineNum');
|
||||
return td;
|
||||
}
|
||||
|
||||
if (line.type === GrDiffLine.Type.BOTH || line.type === type) {
|
||||
// Both td and button need a number of classes/attributes for various
|
||||
// selectors to work.
|
||||
@@ -638,14 +636,14 @@ ${commit.commit_msg}`;
|
||||
* Create a blame cell for the given base line. Blame information will be
|
||||
* included in the cell if available.
|
||||
*
|
||||
* @param {GrDiffLine} line
|
||||
* @param {number} lineNumber
|
||||
* @return {HTMLTableDataCellElement}
|
||||
*/
|
||||
GrDiffBuilder.prototype._createBlameCell = function(line) {
|
||||
GrDiffBuilder.prototype._createBlameCell = function(lineNumber) {
|
||||
const blameTd = this._createElement('td', 'blame');
|
||||
blameTd.setAttribute('data-line-number', line.beforeNumber);
|
||||
if (line.beforeNumber) {
|
||||
const content = this._getBlameForBaseLine(line.beforeNumber);
|
||||
blameTd.setAttribute('data-line-number', lineNumber);
|
||||
if (lineNumber) {
|
||||
const content = this._getBlameForBaseLine(lineNumber);
|
||||
if (content) {
|
||||
blameTd.appendChild(content);
|
||||
}
|
||||
|
||||
@@ -156,9 +156,9 @@ suite('gr-diff-processor tests', () => {
|
||||
// group[0] is the file group
|
||||
|
||||
assert.equal(groups[1].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.instanceOf(groups[1].lines[0].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[1].lines[0].contextGroups[0].lines.length, 90);
|
||||
for (const l of groups[1].lines[0].contextGroups[0].lines) {
|
||||
assert.instanceOf(groups[1].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[1].contextGroups[0].lines.length, 90);
|
||||
for (const l of groups[1].contextGroups[0].lines) {
|
||||
assert.equal(l.text, 'all work and no play make jack a dull boy');
|
||||
}
|
||||
|
||||
@@ -213,9 +213,9 @@ suite('gr-diff-processor tests', () => {
|
||||
}
|
||||
|
||||
assert.equal(groups[3].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.instanceOf(groups[3].lines[0].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[3].lines[0].contextGroups[0].lines.length, 90);
|
||||
for (const l of groups[3].lines[0].contextGroups[0].lines) {
|
||||
assert.instanceOf(groups[3].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[3].contextGroups[0].lines.length, 90);
|
||||
for (const l of groups[3].contextGroups[0].lines) {
|
||||
assert.equal(
|
||||
l.text, 'all work and no play make jill a dull girl');
|
||||
}
|
||||
@@ -323,26 +323,26 @@ suite('gr-diff-processor tests', () => {
|
||||
}
|
||||
|
||||
assert.equal(groups[6].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.equal(groups[6].lines[0].contextGroups.length, 2);
|
||||
assert.equal(groups[6].contextGroups.length, 2);
|
||||
|
||||
assert.equal(groups[6].lines[0].contextGroups[0].lines.length, 4);
|
||||
assert.equal(groups[6].lines[0].contextGroups[0].removes.length, 2);
|
||||
assert.equal(groups[6].lines[0].contextGroups[0].adds.length, 2);
|
||||
for (const l of groups[6].lines[0].contextGroups[0].removes) {
|
||||
assert.equal(groups[6].contextGroups[0].lines.length, 4);
|
||||
assert.equal(groups[6].contextGroups[0].removes.length, 2);
|
||||
assert.equal(groups[6].contextGroups[0].adds.length, 2);
|
||||
for (const l of groups[6].contextGroups[0].removes) {
|
||||
assert.equal(
|
||||
l.text, 'all work and no play make jill a dull girl');
|
||||
}
|
||||
for (const l of groups[6].lines[0].contextGroups[0].adds) {
|
||||
for (const l of groups[6].contextGroups[0].adds) {
|
||||
assert.equal(
|
||||
l.text, ' all work and no play make jill a dull girl');
|
||||
}
|
||||
|
||||
// The final chunk is completely hidden
|
||||
assert.equal(
|
||||
groups[6].lines[0].contextGroups[1].type,
|
||||
groups[6].contextGroups[1].type,
|
||||
GrDiffGroup.Type.BOTH);
|
||||
assert.equal(groups[6].lines[0].contextGroups[1].lines.length, 3);
|
||||
for (const l of groups[6].lines[0].contextGroups[1].lines) {
|
||||
assert.equal(groups[6].contextGroups[1].lines.length, 3);
|
||||
for (const l of groups[6].contextGroups[1].lines) {
|
||||
assert.equal(
|
||||
l.text, 'all work and no play make jill a dull girl');
|
||||
}
|
||||
@@ -372,9 +372,9 @@ suite('gr-diff-processor tests', () => {
|
||||
}
|
||||
|
||||
assert.equal(groups[3].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.instanceOf(groups[3].lines[0].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[3].lines[0].contextGroups[0].lines.length, 80);
|
||||
for (const l of groups[3].lines[0].contextGroups[0].lines) {
|
||||
assert.instanceOf(groups[3].contextGroups[0], GrDiffGroup);
|
||||
assert.equal(groups[3].contextGroups[0].lines.length, 80);
|
||||
for (const l of groups[3].contextGroups[0].lines) {
|
||||
assert.equal(
|
||||
l.text, 'all work and no play make jill a dull girl');
|
||||
}
|
||||
@@ -680,11 +680,10 @@ suite('gr-diff-processor tests', () => {
|
||||
// The first and last are uncollapsed context, whereas the middle has
|
||||
// a single context-control line.
|
||||
assert.equal(result.groups[0].lines.length, element.context);
|
||||
assert.equal(result.groups[1].lines.length, 1);
|
||||
assert.equal(result.groups[2].lines.length, element.context);
|
||||
|
||||
// The collapsed group has the hidden lines as its context group.
|
||||
assert.equal(result.groups[1].lines[0].contextGroups[0].lines.length,
|
||||
assert.equal(result.groups[1].contextGroups[0].lines.length,
|
||||
expectedCollapseSize);
|
||||
});
|
||||
|
||||
@@ -705,11 +704,10 @@ suite('gr-diff-processor tests', () => {
|
||||
assert.equal(result.groups.length, 2, 'Results in two groups');
|
||||
|
||||
// Only the first group is collapsed.
|
||||
assert.equal(result.groups[0].lines.length, 1);
|
||||
assert.equal(result.groups[1].lines.length, element.context);
|
||||
|
||||
// The collapsed group has the hidden lines as its context group.
|
||||
assert.equal(result.groups[0].lines[0].contextGroups[0].lines.length,
|
||||
assert.equal(result.groups[0].contextGroups[0].lines.length,
|
||||
expectedCollapseSize);
|
||||
});
|
||||
|
||||
@@ -778,9 +776,8 @@ suite('gr-diff-processor tests', () => {
|
||||
// 2) The context before the key location.
|
||||
// The key location is not processed in this call to _processNext
|
||||
assert.equal(result.groups.length, 2);
|
||||
assert.equal(result.groups[0].lines.length, 1);
|
||||
// The collapsed group has the hidden lines as its context group.
|
||||
assert.equal(result.groups[0].lines[0].contextGroups[0].lines.length,
|
||||
assert.equal(result.groups[0].contextGroups[0].lines.length,
|
||||
rows.length - element.context);
|
||||
assert.equal(result.groups[1].lines.length, element.context);
|
||||
});
|
||||
@@ -807,9 +804,8 @@ suite('gr-diff-processor tests', () => {
|
||||
// key location.
|
||||
assert.equal(result.groups.length, 2);
|
||||
assert.equal(result.groups[0].lines.length, element.context);
|
||||
assert.equal(result.groups[1].lines.length, 1);
|
||||
// The collapsed group has the hidden lines as its context group.
|
||||
assert.equal(result.groups[1].lines[0].contextGroups[0].lines.length,
|
||||
assert.equal(result.groups[1].contextGroups[0].lines.length,
|
||||
rows.length - element.context);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -53,6 +53,8 @@ export function GrDiffGroup(type, opt_lines) {
|
||||
this.adds = [];
|
||||
/** @type {!Array<!GrDiffLine>} */
|
||||
this.removes = [];
|
||||
/** @type {?Array<Object>} ?Array<!GrDiffGroup> */
|
||||
this.contextGroups = null;
|
||||
|
||||
/** Both start and end line are inclusive. */
|
||||
this.lineRange = {
|
||||
@@ -126,10 +128,9 @@ GrDiffGroup.hideInContextControl = function(groups, hiddenStart, hiddenEnd) {
|
||||
|
||||
const result = [...before];
|
||||
if (hidden.length) {
|
||||
const ctxLine = new GrDiffLine(GrDiffLine.Type.CONTEXT_CONTROL);
|
||||
ctxLine.contextGroups = hidden;
|
||||
const ctxGroup = new GrDiffGroup(
|
||||
GrDiffGroup.Type.CONTEXT_CONTROL, [ctxLine]);
|
||||
GrDiffGroup.Type.CONTEXT_CONTROL, []);
|
||||
ctxGroup.contextGroups = hidden;
|
||||
result.push(ctxGroup);
|
||||
}
|
||||
result.push(...after);
|
||||
|
||||
@@ -138,13 +138,8 @@ suite('gr-diff-group tests', () => {
|
||||
assert.equal(collapsedGroups[0], groups[0]);
|
||||
|
||||
assert.equal(collapsedGroups[1].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.equal(collapsedGroups[1].lines.length, 1);
|
||||
assert.equal(
|
||||
collapsedGroups[1].lines[0].type, GrDiffLine.Type.CONTEXT_CONTROL);
|
||||
assert.equal(
|
||||
collapsedGroups[1].lines[0].contextGroups.length, 1);
|
||||
assert.equal(
|
||||
collapsedGroups[1].lines[0].contextGroups[0], groups[1]);
|
||||
assert.equal(collapsedGroups[1].contextGroups.length, 1);
|
||||
assert.equal(collapsedGroups[1].contextGroups[0], groups[1]);
|
||||
|
||||
assert.equal(collapsedGroups[2], groups[2]);
|
||||
});
|
||||
@@ -159,27 +154,23 @@ suite('gr-diff-group tests', () => {
|
||||
assert.deepEqual(collapsedGroups[1].removes, [groups[1].removes[0]]);
|
||||
|
||||
assert.equal(collapsedGroups[2].type, GrDiffGroup.Type.CONTEXT_CONTROL);
|
||||
assert.equal(collapsedGroups[2].lines.length, 1);
|
||||
assert.equal(
|
||||
collapsedGroups[2].lines[0].type, GrDiffLine.Type.CONTEXT_CONTROL);
|
||||
assert.equal(
|
||||
collapsedGroups[2].lines[0].contextGroups.length, 2);
|
||||
assert.equal(collapsedGroups[2].contextGroups.length, 2);
|
||||
|
||||
assert.equal(
|
||||
collapsedGroups[2].lines[0].contextGroups[0].type,
|
||||
collapsedGroups[2].contextGroups[0].type,
|
||||
GrDiffGroup.Type.DELTA);
|
||||
assert.deepEqual(
|
||||
collapsedGroups[2].lines[0].contextGroups[0].adds,
|
||||
collapsedGroups[2].contextGroups[0].adds,
|
||||
groups[1].adds.slice(1));
|
||||
assert.deepEqual(
|
||||
collapsedGroups[2].lines[0].contextGroups[0].removes,
|
||||
collapsedGroups[2].contextGroups[0].removes,
|
||||
groups[1].removes.slice(1));
|
||||
|
||||
assert.equal(
|
||||
collapsedGroups[2].lines[0].contextGroups[1].type,
|
||||
collapsedGroups[2].contextGroups[1].type,
|
||||
GrDiffGroup.Type.BOTH);
|
||||
assert.deepEqual(
|
||||
collapsedGroups[2].lines[0].contextGroups[1].lines,
|
||||
collapsedGroups[2].contextGroups[1].lines,
|
||||
[groups[2].lines[0]]);
|
||||
|
||||
assert.equal(collapsedGroups[3].type, GrDiffGroup.Type.BOTH);
|
||||
|
||||
@@ -36,9 +36,6 @@ export function GrDiffLine(type, opt_beforeLine, opt_afterLine) {
|
||||
/** @type {!Array<GrDiffLine.Highlights>} */
|
||||
this.highlights = [];
|
||||
|
||||
/** @type {?Array<Object>} ?Array<!GrDiffGroup> */
|
||||
this.contextGroups = null;
|
||||
|
||||
this.text = '';
|
||||
}
|
||||
|
||||
@@ -47,7 +44,6 @@ GrDiffLine.Type = {
|
||||
ADD: 'add',
|
||||
BOTH: 'both',
|
||||
BLANK: 'blank',
|
||||
CONTEXT_CONTROL: 'contextControl',
|
||||
REMOVE: 'remove',
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user