intern
Version:
Intern. A next-generation code testing stack for JavaScript.
507 lines • 26 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", "@dojo/core/UrlSearchParams", "./Reporter"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var UrlSearchParams_1 = require("@dojo/core/UrlSearchParams");
var Reporter_1 = require("./Reporter");
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._failedFilter = 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) {
var failedFilter = (this._failedFilter = document.createElement('div'));
failedFilter.className = 'failedFilter';
var failedToggle = document.createElement('input');
failedToggle.id = 'failedToggle';
failedToggle.type = 'checkbox';
var failedLabel = document.createElement('label');
failedLabel.htmlFor = 'failedToggle';
failedLabel.innerHTML = 'Show only failed tests';
failedFilter.appendChild(failedToggle);
failedFilter.appendChild(failedLabel);
failedToggle.onclick = function () {
var input = this;
if (input.checked) {
document.body.className += ' hidePassed';
}
else {
document.body.className = document.body.className.replace(/\bhidePassed\b/, ' ');
}
};
}
};
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('div');
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 document = this.document;
this._reportContainer = document.createElement('div');
var headerNode = document.createElement('h1');
var tableNode;
var tmpNode;
var rowNode;
var cellNode;
var summaryHeaders = [
'Suites',
'Tests',
'Duration',
'Skipped',
'Failed',
'Success Rate'
];
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);
tableNode = document.createElement('table');
tableNode.className = 'summary';
this._summaryNode = document.createElement('div');
tmpNode = document.createElement('thead');
rowNode = document.createElement('tr');
for (var i = 0; i < summaryHeaders.length; i++) {
cellNode = document.createElement('td');
var cellContent = document.createElement('div');
cellContent.className =
'summaryContent ' +
summaryHeaders[i]
.toLowerCase()
.replace(/\s(.)/g, function (_, char) {
return char.toUpperCase();
});
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]);
cellContent.appendChild(cellTitle);
cellContent.appendChild(cellData);
cellNode.appendChild(cellContent);
rowNode.appendChild(cellNode);
}
tmpNode.appendChild(rowNode);
tableNode.appendChild(tmpNode);
this._reportContainer.appendChild(tableNode);
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);
tableNode = document.createElement('table');
tableNode.className = 'report';
this._reportNode = document.createElement('tbody');
tableNode.appendChild(this._reportNode);
this._reportContainer.appendChild(tableNode);
};
Html.prototype.suiteStart = function (suite) {
if (!suite.hasParent) {
return;
}
this._testsInSuite = suite.tests.length;
this._testIndex = 0;
this._processedTests = {};
var document = this.document;
var rowNode = document.createElement('tr');
var cellNode = document.createElement('td');
cellNode.className = 'testStatus';
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
this._suiteCount++;
cellNode.className = 'title';
cellNode.appendChild(this.createLinkNode(suite));
rowNode.className = 'suite';
rowNode.appendChild(cellNode);
this._reportNode.appendChild(rowNode);
if (this._indentLevel) {
cellNode.className += ' indent' + Math.min(this._indentLevel, 5);
rowNode.className += ' 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;
if (!suite.hasParent) {
this._generateSummary(suite);
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._failedFilter) {
reportControls.lastElementChild.appendChild(this._failedFilter);
}
else {
var failedNode = document.querySelector('.failed');
addClass(failedNode, 'success');
}
if (suite.numFailedTests > 0) {
var successRateNode = document.querySelector('.successRate');
addClass(successRateNode, 'failed');
}
if (hasSuiteFailures) {
var skippedNode = document.querySelector('.summaryContent.skipped');
addClass(skippedNode, 'failed');
}
return;
}
var rowNode = this._runningSuites[suite.id].node;
addClass(rowNode, numFailedTests > 0 || hasSuiteFailures ? 'failed' : 'passed');
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);
}
rowNode.addEventListener('click', function (event) {
_this._setCollapsed(event.currentTarget);
});
cellNode.className = 'column-info';
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
cellNode.className = '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');
var cellNode = document.createElement('td');
cellNode.className = 'testStatus';
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
if (this._indentLevel) {
cellNode.className += ' indent' + this._indentLevel;
}
cellNode.appendChild(this.createLinkNode(test));
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
cellNode.className = 'column-info';
if (test.error) {
rowNode.className = 'testResult failed';
cellNode.appendChild(document.createTextNode(test.error.message));
}
else if (test.skipped != null) {
rowNode.className = 'testResult skipped';
cellNode.appendChild(document.createTextNode(test.skipped || ''));
}
else {
rowNode.className = 'testResult passed';
}
if (this._testIndex === this._testsInSuite) {
rowNode.className = rowNode.className + ' lastTest';
}
rowNode.appendChild(cellNode);
cellNode = document.createElement('td');
cellNode.className = 'numeric duration';
cellNode.appendChild(document.createTextNode(test.skipped ? 'Skipped' : formatDuration(test.timeElapsed)));
rowNode.appendChild(cellNode);
this._reportNode.appendChild(rowNode);
};
Html.prototype.createLinkNode = function (obj) {
var document = this.document;
var location = this.location;
var params = new UrlSearchParams_1.default(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.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) {
var classes = node.className.split(/\s+/);
if (classes.indexOf(cls) !== -1) {
return;
}
classes.push(cls);
node.className = classes.join(' ');
}
function removeClass(node, cls) {
var classes = node.className.split(/\s+/);
var index = classes.indexOf(cls);
if (index === -1) {
return;
}
classes.splice(index, 1);
node.className = classes.join(' ');
}
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;
}
});
//# sourceMappingURL=Html.js.map