UNPKG

intern

Version:

Intern. A next-generation code testing stack for JavaScript.

596 lines 29.8 kB
(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, '&amp;') .replace(/</g, '&lt;'); 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