Add coverageRangeChanged to notify all related listeners
Change-Id: Ie3f72165ab2e7d43c3506b973f4843cd87ece006
This commit is contained in:
@@ -312,22 +312,7 @@
|
||||
}
|
||||
|
||||
this._coverageRanges = [];
|
||||
const {changeNum, path, patchRange: {basePatchNum, patchNum}} = this;
|
||||
this.$.jsAPI.getCoverageRanges(
|
||||
changeNum, path, basePatchNum, patchNum
|
||||
).
|
||||
then(coverageRanges => {
|
||||
if (changeNum !== this.changeNum ||
|
||||
path !== this.path ||
|
||||
basePatchNum !== this.patchRange.basePatchNum ||
|
||||
patchNum !== this.patchRange.patchNum) {
|
||||
return;
|
||||
}
|
||||
this._coverageRanges = coverageRanges;
|
||||
}).catch(err => {
|
||||
console.warn('Loading coverage ranges failed: ', err);
|
||||
});
|
||||
|
||||
this._getCoverageData();
|
||||
const diffRequest = this._getDiff()
|
||||
.then(diff => {
|
||||
this._loadedWhitespaceLevel = whitespaceLevel;
|
||||
@@ -346,7 +331,7 @@
|
||||
return this._loadDiffAssets(diff);
|
||||
});
|
||||
|
||||
// Not waiting for getCoverageRanges intentionally as
|
||||
// Not waiting for coverage ranges intentionally as
|
||||
// plugin loading should not block the content rendering
|
||||
return Promise.all([diffRequest, assetRequest])
|
||||
.then(results => {
|
||||
@@ -387,6 +372,49 @@
|
||||
.then(() => { this._loading = false; });
|
||||
}
|
||||
|
||||
_getCoverageData() {
|
||||
const {changeNum, path, patchRange: {basePatchNum, patchNum}} = this;
|
||||
this.$.jsAPI.getCoverageAnnotationApi().
|
||||
then(coverageAnnotationApi => {
|
||||
if (!coverageAnnotationApi) return;
|
||||
const provider = coverageAnnotationApi.getCoverageProvider();
|
||||
return provider(changeNum, path, basePatchNum, patchNum)
|
||||
.then(coverageRanges => {
|
||||
if (!coverageRanges ||
|
||||
changeNum !== this.changeNum ||
|
||||
path !== this.path ||
|
||||
basePatchNum !== this.patchRange.basePatchNum ||
|
||||
patchNum !== this.patchRange.patchNum) {
|
||||
return;
|
||||
}
|
||||
|
||||
const existingCoverageRanges = this._coverageRanges;
|
||||
this._coverageRanges = coverageRanges;
|
||||
|
||||
// Notify with existing coverage ranges
|
||||
// in case there is some existing coverage data that needs to be removed
|
||||
existingCoverageRanges.forEach(range => {
|
||||
coverageAnnotationApi.notify(
|
||||
path,
|
||||
range.code_range.start_line,
|
||||
range.code_range.end_line,
|
||||
range.side);
|
||||
});
|
||||
|
||||
// Notify with new coverage data
|
||||
coverageRanges.forEach(range => {
|
||||
coverageAnnotationApi.notify(
|
||||
path,
|
||||
range.code_range.start_line,
|
||||
range.code_range.end_line,
|
||||
range.side);
|
||||
});
|
||||
});
|
||||
}).catch(err => {
|
||||
console.warn('Loading coverage ranges failed: ', err);
|
||||
});
|
||||
}
|
||||
|
||||
_getFilesWeblinks(diff) {
|
||||
if (!this.commitRange) {
|
||||
return {};
|
||||
|
@@ -1429,5 +1429,69 @@ limitations under the License.
|
||||
assert.isFalse(element.$.syntaxLayer.enabled);
|
||||
});
|
||||
});
|
||||
|
||||
suite('coverage layer', () => {
|
||||
let notifyStub;
|
||||
setup(() => {
|
||||
notifyStub = sinon.stub();
|
||||
stub('gr-js-api-interface', {
|
||||
getCoverageAnnotationApi() {
|
||||
return Promise.resolve({
|
||||
notify: notifyStub,
|
||||
getCoverageProvider() {
|
||||
return () => Promise.resolve([
|
||||
{
|
||||
type: 'COVERED',
|
||||
side: 'right',
|
||||
code_range: {
|
||||
start_line: 1,
|
||||
end_line: 2,
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'NOT_COVERED',
|
||||
side: 'right',
|
||||
code_range: {
|
||||
start_line: 3,
|
||||
end_line: 4,
|
||||
},
|
||||
},
|
||||
]);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
element = fixture('basic');
|
||||
const prefs = {
|
||||
line_length: 10,
|
||||
show_tabs: true,
|
||||
tab_size: 4,
|
||||
context: -1,
|
||||
};
|
||||
element.diff = {
|
||||
content: [{
|
||||
a: ['foo'],
|
||||
}],
|
||||
};
|
||||
element.patchRange = {};
|
||||
element.prefs = prefs;
|
||||
});
|
||||
|
||||
test('getCoverageAnnotationApi should be called', done => {
|
||||
element.reload();
|
||||
flush(() => {
|
||||
assert.isTrue(element.$.jsAPI.getCoverageAnnotationApi.calledOnce);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('coverageRangeChanged should be called', done => {
|
||||
element.reload();
|
||||
flush(() => {
|
||||
assert.equal(notifyStub.callCount, 2);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@@ -253,44 +253,15 @@
|
||||
* Retrieves coverage data possibly provided by a plugin.
|
||||
*
|
||||
* Will wait for plugins to be loaded. If multiple plugins offer a coverage
|
||||
* provider, the first one is used. If no plugin offers a coverage provider,
|
||||
* will resolve to [].
|
||||
* provider, the first one is returned. If no plugin offers a coverage provider,
|
||||
* will resolve to null.
|
||||
*
|
||||
* @param {string|number} changeNum
|
||||
* @param {string} path
|
||||
* @param {string|number} basePatchNum
|
||||
* @param {string|number} patchNum
|
||||
* @return {!Promise<!Array<!Gerrit.CoverageRange>>}
|
||||
* @return {!Promise<?GrAnnotationActionsInterface>}
|
||||
*/
|
||||
getCoverageRanges(changeNum, path, basePatchNum, patchNum) {
|
||||
return Gerrit.awaitPluginsLoaded().then(() => {
|
||||
for (const annotationApi of
|
||||
this._getEventCallbacks(EventType.ANNOTATE_DIFF)) {
|
||||
const provider = annotationApi.getCoverageProvider();
|
||||
// Only one coverage provider makes sense. If there are more, then we
|
||||
// simply ignore them.
|
||||
if (provider) {
|
||||
return annotationApi;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}).then(annotationApi => {
|
||||
if (!annotationApi) return [];
|
||||
const provider = annotationApi.getCoverageProvider();
|
||||
return provider(changeNum, path, basePatchNum, patchNum)
|
||||
.then(ranges => {
|
||||
ranges = ranges || [];
|
||||
// Notify with the coverage data.
|
||||
ranges.forEach(range => {
|
||||
annotationApi.notify(
|
||||
path,
|
||||
range.code_range.start_line,
|
||||
range.code_range.end_line,
|
||||
range.side);
|
||||
});
|
||||
return ranges;
|
||||
});
|
||||
});
|
||||
getCoverageAnnotationApi() {
|
||||
return Gerrit.awaitPluginsLoaded()
|
||||
.then(() => this._getEventCallbacks(EventType.ANNOTATE_DIFF)
|
||||
.find(api => api.getCoverageProvider()));
|
||||
}
|
||||
|
||||
getAdminMenuLinks() {
|
||||
|
Reference in New Issue
Block a user