intern
Version:
Intern. A next-generation code testing stack for JavaScript.
596 lines • 29.8 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "tslib", "./Reporter", "./html/icons"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var Reporter_1 = tslib_1.__importStar(require("./Reporter"));
var icons_1 = require("./html/icons");
var Html = (function (_super) {
tslib_1.__extends(Html, _super);
function Html(executor, options) {
if (options === void 0) { options = {}; }
var _this = _super.call(this, executor, options) || this;
_this._summaryNodes = [];
_this._suiteCount = 0;
_this._testCount = 0;
_this._testsInSuite = 0;
_this._testIndex = 0;
_this._processedTests = {};
_this._passedFilter = null;
_this._skippedFilter = null;
_this._indentLevel = 0;
_this._runningSuites = {};
_this.document = options.document || window.document;
_this.location = options.location || window.location;
_this._fragment = _this.document.createDocumentFragment();
return _this;
}
Html.prototype._generateSummary = function (suite) {
var document = this.document;
if (this._summaryNodes.length === 0) {
return;
}
var duration = suite.timeElapsed;
var numSkippedTests = suite.numTests - (suite.numFailedTests + suite.numPassedTests);
var percentPassed = Math.round((1 - suite.numFailedTests / suite.numTests) * 100);
var rowInfo = [
this._suiteCount,
this._testCount,
formatDuration(duration),
numSkippedTests,
suite.numFailedTests,
percentPassed + '%'
];
for (var i = 0; i < rowInfo.length; ++i) {
this._summaryNodes[i].appendChild(document.createTextNode(rowInfo[i]));
}
if (suite.numFailedTests > 0) {
this._passedFilter = this._createToggleFilter('hidePassed', 'Hide passed tests');
}
if (suite.numSkippedTests > 0) {
this._skippedFilter = this._createToggleFilter('hideSkipped', 'Hide skipped tests');
}
};
Html.prototype._createToggleFilter = function (className, label) {
var document = this.document;
var toggleFilter = document.createElement('div');
toggleFilter.className = "toggleFilter";
var toggle = document.createElement('input');
toggle.type = 'checkbox';
var toggleLabel = document.createElement('label');
toggleLabel.appendChild(toggle);
toggleLabel.appendChild(document.createTextNode(label));
toggleFilter.appendChild(toggleLabel);
toggle.onclick = function () {
if (toggle.checked) {
addClass(document.body, className);
}
else {
removeClass(document.body, className);
}
};
return toggleFilter;
};
Html.prototype._injectCSS = function () {
var document = this.document;
var style = document.createElement('style');
style.innerHTML = 'body { visibility: hidden; }';
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = this.executor.config.internPath + "lib/reporters/html/html.css";
document.head.appendChild(style);
document.head.appendChild(link);
};
Html.prototype._getIndentLevel = function (node) {
var child = node.children[1];
var indent = child.className.split(' ').filter(function (name) {
return name.indexOf('indent') >= 0;
})[0];
return indent ? parseInt(indent.slice('indent'.length), 10) : 0;
};
Html.prototype._setCollapsed = function (node, shouldCollapse) {
var indentDelta;
var initialIndent = this._getIndentLevel(node);
var collapsed = containsClass(node, 'collapsed');
if (shouldCollapse === collapsed) {
return;
}
shouldCollapse = shouldCollapse == null ? !collapsed : shouldCollapse;
if (shouldCollapse) {
addClass(node, 'collapsed');
}
else {
removeClass(node, 'collapsed');
}
while ((node = node.nextSibling)) {
indentDelta = this._getIndentLevel(node) - initialIndent;
if (indentDelta <= 0) {
break;
}
if (containsClass(node, 'suite')) {
addClass(node, 'collapsed');
}
node.style.display =
!shouldCollapse && indentDelta === 1 ? '' : 'none';
}
};
Html.prototype.error = function (error) {
var document = this.document;
var htmlError = this.formatError(error)
.replace(/&/g, '&')
.replace(/</g, '<');
var errorNode = document.createElement('pre');
errorNode.style.cssText = 'color: red; font-family: sans-serif;';
errorNode.innerHTML =
'<h1>Fatal error</h1>' +
'<pre style="padding: 1em; background-color: #f0f0f0;">' +
htmlError +
'</pre>';
document.body.appendChild(errorNode);
};
Html.prototype.runStart = function () {
var _this = this;
var document = this.document;
this._reportContainer = document.createElement('div');
var headerNode = document.createElement('h1');
var summaryHeaders = [
'Suites',
'Tests',
'Duration',
'Skipped',
'Failed',
'Success Rate'
];
var summaryIcons = {
suites: icons_1.suitesIcon,
tests: icons_1.testsIcon,
duration: icons_1.timeIcon,
skipped: icons_1.skipIcon,
failed: icons_1.failIcon
};
var fragment = this._fragment;
var headerTitle = document.createElement('span');
headerTitle.className = 'headerTitle';
headerTitle.innerHTML = 'Intern Test Report';
headerNode.className = 'reportHeader';
var headerLogo = document.createElement('img');
headerLogo.className = 'headerLogo';
headerLogo.src =
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACACAMAAADwF' +
'UHEAAADAFBMVEUAAAAAAAAAAABVVVVAQEBmZmZVVVVtbW1gYGBVVVVmZmZdXV1q' +
'ampiYmJtbW1mZmZwcHBpaWljY2Nra2tmZmZtbW1oaGhvb29qampwcHBsbGxoaGh' +
'tbW1qampvb29ra2twcHBsbGxxcXFtbW1qampubm5ra2tvb29sbGxwcHBtbW1xcX' +
'Fubm5sbGxvb29tbW1wcHBtbW1wcHBubm5xcXFvb29tbW1vb29tbW1wcHBubm5wc' +
'HBvb29xcXFvb29tbW1wcHBubm5wcHBubm5xcXFvb29xcXFvb29ubm5wcHBubm5w' +
'cHBvb29xcXFvb29xcXFwcHBubm5wcHBwcHBvb29xcXFvb29ubm5xcXFwcHBvb29' +
'wcHBwcHBvb29xcXFwcHBubm5wcHBvb29wcHBvb29xcXFvb29xcXFwcHBvb29wcH' +
'Bvb29wcHBvb29xcXFwcHBxcXFwcHBvb29wcHBvb29wcHBvb29xcXFwcHBxcXFwc' +
'HBvb29wcHBubm5wcHBwcHBwcHBxcXFwcHBvb29wcHBvb29xcXFwcHBwcHBvb29x' +
'cXFwcHBvb29wcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBvb29wcHBwcHBxcXFwcHB' +
'xcXFwcHBxcXFwcHBwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFwcHBxcX' +
'FwcHBxcXFwcHBwcHBwcHBwcHBxcXFwcHBwcHBxcXFwcHBwcHBwcHBwcHBxcXFwc' +
'HBxcXFwcHBxcXFwcHBwcHBwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFw' +
'cHBxcXFxcXFwcHBwcHBxcXFwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBxcXFwcHB' +
'wcHBxcXFwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcH' +
'BxcXFxcXFwcHBxcXFwcHBxcXFwcHBxcXFxcXFwcHBxcXFxcXFwcHBwcHBxcXFwc' +
'HBxcXFxcXFwcHBxcXFxcXFwcHBxcXF+cGExAAAA/3RSTlMAAQIDBAUGBwgJCgsM' +
'DQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs' +
'8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlRVVldYWFlaW11eX2BhYmNkZWZnaGlqa2' +
'xtbm9wcXJzdHV2d3h5ent8fX9/gIKDhIWGh4iJi4yMjY6PkJGSk5SVlpeYmZqbn' +
'J2en6Gio6SlpqeoqaqrrK2ur7CxsrO0tre4ubq7vL2+v8DBwsPExcbHyMnKy8zN' +
'ztDR0tLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vPz9PX29/j5+fr' +
'6+/z8/f6oCt5hAAAJJUlEQVQYGcXBC0DU9QEH8O9xgDwEM0BTYVn4thpmvpN02W' +
'qVpaXNYlPM0koW+cy0BepYG5Ca1lDLMrXyEenS6GFiTiSxttTIFJsvFFB5TIEdg' +
'919+/3+/zu5x/9/AnF3nw+aI/C2qcs27T1RXlVdW1r45ZY/TxwYAi8yDF68v47O' +
'6velPxAKrxi06iz11HyYeC08LPSJA3Sv9t27/OA5IXPPswmKpgbCMwKfOcMmOpU' +
'UBA8YcYTNUDwzFK2s3UoLm6c0yQ+tKfoEm2//bWhNt+xm85mXt0MrMjxZweYrfh' +
'StKfYrtsDWCLSiwEy2wKk70JomN7D5GlKMaEW/Y0vsikarCI0b8+zLb11kS5SNw' +
'M/Uc2LGJ6f4c9Q9jhbzHzhjSwlbQbofWiJk3OZLbC1b26K52ozZcImt6etOaJae' +
'WRVsbUe7oukGZFvoAad6oYmi11roGSW3oikMz12mx5QPxdV12E5PqhiAq+lzmp5' +
'1IQ7uxZXS00r7wp3uF+l5xbHQF1hAbzgaBV2Z9I78UOiIrqOXfOQPbRn0mhVwEN' +
'StXw8jhEmPjb7nnoenv1lFz3saNuGPvvGdheSlVZG44k56Xv2dkALHf2SizXehU' +
'Pmn1dALyn4BXJ9eSnuzoVpH78gfsqGejrZDMY6+cwGKAvrOeUix9KHjkCbQh/ZB' +
'eok+9CqkDPrQBEgr6EMxkNLoO/lQzKHvzIQigT5jiYEijj6TA1VQA33lAVh9Sx8' +
'57gerV+kjs2DzEH3jfFvYRFjoEy+h0R76QmV7NEqmL6TAToyFraD0wNbXXvj9/f' +
'H94uKGjkneWEn3SsNgL48/h7lwU+qEW8PgqMN2ujUDDpLopIFNdGrl1IHB0NSd7' +
'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' +
'wAAAABJRU5ErkJggg==';
headerNode.appendChild(headerLogo);
headerNode.appendChild(headerTitle);
fragment.appendChild(headerNode);
this._reportContainer.className = 'internReportContainer';
this._fragment.appendChild(this._reportContainer);
var summaryTableNode = document.createElement('div');
summaryTableNode.className = 'summary';
this._summaryNode = document.createElement('div');
for (var i = 0; i < summaryHeaders.length; i++) {
var cellNode = document.createElement('div');
var cellName = summaryHeaders[i]
.toLowerCase()
.replace(/\s(.)/g, function (_, char) { return char.toUpperCase(); });
cellNode.className = 'summaryContent';
addClass(cellNode, cellName);
if (summaryIcons[cellName]) {
var cellIcon = createSvgNode(summaryIcons[cellName], cellName);
cellNode.appendChild(cellIcon);
}
var cellTitle = document.createElement('span');
cellTitle.className = 'summaryTitle';
cellTitle.appendChild(document.createTextNode(summaryHeaders[i]));
var cellData = document.createElement('div');
cellData.className = 'summaryData';
this._summaryNodes[i] = document.createElement('span');
this._summaryNode.appendChild(this._summaryNodes[i]);
cellData.appendChild(this._summaryNodes[i]);
cellNode.appendChild(cellTitle);
cellNode.appendChild(cellData);
summaryTableNode.appendChild(cellNode);
}
this._reportContainer.appendChild(summaryTableNode);
this._reportControls = document.createElement('div');
this._reportControls.className = 'reportControls';
this._reportControls.appendChild(document.createElement('div'));
this._reportControls.appendChild(document.createElement('div'));
this._reportContainer.appendChild(this._reportControls);
var reportTableNode = document.createElement('table');
reportTableNode.className = 'report';
this._reportNode = document.createElement('tbody');
reportTableNode.appendChild(this._reportNode);
this._reportContainer.appendChild(reportTableNode);
this._reportNode.addEventListener('click', function (event) {
var target = event.target;
if (!target || target.tagName === 'A') {
return;
}
while (target && target.tagName !== 'TR') {
target = target.parentElement;
}
if (target) {
_this._setCollapsed(target);
}
});
};
Html.prototype.suiteStart = function (suite) {
if (!suite.hasParent) {
return;
}
this._testsInSuite = suite.tests.length;
this._testIndex = 0;
this._processedTests = {};
this._suiteCount++;
var document = this.document;
var rowNode = document.createElement('tr');
rowNode.className = 'suite';
var statusCell = document.createElement('td');
addClass(statusCell, 'column-status');
var statusContent = document.createElement('div');
addClass(statusContent, 'statusContent');
statusCell.appendChild(statusContent);
rowNode.appendChild(statusCell);
var idCell = document.createElement('td');
idCell.className = 'column-id';
addClass(idCell, 'title');
var idText = document.createElement('div');
idText.className = 'truncateText';
idText.appendChild(this.createLinkNode(suite));
idCell.appendChild(idText);
rowNode.appendChild(idCell);
this._reportNode.appendChild(rowNode);
if (this._indentLevel) {
addClass(idCell, "indent" + Math.min(this._indentLevel, 5));
addClass(rowNode, 'indent');
}
this._runningSuites[suite.id] = { node: rowNode };
++this._indentLevel;
};
Html.prototype.suiteEnd = function (suite) {
var _this = this;
var document = this.document;
var numTests = suite.numTests;
var numFailedTests = suite.numFailedTests;
var numPassedTests = suite.numPassedTests;
var numSkippedTests = numTests - (numFailedTests + numPassedTests);
var hasSuiteFailures = suite.numSkippedTests !== numSkippedTests;
var allTestsSkipped = numTests === numSkippedTests;
if (!suite.hasParent) {
this._generateSummary(suite);
for (var i = 0; i < document.styleSheets.length; i++) {
document.styleSheets[i].disabled = true;
}
require('./html/html.styl');
document.body.innerHTML = '';
document.body.className = '';
document.body.appendChild(this._fragment);
var expandToggle = document.createElement('div');
expandToggle.className = 'linkButton';
expandToggle.textContent = 'Expand/collapse all';
var reportControls = this._reportControls;
reportControls.firstElementChild.appendChild(expandToggle);
expandToggle.addEventListener('click', function () {
var reportNode = _this._reportNode;
var shouldExpand = reportNode.querySelector('.collapsed') != null;
var suites = reportNode.querySelectorAll('.suite');
for (var i = 0; i < suites.length; i++) {
_this._setCollapsed(suites[i], !shouldExpand);
}
});
if (this._passedFilter) {
reportControls.lastElementChild.appendChild(this._passedFilter);
}
else {
var failedNode = document.querySelector('.failed');
addClass(failedNode, 'success');
}
if (this._skippedFilter) {
reportControls.lastElementChild.appendChild(this._skippedFilter);
}
var successRateNode = document.querySelector('.successRate');
if (suite.numFailedTests > 0) {
var icon_1 = createSvgNode(icons_1.failIcon);
successRateNode.insertBefore(icon_1, successRateNode.firstChild);
addClass(successRateNode, 'failed');
}
else {
var icon_2 = createSvgNode(icons_1.passIcon);
successRateNode.insertBefore(icon_2, successRateNode.firstChild);
}
if (hasSuiteFailures) {
var skippedNode = document.querySelector('.summaryContent.skipped');
addClass(skippedNode, 'failed');
}
return;
}
var rowNode = this._runningSuites[suite.id].node;
var rowStatus = allTestsSkipped
? 'skipped'
: numFailedTests > 0 || hasSuiteFailures
? 'failed'
: 'passed';
addClass(rowNode, rowStatus);
var icon = createSvgNode(rowStatus === 'skipped' ? icons_1.skipIcon : icons_1.suitesIcon);
var statusCell = rowNode.querySelector('.column-status');
var statusContent = statusCell.firstElementChild;
statusContent.appendChild(icon);
this._setCollapsed(rowNode, numFailedTests === 0 && !hasSuiteFailures);
var cellNode = document.createElement('td');
if (numPassedTests > 0) {
cellNode.appendChild(document.createTextNode('Passed: '));
var testsPassed = document.createElement('span');
testsPassed.className = 'success';
testsPassed.innerHTML = "" + numPassedTests;
cellNode.appendChild(testsPassed);
}
if (numFailedTests > 0) {
cellNode.appendChild(document.createTextNode('Failed: '));
var testsFailed = document.createElement('span');
testsFailed.className = 'failed';
testsFailed.innerHTML = "" + numFailedTests;
cellNode.appendChild(testsFailed);
}
if (numSkippedTests > 0) {
cellNode.appendChild(document.createTextNode('Skipped: '));
var testsSkipped = document.createElement('span');
testsSkipped.innerHTML = "" + numSkippedTests;
cellNode.appendChild(testsSkipped);
}
if (suite.error) {
var suiteError = document.createElement('span');
suiteError.className = 'failed';
suiteError.innerHTML = 'Suite error!';
cellNode.appendChild(suiteError);
}
cellNode.className = 'column-info';
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
cellNode.className = 'column-time numeric duration';
cellNode.appendChild(document.createTextNode(formatDuration(suite.timeElapsed)));
rowNode.appendChild(cellNode);
--this._indentLevel;
if (!this._indentLevel) {
this._testCount += numTests;
}
this._runningSuites[suite.id] = null;
};
Html.prototype.testEnd = function (test) {
if (test.id in this._processedTests) {
return;
}
this._processedTests[test.id] = true;
this._testIndex++;
var document = this.document;
var rowNode = document.createElement('tr');
rowNode.className = 'testResult';
var statusCell = document.createElement('td');
statusCell.className = 'column-status';
var statusContent = document.createElement('div');
statusContent.className = 'statusContent';
statusCell.appendChild(statusContent);
rowNode.appendChild(statusCell);
var idCell = document.createElement('td');
idCell.className = 'column-id';
if (this._indentLevel) {
addClass(idCell, "indent" + this._indentLevel);
}
var idText = document.createElement('div');
idText.className = 'truncateText';
idText.appendChild(this.createLinkNode(test));
idCell.appendChild(idText);
rowNode.appendChild(idCell);
var infoCell = document.createElement('td');
infoCell.className = 'column-info';
var statusIcon;
if (test.error) {
addClass(rowNode, 'failed');
var errorNode = document.createElement('div');
errorNode.className = 'testError';
var errorText = document.createElement('pre');
addClass(errorText, 'scrollText');
errorText.textContent = this.formatError(test.error);
errorNode.appendChild(errorText);
infoCell.appendChild(errorNode);
statusIcon = createSvgNode(icons_1.failIcon);
}
else if (test.skipped != null) {
addClass(rowNode, 'skipped');
infoCell.appendChild(document.createTextNode(test.skipped || ''));
statusIcon = createSvgNode(icons_1.skipIcon);
}
else {
addClass(rowNode, 'passed');
statusIcon = createSvgNode(icons_1.passIcon);
}
statusContent.appendChild(statusIcon);
if (this._testIndex === this._testsInSuite) {
addClass(rowNode, 'lastTest');
}
rowNode.appendChild(infoCell);
var timeNode = document.createElement('td');
timeNode.className = 'numeric';
addClass(timeNode, 'duration');
timeNode.appendChild(document.createTextNode(test.skipped ? 'Skipped' : formatDuration(test.timeElapsed)));
rowNode.appendChild(timeNode);
this._reportNode.appendChild(rowNode);
};
Html.prototype.createLinkNode = function (obj) {
var document = this.document;
var location = this.location;
var params = new URLSearchParams(location.search.slice(1) || undefined);
params.delete('grep');
params.append('grep', obj.id);
var a = document.createElement('a');
a.href = location.origin + location.pathname + ("?" + params.toString());
a.title = obj.name;
a.appendChild(document.createTextNode(obj.name));
return a;
};
tslib_1.__decorate([
Reporter_1.eventHandler()
], Html.prototype, "error", null);
tslib_1.__decorate([
Reporter_1.eventHandler()
], Html.prototype, "runStart", null);
tslib_1.__decorate([
Reporter_1.eventHandler()
], Html.prototype, "suiteStart", null);
tslib_1.__decorate([
Reporter_1.eventHandler()
], Html.prototype, "suiteEnd", null);
tslib_1.__decorate([
Reporter_1.eventHandler()
], Html.prototype, "testEnd", null);
return Html;
}(Reporter_1.default));
exports.default = Html;
function containsClass(node, cls) {
var classes = node.className.split(/\s+/);
return classes.indexOf(cls) !== -1;
}
function addClass(node, cls) {
if (node.classList) {
node.classList.add(cls);
}
else {
var classes = getClassName(node).split(/\s+/);
if (classes.indexOf(cls) !== -1) {
return;
}
classes.push(cls);
setClassName(node, classes.join(' '));
}
}
function removeClass(node, cls) {
if (node.classList) {
node.classList.remove(cls);
}
else {
var classes = getClassName(node).split(/\s+/);
var index = classes.indexOf(cls);
if (index === -1) {
return;
}
classes.splice(index, 1);
setClassName(node, classes.join(' '));
}
}
function getClassName(node) {
return node.getAttribute('class') || '';
}
function setClassName(node, cls) {
node.setAttribute('class', cls);
}
function pad(value, size) {
var padded = String(value);
while (padded.length < size) {
padded = '0' + padded;
}
return padded;
}
function formatDuration(duration) {
var hours = Math.floor(duration / 3600000);
var minutes = Math.floor(duration / 60000) - hours * 60;
var seconds = Math.floor(duration / 1000) - hours * 3600 - minutes * 60;
var milliseconds = duration - hours * 3600000 - minutes * 60000 - seconds * 1000;
var formattedValue = '';
if (hours) {
formattedValue = hours + ':';
minutes = pad(minutes, 2);
}
formattedValue +=
minutes + ':' + pad(seconds, 2) + '.' + pad(milliseconds, 3);
return formattedValue;
}
function createSvgNode(svg, extraClass) {
var div = document.createElement('div');
div.className = 'icon';
div.innerHTML = svg;
var icon = div.firstElementChild;
addClass(icon, 'icon');
if (extraClass) {
addClass(icon, extraClass);
}
return icon;
}
});
//# sourceMappingURL=Html.js.map