testcafe
Version:
Automated browser testing for the modern web development stack.
70 lines (69 loc) • 10.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const dedent_1 = __importDefault(require("dedent"));
const lodash_1 = require("lodash");
const phase_1 = __importDefault(require("../../test-run/phase"));
const SUBTITLES = {
[phase_1.default.initial]: '',
[phase_1.default.inFixtureBeforeHook]: '<span class="subtitle">Error in fixture.before hook</span>\n',
[phase_1.default.inFixtureBeforeEachHook]: '<span class="subtitle">Error in fixture.beforeEach hook</span>\n',
[phase_1.default.inTestBeforeHook]: '<span class="subtitle">Error in test.before hook</span>\n',
[phase_1.default.inTest]: '',
[phase_1.default.inTestAfterHook]: '<span class="subtitle">Error in test.after hook</span>\n',
[phase_1.default.inFixtureAfterEachHook]: '<span class="subtitle">Error in fixture.afterEach hook</span>\n',
[phase_1.default.inFixtureAfterHook]: '<span class="subtitle">Error in fixture.after hook</span>\n',
[phase_1.default.inRoleInitializer]: '<span class="subtitle">Error in Role initializer</span>\n',
[phase_1.default.inBookmarkRestore]: '<span class="subtitle">Error while restoring configuration after Role switch</span>\n'
};
function renderForbiddenCharsList(forbiddenCharsList) {
return forbiddenCharsList.map(charInfo => `\t"${charInfo.chars}" at index ${charInfo.index}\n`).join('');
}
exports.renderForbiddenCharsList = renderForbiddenCharsList;
function formatUrl(url) {
return `<a href="${url}">${url}</a>`;
}
exports.formatUrl = formatUrl;
function formatSelectorCallstack(apiFnChain, apiFnIndex, viewportWidth) {
if (typeof apiFnIndex === 'undefined')
return '';
const emptySpaces = 10;
const ellipsis = '...)';
const availableWidth = viewportWidth - emptySpaces;
return apiFnChain.map((apiFn, index) => {
let formattedApiFn = String.fromCharCode(160);
formattedApiFn += index === apiFnIndex ? '>' : ' ';
formattedApiFn += ' | ';
formattedApiFn += index !== 0 ? ' ' : '';
formattedApiFn += apiFn;
if (formattedApiFn.length > availableWidth)
return formattedApiFn.substr(0, availableWidth - emptySpaces) + ellipsis;
return formattedApiFn;
}).join('\n');
}
exports.formatSelectorCallstack = formatSelectorCallstack;
function replaceLeadingSpacesWithNbsp(str) {
return str.replace(/^ +/mg, match => {
return lodash_1.repeat(' ', match.length);
});
}
exports.replaceLeadingSpacesWithNbsp = replaceLeadingSpacesWithNbsp;
function markup(err, msgMarkup, opts = {}) {
msgMarkup = dedent_1.default(`
${SUBTITLES[err.testRunPhase]}<div class="message">${dedent_1.default(msgMarkup)}</div>
<strong>Browser:</strong> <span class="user-agent">${err.userAgent}</span>
`);
if (err.screenshotPath)
msgMarkup += `\n<div class="screenshot-info"><strong>Screenshot:</strong> <a class="screenshot-path">${lodash_1.escape(err.screenshotPath)}</a></div>`;
if (!opts.withoutCallsite) {
const callsiteMarkup = err.getCallsiteMarkup();
if (callsiteMarkup)
msgMarkup += `\n\n${callsiteMarkup}`;
}
return msgMarkup
.replace('\t', ' '.repeat(4));
}
exports.markup = markup;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXJyb3JzL3Rlc3QtcnVuL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUFzRDtBQUN0RCxpRUFBa0Q7QUFFbEQsTUFBTSxTQUFTLEdBQUc7SUFDZCxDQUFDLGVBQWMsQ0FBQyxPQUFPLENBQUMsRUFBa0IsRUFBRTtJQUM1QyxDQUFDLGVBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFNLDhEQUE4RDtJQUN4RyxDQUFDLGVBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLGtFQUFrRTtJQUM1RyxDQUFDLGVBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFTLDJEQUEyRDtJQUNyRyxDQUFDLGVBQWMsQ0FBQyxNQUFNLENBQUMsRUFBbUIsRUFBRTtJQUM1QyxDQUFDLGVBQWMsQ0FBQyxlQUFlLENBQUMsRUFBVSwwREFBMEQ7SUFDcEcsQ0FBQyxlQUFjLENBQUMsc0JBQXNCLENBQUMsRUFBRyxpRUFBaUU7SUFDM0csQ0FBQyxlQUFjLENBQUMsa0JBQWtCLENBQUMsRUFBTyw2REFBNkQ7SUFDdkcsQ0FBQyxlQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBUSwyREFBMkQ7SUFDckcsQ0FBQyxlQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBUSx1RkFBdUY7Q0FDcEksQ0FBQztBQUVGLFNBQWdCLHdCQUF3QixDQUFFLGtCQUFrQjtJQUN4RCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sUUFBUSxDQUFDLEtBQUssY0FBYyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0csQ0FBQztBQUZELDREQUVDO0FBRUQsU0FBZ0IsU0FBUyxDQUFFLEdBQUc7SUFDMUIsT0FBTyxZQUFZLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWE7SUFDMUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0lBRWQsTUFBTSxXQUFXLEdBQU0sRUFBRSxDQUFDO0lBQzFCLE1BQU0sUUFBUSxHQUFTLE1BQU0sQ0FBQztJQUM5QixNQUFNLGNBQWMsR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDO0lBRW5ELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNuQyxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlDLGNBQWMsSUFBSSxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNuRCxjQUFjLElBQUksS0FBSyxDQUFDO1FBQ3hCLGNBQWMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxjQUFjLElBQUksS0FBSyxDQUFDO1FBRXhCLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjO1lBQ3RDLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxHQUFHLFdBQVcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUU3RSxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQXJCRCwwREFxQkM7QUFFRCxTQUFnQiw0QkFBNEIsQ0FBRSxHQUFHO0lBQzdDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDaEMsT0FBTyxlQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFKRCxvRUFJQztBQUVELFNBQWdCLE1BQU0sQ0FBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFO0lBQzdDLFNBQVMsR0FBRyxnQkFBTSxDQUFDO1VBQ2IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLGdCQUFNLENBQUMsU0FBUyxDQUFDOzs2REFFakIsR0FBRyxDQUFDLFNBQVM7S0FDckUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxHQUFHLENBQUMsY0FBYztRQUNsQixTQUFTLElBQUksMEZBQTBGLGVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQztJQUV0SixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUN2QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUUvQyxJQUFJLGNBQWM7WUFDZCxTQUFTLElBQUksT0FBTyxjQUFjLEVBQUUsQ0FBQztLQUM1QztJQUVELE9BQU8sU0FBUztTQUNYLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFuQkQsd0JBbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZGVudCBmcm9tICdkZWRlbnQnO1xuaW1wb3J0IHsgZXNjYXBlIGFzIGVzY2FwZUh0bWwsIHJlcGVhdCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgVEVTVF9SVU5fUEhBU0UgZnJvbSAnLi4vLi4vdGVzdC1ydW4vcGhhc2UnO1xuXG5jb25zdCBTVUJUSVRMRVMgPSB7XG4gICAgW1RFU1RfUlVOX1BIQVNFLmluaXRpYWxdOiAgICAgICAgICAgICAgICAgJycsXG4gICAgW1RFU1RfUlVOX1BIQVNFLmluRml4dHVyZUJlZm9yZUhvb2tdOiAgICAgJzxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj5FcnJvciBpbiBmaXh0dXJlLmJlZm9yZSBob29rPC9zcGFuPlxcbicsXG4gICAgW1RFU1RfUlVOX1BIQVNFLmluRml4dHVyZUJlZm9yZUVhY2hIb29rXTogJzxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj5FcnJvciBpbiBmaXh0dXJlLmJlZm9yZUVhY2ggaG9vazwvc3Bhbj5cXG4nLFxuICAgIFtURVNUX1JVTl9QSEFTRS5pblRlc3RCZWZvcmVIb29rXTogICAgICAgICc8c3BhbiBjbGFzcz1cInN1YnRpdGxlXCI+RXJyb3IgaW4gdGVzdC5iZWZvcmUgaG9vazwvc3Bhbj5cXG4nLFxuICAgIFtURVNUX1JVTl9QSEFTRS5pblRlc3RdOiAgICAgICAgICAgICAgICAgICcnLFxuICAgIFtURVNUX1JVTl9QSEFTRS5pblRlc3RBZnRlckhvb2tdOiAgICAgICAgICc8c3BhbiBjbGFzcz1cInN1YnRpdGxlXCI+RXJyb3IgaW4gdGVzdC5hZnRlciBob29rPC9zcGFuPlxcbicsXG4gICAgW1RFU1RfUlVOX1BIQVNFLmluRml4dHVyZUFmdGVyRWFjaEhvb2tdOiAgJzxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj5FcnJvciBpbiBmaXh0dXJlLmFmdGVyRWFjaCBob29rPC9zcGFuPlxcbicsXG4gICAgW1RFU1RfUlVOX1BIQVNFLmluRml4dHVyZUFmdGVySG9va106ICAgICAgJzxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj5FcnJvciBpbiBmaXh0dXJlLmFmdGVyIGhvb2s8L3NwYW4+XFxuJyxcbiAgICBbVEVTVF9SVU5fUEhBU0UuaW5Sb2xlSW5pdGlhbGl6ZXJdOiAgICAgICAnPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZVwiPkVycm9yIGluIFJvbGUgaW5pdGlhbGl6ZXI8L3NwYW4+XFxuJyxcbiAgICBbVEVTVF9SVU5fUEhBU0UuaW5Cb29rbWFya1Jlc3RvcmVdOiAgICAgICAnPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZVwiPkVycm9yIHdoaWxlIHJlc3RvcmluZyBjb25maWd1cmF0aW9uIGFmdGVyIFJvbGUgc3dpdGNoPC9zcGFuPlxcbidcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGb3JiaWRkZW5DaGFyc0xpc3QgKGZvcmJpZGRlbkNoYXJzTGlzdCkge1xuICAgIHJldHVybiBmb3JiaWRkZW5DaGFyc0xpc3QubWFwKGNoYXJJbmZvID0+IGBcXHRcIiR7Y2hhckluZm8uY2hhcnN9XCIgYXQgaW5kZXggJHtjaGFySW5mby5pbmRleH1cXG5gKS5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVybCAodXJsKSB7XG4gICAgcmV0dXJuIGA8YSBocmVmPVwiJHt1cmx9XCI+JHt1cmx9PC9hPmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTZWxlY3RvckNhbGxzdGFjayAoYXBpRm5DaGFpbiwgYXBpRm5JbmRleCwgdmlld3BvcnRXaWR0aCkge1xuICAgIGlmICh0eXBlb2YgYXBpRm5JbmRleCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybiAnJztcblxuICAgIGNvbnN0IGVtcHR5U3BhY2VzICAgID0gMTA7XG4gICAgY29uc3QgZWxsaXBzaXMgICAgICAgPSAnLi4uKSc7XG4gICAgY29uc3QgYXZhaWxhYmxlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC0gZW1wdHlTcGFjZXM7XG5cbiAgICByZXR1cm4gYXBpRm5DaGFpbi5tYXAoKGFwaUZuLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgZm9ybWF0dGVkQXBpRm4gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCk7XG5cbiAgICAgICAgZm9ybWF0dGVkQXBpRm4gKz0gaW5kZXggPT09IGFwaUZuSW5kZXggPyAnPicgOiAnICc7XG4gICAgICAgIGZvcm1hdHRlZEFwaUZuICs9ICcgfCAnO1xuICAgICAgICBmb3JtYXR0ZWRBcGlGbiArPSBpbmRleCAhPT0gMCA/ICcgICcgOiAnJztcbiAgICAgICAgZm9ybWF0dGVkQXBpRm4gKz0gYXBpRm47XG5cbiAgICAgICAgaWYgKGZvcm1hdHRlZEFwaUZuLmxlbmd0aCA+IGF2YWlsYWJsZVdpZHRoKVxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZEFwaUZuLnN1YnN0cigwLCBhdmFpbGFibGVXaWR0aCAtIGVtcHR5U3BhY2VzKSArIGVsbGlwc2lzO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRBcGlGbjtcbiAgICB9KS5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VMZWFkaW5nU3BhY2VzV2l0aE5ic3AgKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXiArL21nLCBtYXRjaCA9PiB7XG4gICAgICAgIHJldHVybiByZXBlYXQoJyZuYnNwOycsIG1hdGNoLmxlbmd0aCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrdXAgKGVyciwgbXNnTWFya3VwLCBvcHRzID0ge30pIHtcbiAgICBtc2dNYXJrdXAgPSBkZWRlbnQoYFxuICAgICAgICAke1NVQlRJVExFU1tlcnIudGVzdFJ1blBoYXNlXX08ZGl2IGNsYXNzPVwibWVzc2FnZVwiPiR7ZGVkZW50KG1zZ01hcmt1cCl9PC9kaXY+XG5cbiAgICAgICAgPHN0cm9uZz5Ccm93c2VyOjwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cInVzZXItYWdlbnRcIj4ke2Vyci51c2VyQWdlbnR9PC9zcGFuPlxuICAgIGApO1xuXG4gICAgaWYgKGVyci5zY3JlZW5zaG90UGF0aClcbiAgICAgICAgbXNnTWFya3VwICs9IGBcXG48ZGl2IGNsYXNzPVwic2NyZWVuc2hvdC1pbmZvXCI+PHN0cm9uZz5TY3JlZW5zaG90Ojwvc3Ryb25nPiA8YSBjbGFzcz1cInNjcmVlbnNob3QtcGF0aFwiPiR7ZXNjYXBlSHRtbChlcnIuc2NyZWVuc2hvdFBhdGgpfTwvYT48L2Rpdj5gO1xuXG4gICAgaWYgKCFvcHRzLndpdGhvdXRDYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZU1hcmt1cCA9IGVyci5nZXRDYWxsc2l0ZU1hcmt1cCgpO1xuXG4gICAgICAgIGlmIChjYWxsc2l0ZU1hcmt1cClcbiAgICAgICAgICAgIG1zZ01hcmt1cCArPSBgXFxuXFxuJHtjYWxsc2l0ZU1hcmt1cH1gO1xuICAgIH1cblxuICAgIHJldHVybiBtc2dNYXJrdXBcbiAgICAgICAgLnJlcGxhY2UoJ1xcdCcsICcmbmJzcDsnLnJlcGVhdCg0KSk7XG59XG4iXX0=