@web/test-runner
Version:
Test runner for web applications
129 lines • 5.06 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatError = formatError;
exports.reportTestsErrors = reportTestsErrors;
const diff = __importStar(require("diff"));
const nanocolors_1 = require("nanocolors");
const getFailedOnBrowsers_js_1 = require("./utils/getFailedOnBrowsers.js");
const getFlattenedTestResults_js_1 = require("./utils/getFlattenedTestResults.js");
function renderDiff(actual, expected) {
function cleanUp(line) {
if (line[0] === '+') {
return (0, nanocolors_1.green)(line);
}
if (line[0] === '-') {
return (0, nanocolors_1.red)(line);
}
if (line.match(/@@/)) {
return null;
}
if (line.match(/\\ No newline/)) {
return null;
}
return line;
}
const diffMsg = diff
.createPatch('string', actual, expected)
.split('\n')
.splice(4)
.map(cleanUp)
.filter(l => !!l)
.join('\n');
return `${(0, nanocolors_1.green)('+ expected')} ${(0, nanocolors_1.red)('- actual')}\n\n${diffMsg}`;
}
function formatError(error) {
const strings = [];
const { name, message = 'Unknown error' } = error;
const errorMsg = name ? `${name}: ${message}` : message;
const showDiff = typeof error.expected === 'string' && typeof error.actual === 'string';
strings.push((0, nanocolors_1.red)(errorMsg));
if (showDiff) {
strings.push(`${renderDiff(error.actual, error.expected)}\n`);
}
if (error.stack) {
if (showDiff) {
const dedented = error.stack
.split('\n')
.map(s => s.trim())
.join('\n');
strings.push((0, nanocolors_1.gray)(dedented));
}
else {
strings.push((0, nanocolors_1.gray)(error.stack));
}
}
if (!error.expected && !error.stack) {
strings.push((0, nanocolors_1.red)(error.message || 'Unknown error'));
}
return strings.join('\n');
}
function reportTestsErrors(logger, allBrowserNames, favoriteBrowser, failedSessions) {
const testErrorsPerBrowser = new Map();
for (const session of failedSessions) {
if (session.testResults) {
const flattenedTests = (0, getFlattenedTestResults_js_1.getFlattenedTestResults)(session.testResults);
for (const test of flattenedTests) {
if (test.error) {
let testErrorsForBrowser = testErrorsPerBrowser.get(test.name);
if (!testErrorsForBrowser) {
testErrorsForBrowser = new Map();
testErrorsPerBrowser.set(test.name, testErrorsForBrowser);
}
if (test.error) {
testErrorsForBrowser.set(session.browser.name, test.error);
}
}
}
}
}
if (testErrorsPerBrowser.size > 0) {
for (const [name, errorsForBrowser] of testErrorsPerBrowser) {
const failedBrowsers = Array.from(errorsForBrowser.keys());
const error = errorsForBrowser.get(favoriteBrowser) ?? errorsForBrowser.get(failedBrowsers[0]);
const failedOn = (0, getFailedOnBrowsers_js_1.getFailedOnBrowsers)(allBrowserNames, failedBrowsers);
logger.log(` ❌ ${name}${failedOn}`);
logger.group();
logger.group();
logger.group();
logger.log(formatError(error));
logger.groupEnd();
logger.groupEnd();
logger.groupEnd();
logger.log('');
}
}
}
//# sourceMappingURL=reportTestsErrors.js.map