testcafe
Version:
Automated browser testing for the modern web development stack.
70 lines • 8.87 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const parse5_1 = require("parse5");
const callsite_record_1 = require("callsite-record");
const templates_1 = __importDefault(require("./templates"));
const create_stack_filter_1 = __importDefault(require("../create-stack-filter"));
const parser = new parse5_1.Parser();
class TestRunErrorFormattableAdapter {
constructor(err, metaInfo) {
this.TEMPLATES = templates_1.default;
this.userAgent = metaInfo.userAgent;
this.screenshotPath = metaInfo.screenshotPath;
this.testRunPhase = metaInfo.testRunPhase;
lodash_1.assignIn(this, err);
this.callsite = this.callsite || metaInfo.callsite;
}
static _getSelector(node) {
const classAttr = lodash_1.find(node.attrs, { name: 'class' });
const cls = classAttr && classAttr.value;
return cls ? `${node.tagName} ${cls}` : node.tagName;
}
static _decorateHtml(node, decorator) {
let msg = '';
if (node.nodeName === '#text')
msg = node.value;
else {
if (node.childNodes.length) {
msg += node.childNodes
.map(childNode => TestRunErrorFormattableAdapter._decorateHtml(childNode, decorator))
.join('');
}
if (node.nodeName !== '#document-fragment') {
const selector = TestRunErrorFormattableAdapter._getSelector(node);
msg = decorator[selector](msg, node.attrs);
}
}
return msg;
}
getErrorMarkup(viewportWidth) {
return this.TEMPLATES[this.code](this, viewportWidth);
}
getCallsiteMarkup() {
if (!this.callsite)
return '';
// NOTE: for raw API callsites
if (typeof this.callsite === 'string')
return this.callsite;
try {
return this.callsite.renderSync({
renderer: callsite_record_1.renderers.html,
stackFilter: create_stack_filter_1.default(Error.stackTraceLimit)
});
}
catch (err) {
return '';
}
}
formatMessage(decorator, viewportWidth) {
const msgHtml = this.getErrorMarkup(viewportWidth);
const fragment = parser.parseFragment(msgHtml);
return TestRunErrorFormattableAdapter._decorateHtml(fragment, decorator);
}
}
exports.default = TestRunErrorFormattableAdapter;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGFibGUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUF3QztBQUN4QyxtQ0FBZ0M7QUFDaEMscURBQTRDO0FBQzVDLDREQUFvQztBQUNwQyxpRkFBdUQ7QUFFdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQztBQUU1QixNQUFxQiw4QkFBOEI7SUFDL0MsWUFBYSxHQUFHLEVBQUUsUUFBUTtRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLG1CQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLFNBQVMsR0FBUSxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFFNUMsaUJBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUUsSUFBSTtRQUNyQixNQUFNLFNBQVMsR0FBRyxhQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sR0FBRyxHQUFTLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDO1FBRS9DLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUUsSUFBSSxFQUFFLFNBQVM7UUFDakMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU87WUFDekIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDaEI7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUN4QixHQUFHLElBQUksSUFBSSxDQUFDLFVBQVU7cUJBQ2pCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7cUJBQ3BGLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqQjtZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxvQkFBb0IsRUFBRTtnQkFDeEMsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVuRSxHQUFHLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUM7U0FDSjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELGNBQWMsQ0FBRSxhQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDZCxPQUFPLEVBQUUsQ0FBQztRQUVkLDhCQUE4QjtRQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV6QixJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsUUFBUSxFQUFLLDJCQUFTLENBQUMsSUFBSTtnQkFDM0IsV0FBVyxFQUFFLDZCQUFpQixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7YUFDeEQsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNSLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFFLFNBQVMsRUFBRSxhQUFhO1FBQ25DLE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQyxPQUFPLDhCQUE4QixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0UsQ0FBQztDQUNKO0FBdkVELGlEQXVFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbmQsIGFzc2lnbkluIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJ3BhcnNlNSc7XG5pbXBvcnQgeyByZW5kZXJlcnMgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuaW1wb3J0IFRFTVBMQVRFUyBmcm9tICcuL3RlbXBsYXRlcyc7XG5pbXBvcnQgY3JlYXRlU3RhY2tGaWx0ZXIgZnJvbSAnLi4vY3JlYXRlLXN0YWNrLWZpbHRlcic7XG5cbmNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyIHtcbiAgICBjb25zdHJ1Y3RvciAoZXJyLCBtZXRhSW5mbykge1xuICAgICAgICB0aGlzLlRFTVBMQVRFUyA9IFRFTVBMQVRFUztcblxuICAgICAgICB0aGlzLnVzZXJBZ2VudCAgICAgID0gbWV0YUluZm8udXNlckFnZW50O1xuICAgICAgICB0aGlzLnNjcmVlbnNob3RQYXRoID0gbWV0YUluZm8uc2NyZWVuc2hvdFBhdGg7XG4gICAgICAgIHRoaXMudGVzdFJ1blBoYXNlICAgPSBtZXRhSW5mby50ZXN0UnVuUGhhc2U7XG5cbiAgICAgICAgYXNzaWduSW4odGhpcywgZXJyKTtcblxuICAgICAgICB0aGlzLmNhbGxzaXRlID0gdGhpcy5jYWxsc2l0ZSB8fCBtZXRhSW5mby5jYWxsc2l0ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2dldFNlbGVjdG9yIChub2RlKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzQXR0ciA9IGZpbmQobm9kZS5hdHRycywgeyBuYW1lOiAnY2xhc3MnIH0pO1xuICAgICAgICBjb25zdCBjbHMgICAgICAgPSBjbGFzc0F0dHIgJiYgY2xhc3NBdHRyLnZhbHVlO1xuXG4gICAgICAgIHJldHVybiBjbHMgPyBgJHtub2RlLnRhZ05hbWV9ICR7Y2xzfWAgOiBub2RlLnRhZ05hbWU7XG4gICAgfVxuXG4gICAgc3RhdGljIF9kZWNvcmF0ZUh0bWwgKG5vZGUsIGRlY29yYXRvcikge1xuICAgICAgICBsZXQgbXNnID0gJyc7XG5cbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXG4gICAgICAgICAgICBtc2cgPSBub2RlLnZhbHVlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbXNnICs9IG5vZGUuY2hpbGROb2Rlc1xuICAgICAgICAgICAgICAgICAgICAubWFwKGNoaWxkTm9kZSA9PiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIuX2RlY29yYXRlSHRtbChjaGlsZE5vZGUsIGRlY29yYXRvcikpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgIT09ICcjZG9jdW1lbnQtZnJhZ21lbnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIuX2dldFNlbGVjdG9yKG5vZGUpO1xuXG4gICAgICAgICAgICAgICAgbXNnID0gZGVjb3JhdG9yW3NlbGVjdG9yXShtc2csIG5vZGUuYXR0cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG5cbiAgICBnZXRFcnJvck1hcmt1cCAodmlld3BvcnRXaWR0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5URU1QTEFURVNbdGhpcy5jb2RlXSh0aGlzLCB2aWV3cG9ydFdpZHRoKTtcbiAgICB9XG5cbiAgICBnZXRDYWxsc2l0ZU1hcmt1cCAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWxsc2l0ZSlcbiAgICAgICAgICAgIHJldHVybiAnJztcblxuICAgICAgICAvLyBOT1RFOiBmb3IgcmF3IEFQSSBjYWxsc2l0ZXNcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGxzaXRlID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGxzaXRlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsc2l0ZS5yZW5kZXJTeW5jKHtcbiAgICAgICAgICAgICAgICByZW5kZXJlcjogICAgcmVuZGVyZXJzLmh0bWwsXG4gICAgICAgICAgICAgICAgc3RhY2tGaWx0ZXI6IGNyZWF0ZVN0YWNrRmlsdGVyKEVycm9yLnN0YWNrVHJhY2VMaW1pdClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1hdE1lc3NhZ2UgKGRlY29yYXRvciwgdmlld3BvcnRXaWR0aCkge1xuICAgICAgICBjb25zdCBtc2dIdG1sICA9IHRoaXMuZ2V0RXJyb3JNYXJrdXAodmlld3BvcnRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gcGFyc2VyLnBhcnNlRnJhZ21lbnQobXNnSHRtbCk7XG5cbiAgICAgICAgcmV0dXJuIFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlci5fZGVjb3JhdGVIdG1sKGZyYWdtZW50LCBkZWNvcmF0b3IpO1xuICAgIH1cbn1cbiJdfQ==