Make gr-diff.reload() listen for render event
Before, it used the promise returned by the gr-diff-builder.render() instead. Using the event is a prerequisite from moving away from explicit render calls. This comes with a small behavior change: Before, gr-diff would not dispatch a `render` event when no rendering happened because prefs were unset or the diff was too large and no safetyBypass was used. Now it does because we still want reload to resolve the promise it returns. This should not break anything though because currently only tests listen for this event. Bug: Issue 9623 Change-Id: I15dd07d706c21cb441f2bc597391e4620c9c12fc
This commit is contained in:
@@ -262,7 +262,14 @@
|
||||
}
|
||||
this.filesWeblinks = this._getFilesWeblinks(diff);
|
||||
this._diff = diff;
|
||||
return this._renderDiffTable();
|
||||
return new Promise(resolve => {
|
||||
const callback = () => {
|
||||
resolve();
|
||||
this.removeEventListener('render', callback);
|
||||
};
|
||||
this.addEventListener('render', callback);
|
||||
this._renderDiffTable();
|
||||
});
|
||||
})
|
||||
.catch(err => {
|
||||
console.warn('Error encountered loading diff:', err);
|
||||
@@ -715,16 +722,20 @@
|
||||
},
|
||||
|
||||
_renderDiffTable() {
|
||||
if (!this.prefs) { return Promise.resolve(); }
|
||||
if (!this.prefs) {
|
||||
this.dispatchEvent(new CustomEvent('render', {bubbles: true}));
|
||||
return;
|
||||
}
|
||||
if (this.prefs.context === -1 &&
|
||||
this._diffLength(this._diff) >= LARGE_DIFF_THRESHOLD_LINES &&
|
||||
this._safetyBypass === null) {
|
||||
this._showWarning = true;
|
||||
return Promise.resolve();
|
||||
this.dispatchEvent(new CustomEvent('render', {bubbles: true}));
|
||||
return;
|
||||
}
|
||||
|
||||
this._showWarning = false;
|
||||
return this.$.diffBuilder.render(this.comments, this._getBypassPrefs());
|
||||
this.$.diffBuilder.render(this.comments, this._getBypassPrefs());
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -1120,39 +1120,49 @@ limitations under the License.
|
||||
setup(() => {
|
||||
element = fixture('basic');
|
||||
renderStub = sandbox.stub(element.$.diffBuilder, 'render',
|
||||
() => Promise.resolve());
|
||||
() => {
|
||||
Promise.resolve();
|
||||
element.$.diffBuilder.dispatchEvent(
|
||||
new CustomEvent('render', {bubbles: true}));
|
||||
});
|
||||
const mock = document.createElement('mock-diff-response');
|
||||
element._diff = mock.diffResponse;
|
||||
element.comments = {left: [], right: []};
|
||||
element.noRenderOnPrefsChange = true;
|
||||
});
|
||||
|
||||
test('lage render w/ context = 10', () => {
|
||||
test('large render w/ context = 10', done => {
|
||||
element.prefs = {context: 10};
|
||||
sandbox.stub(element, '_diffLength', () => 10000);
|
||||
return element._renderDiffTable().then(() => {
|
||||
element.addEventListener('render', () => {
|
||||
assert.isTrue(renderStub.called);
|
||||
assert.isFalse(element._showWarning);
|
||||
done();
|
||||
});
|
||||
element._renderDiffTable();
|
||||
});
|
||||
|
||||
test('lage render w/ whole file and bypass', () => {
|
||||
test('large render w/ whole file and bypass', done => {
|
||||
element.prefs = {context: -1};
|
||||
element._safetyBypass = 10;
|
||||
sandbox.stub(element, '_diffLength', () => 10000);
|
||||
return element._renderDiffTable().then(() => {
|
||||
element.addEventListener('render', () => {
|
||||
assert.isTrue(renderStub.called);
|
||||
assert.isFalse(element._showWarning);
|
||||
done();
|
||||
});
|
||||
element._renderDiffTable();
|
||||
});
|
||||
|
||||
test('lage render w/ whole file and no bypass', () => {
|
||||
test('large render w/ whole file and no bypass', done => {
|
||||
element.prefs = {context: -1};
|
||||
sandbox.stub(element, '_diffLength', () => 10000);
|
||||
return element._renderDiffTable().then(() => {
|
||||
element.addEventListener('render', () => {
|
||||
assert.isFalse(renderStub.called);
|
||||
assert.isTrue(element._showWarning);
|
||||
done();
|
||||
});
|
||||
element._renderDiffTable();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user