testcafe
Version:
Automated browser testing for the modern web development stack.
63 lines • 8 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 moment_1 = __importDefault(require("moment"));
const capturer_1 = __importDefault(require("./capturer"));
const path_pattern_1 = __importDefault(require("../utils/path-pattern"));
const get_common_path_1 = __importDefault(require("../utils/get-common-path"));
const SCREENSHOT_EXTENSION = 'png';
class Screenshots {
constructor(path, pattern) {
this.enabled = !!path;
this.screenshotsPath = path;
this.screenshotsPattern = pattern;
this.testEntries = [];
this.now = moment_1.default();
}
_addTestEntry(test) {
const testEntry = {
test: test,
screenshots: []
};
this.testEntries.push(testEntry);
return testEntry;
}
_getTestEntry(test) {
return lodash_1.find(this.testEntries, entry => entry.test === test);
}
_ensureTestEntry(test) {
let testEntry = this._getTestEntry(test);
if (!testEntry)
testEntry = this._addTestEntry(test);
return testEntry;
}
getScreenshotsInfo(test) {
return this._getTestEntry(test).screenshots;
}
hasCapturedFor(test) {
return this.getScreenshotsInfo(test).length > 0;
}
getPathFor(test) {
const testEntry = this._getTestEntry(test);
const screenshotPaths = testEntry.screenshots.map(screenshot => screenshot.screenshotPath);
return get_common_path_1.default(screenshotPaths);
}
createCapturerFor(test, testIndex, quarantine, connection, warningLog) {
const testEntry = this._ensureTestEntry(test);
const pathPattern = new path_pattern_1.default(this.screenshotsPattern, SCREENSHOT_EXTENSION, {
testIndex,
quarantineAttempt: quarantine ? quarantine.getNextAttemptNumber() : null,
now: this.now,
fixture: test.fixture.name,
test: test.name,
parsedUserAgent: connection.browserInfo.parsedUserAgent,
});
return new capturer_1.default(this.screenshotsPath, testEntry, connection, pathPattern, warningLog);
}
}
exports.default = Screenshots;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyZWVuc2hvdHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDBEQUFrQztBQUNsQyx5RUFBZ0Q7QUFDaEQsK0VBQXFEO0FBR3JELE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBRW5DLE1BQXFCLFdBQVc7SUFDNUIsWUFBYSxJQUFJLEVBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBTSxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFVLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxHQUFrQixnQkFBTSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELGFBQWEsQ0FBRSxJQUFJO1FBQ2YsTUFBTSxTQUFTLEdBQUc7WUFDZCxJQUFJLEVBQVMsSUFBSTtZQUNqQixXQUFXLEVBQUUsRUFBRTtTQUNsQixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakMsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELGFBQWEsQ0FBRSxJQUFJO1FBQ2YsT0FBTyxhQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGdCQUFnQixDQUFFLElBQUk7UUFDbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUztZQUNWLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0IsQ0FBRSxJQUFJO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDaEQsQ0FBQztJQUVELGNBQWMsQ0FBRSxJQUFJO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBRSxJQUFJO1FBQ1osTUFBTSxTQUFTLEdBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRixPQUFPLHlCQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGlCQUFpQixDQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO1FBQ2xFLE1BQU0sU0FBUyxHQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLHNCQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFO1lBQy9FLFNBQVM7WUFDVCxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3hFLEdBQUcsRUFBZ0IsSUFBSSxDQUFDLEdBQUc7WUFDM0IsT0FBTyxFQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUNwQyxJQUFJLEVBQWUsSUFBSSxDQUFDLElBQUk7WUFDNUIsZUFBZSxFQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsZUFBZTtTQUM1RCxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksa0JBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDSjtBQTdERCw4QkE2REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBDYXB0dXJlciBmcm9tICcuL2NhcHR1cmVyJztcbmltcG9ydCBQYXRoUGF0dGVybiBmcm9tICcuLi91dGlscy9wYXRoLXBhdHRlcm4nO1xuaW1wb3J0IGdldENvbW1vblBhdGggZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbW1vbi1wYXRoJztcblxuXG5jb25zdCBTQ1JFRU5TSE9UX0VYVEVOU0lPTiA9ICdwbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY3JlZW5zaG90cyB7XG4gICAgY29uc3RydWN0b3IgKHBhdGgsIHBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5lbmFibGVkICAgICAgICAgICAgPSAhIXBhdGg7XG4gICAgICAgIHRoaXMuc2NyZWVuc2hvdHNQYXRoICAgID0gcGF0aDtcbiAgICAgICAgdGhpcy5zY3JlZW5zaG90c1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnRlc3RFbnRyaWVzICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLm5vdyAgICAgICAgICAgICAgICA9IG1vbWVudCgpO1xuICAgIH1cblxuICAgIF9hZGRUZXN0RW50cnkgKHRlc3QpIHtcbiAgICAgICAgY29uc3QgdGVzdEVudHJ5ID0ge1xuICAgICAgICAgICAgdGVzdDogICAgICAgIHRlc3QsXG4gICAgICAgICAgICBzY3JlZW5zaG90czogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRlc3RFbnRyaWVzLnB1c2godGVzdEVudHJ5KTtcblxuICAgICAgICByZXR1cm4gdGVzdEVudHJ5O1xuICAgIH1cblxuICAgIF9nZXRUZXN0RW50cnkgKHRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGZpbmQodGhpcy50ZXN0RW50cmllcywgZW50cnkgPT4gZW50cnkudGVzdCA9PT0gdGVzdCk7XG4gICAgfVxuXG4gICAgX2Vuc3VyZVRlc3RFbnRyeSAodGVzdCkge1xuICAgICAgICBsZXQgdGVzdEVudHJ5ID0gdGhpcy5fZ2V0VGVzdEVudHJ5KHRlc3QpO1xuXG4gICAgICAgIGlmICghdGVzdEVudHJ5KVxuICAgICAgICAgICAgdGVzdEVudHJ5ID0gdGhpcy5fYWRkVGVzdEVudHJ5KHRlc3QpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0RW50cnk7XG4gICAgfVxuXG4gICAgZ2V0U2NyZWVuc2hvdHNJbmZvICh0ZXN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRUZXN0RW50cnkodGVzdCkuc2NyZWVuc2hvdHM7XG4gICAgfVxuXG4gICAgaGFzQ2FwdHVyZWRGb3IgKHRlc3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuc2hvdHNJbmZvKHRlc3QpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0UGF0aEZvciAodGVzdCkge1xuICAgICAgICBjb25zdCB0ZXN0RW50cnkgICAgICAgPSB0aGlzLl9nZXRUZXN0RW50cnkodGVzdCk7XG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RQYXRocyA9IHRlc3RFbnRyeS5zY3JlZW5zaG90cy5tYXAoc2NyZWVuc2hvdCA9PiBzY3JlZW5zaG90LnNjcmVlbnNob3RQYXRoKTtcblxuICAgICAgICByZXR1cm4gZ2V0Q29tbW9uUGF0aChzY3JlZW5zaG90UGF0aHMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUNhcHR1cmVyRm9yICh0ZXN0LCB0ZXN0SW5kZXgsIHF1YXJhbnRpbmUsIGNvbm5lY3Rpb24sIHdhcm5pbmdMb2cpIHtcbiAgICAgICAgY29uc3QgdGVzdEVudHJ5ICAgPSB0aGlzLl9lbnN1cmVUZXN0RW50cnkodGVzdCk7XG4gICAgICAgIGNvbnN0IHBhdGhQYXR0ZXJuID0gbmV3IFBhdGhQYXR0ZXJuKHRoaXMuc2NyZWVuc2hvdHNQYXR0ZXJuLCBTQ1JFRU5TSE9UX0VYVEVOU0lPTiwge1xuICAgICAgICAgICAgdGVzdEluZGV4LFxuICAgICAgICAgICAgcXVhcmFudGluZUF0dGVtcHQ6IHF1YXJhbnRpbmUgPyBxdWFyYW50aW5lLmdldE5leHRBdHRlbXB0TnVtYmVyKCkgOiBudWxsLFxuICAgICAgICAgICAgbm93OiAgICAgICAgICAgICAgIHRoaXMubm93LFxuICAgICAgICAgICAgZml4dHVyZTogICAgICAgICAgIHRlc3QuZml4dHVyZS5uYW1lLFxuICAgICAgICAgICAgdGVzdDogICAgICAgICAgICAgIHRlc3QubmFtZSxcbiAgICAgICAgICAgIHBhcnNlZFVzZXJBZ2VudDogICBjb25uZWN0aW9uLmJyb3dzZXJJbmZvLnBhcnNlZFVzZXJBZ2VudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDYXB0dXJlcih0aGlzLnNjcmVlbnNob3RzUGF0aCwgdGVzdEVudHJ5LCBjb25uZWN0aW9uLCBwYXRoUGF0dGVybiwgd2FybmluZ0xvZyk7XG4gICAgfVxufVxuIl19