Files
react-native-devtools-frontend/front_end/coverage_test_runner/coverage_test_runner.js
T
Tim van der Lippe cf2130a723 Add imports to test_runners
The test_runners include these folders as dependencies. Since we
are moving away from specifying all files from these folders
in the module.json files, we need to add the corresponding imports.
This allows us to remove the `module.json` files for those folders
that have already been fully migrated and don't have any resources.

R=andoli@chromium.org

Bug: 1131500
Change-Id: I901fc10ac23accff72e0133b874e8f9820459c7a
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2676141
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Commit-Queue: Andres Olivares <andoli@chromium.org>
Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Andres Olivares <andoli@chromium.org>
2021-02-04 16:51:37 +00:00

156 lines
4.8 KiB
JavaScript

// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../test_runner/test_runner.js';
import '../coverage/coverage-legacy.js';
import '../sources_test_runner/sources_test_runner.js';
/**
* @fileoverview using private properties isn't a Closure violation in tests.
*/
self.CoverageTestRunner = self.CoverageTestRunner || {};
/**
* @param jsCoveragePerBlock - Collect per Block coverage if `true`, per function coverage otherwise.
* @return {!Promise}
*/
CoverageTestRunner.startCoverage = async function(jsCoveragePerBlock) {
self.UI.viewManager.showView('coverage');
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
await coverageView._startRecording({reload: false, jsCoveragePerBlock});
};
/**
* @return {!Promise}
*/
CoverageTestRunner.stopCoverage = function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
return coverageView.stopRecording();
};
/**
* @return {!Promise}
*/
CoverageTestRunner.suspendCoverageModel = async function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
await coverageView._model.preSuspendModel();
await coverageView._model.suspendModel();
};
/**
* @return {!Promise}
*/
CoverageTestRunner.resumeCoverageModel = async function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
await coverageView._model.resumeModel();
await coverageView._model.postResumeModel();
};
/**
* @return {!Promise}
*/
CoverageTestRunner.pollCoverage = async function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
// Make sure not to have two instances of _pollAndCallback running at the same time.
await coverageView._model._currentPollPromise;
return coverageView._model._pollAndCallback();
};
/**
* @return {!Promise<Coverage.CoverageModel>}
*/
CoverageTestRunner.getCoverageModel = function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
return coverageView._model;
};
/**
* @return {!Promise<string>}
*/
CoverageTestRunner.exportReport = async function() {
const coverageView = self.runtime.sharedInstance(Coverage.CoverageView);
let data;
await coverageView._model.exportReport({
write: d => {
data = d;
},
close: _ => 0
});
return data;
};
/**
* @return {!Promise<!SourceFrame.SourceFrame>}
*/
CoverageTestRunner.sourceDecorated = async function(source) {
await self.UI.inspectorView.showPanel('sources');
const decoratePromise = TestRunner.addSnifferPromise(Coverage.CoverageView.LineDecorator.prototype, '_innerDecorate');
const sourceFrame = await SourcesTestRunner.showScriptSourcePromise(source);
await decoratePromise;
return sourceFrame;
};
CoverageTestRunner.dumpDecorations = async function(source) {
const sourceFrame = await CoverageTestRunner.sourceDecorated(source);
CoverageTestRunner.dumpDecorationsInSourceFrame(sourceFrame);
};
/**
* @return {?DataGrid.DataGridNode}
*/
CoverageTestRunner.findCoverageNodeForURL = function(url) {
const coverageListView = self.runtime.sharedInstance(Coverage.CoverageView)._listView;
const rootNode = coverageListView._dataGrid.rootNode();
for (const child of rootNode.children) {
if (child._coverageInfo.url().endsWith(url)) {
return child;
}
}
return null;
};
CoverageTestRunner.dumpDecorationsInSourceFrame = function(sourceFrame) {
const markerMap = new Map([['used', '+'], ['unused', '-']]);
const codeMirror = sourceFrame.textEditor.codeMirror();
for (let line = 0; line < codeMirror.lineCount(); ++line) {
const text = codeMirror.getLine(line);
let markerType = ' ';
const lineInfo = codeMirror.lineInfo(line);
if (!lineInfo) {
continue;
}
const gutterElement = lineInfo.gutterMarkers && lineInfo.gutterMarkers['CodeMirror-gutter-coverage'];
if (gutterElement) {
const markerClass = /^text-editor-coverage-(\w*)-marker$/.exec(gutterElement.classList)[1];
markerType = markerMap.get(markerClass) || gutterElement.classList;
}
TestRunner.addResult(`${line}: ${markerType} ${text}`);
}
};
CoverageTestRunner.dumpCoverageListView = function() {
const coverageListView = self.runtime.sharedInstance(Coverage.CoverageView)._listView;
const dataGrid = coverageListView._dataGrid;
dataGrid.updateInstantly();
for (const child of dataGrid.rootNode().children) {
const data = child._coverageInfo;
const url = TestRunner.formatters.formatAsURL(data.url());
if (url.startsWith('test://')) {
continue;
}
const type = Coverage.coverageTypeToString(data.type());
TestRunner.addResult(`${url} ${type} used: ${data.usedSize()} unused: ${data.unusedSize()} total: ${data.size()}`);
}
};