testcafe
Version:
Automated browser testing for the modern web development stack.
112 lines • 16.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const pinkie_1 = __importDefault(require("pinkie"));
const built_in_1 = __importDefault(require("./built-in"));
const plugin_host_1 = __importDefault(require("./plugin-host"));
const parse_provider_name_1 = __importDefault(require("./parse-provider-name"));
const _1 = __importDefault(require("./"));
const connection_1 = __importDefault(require("../connection"));
const runtime_1 = require("../../errors/runtime");
const types_1 = require("../../errors/types");
const BROWSER_PROVIDER_RE = /^([^:\s]+):?(.*)?$/;
exports.default = {
providersCache: {},
async _handlePathAndCmd(alias) {
const browserName = JSON.stringify(alias);
const providerName = 'path';
const provider = await this.getProvider(providerName);
return { provider, providerName, browserName };
},
async _parseAliasString(alias) {
const providerRegExpMatch = BROWSER_PROVIDER_RE.exec(alias);
if (!providerRegExpMatch)
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotFindBrowser, alias);
let providerName = providerRegExpMatch[1];
let browserName = providerRegExpMatch[2] || '';
let provider = await this.getProvider(providerName);
if (!provider && providerRegExpMatch[2])
provider = await this.getProvider(providerName + ':');
if (!provider) {
providerName = 'locally-installed';
provider = await this.getProvider(providerName);
browserName = providerRegExpMatch[1] || '';
}
return { provider, providerName, browserName };
},
async _parseAlias(alias) {
if (alias.browserName && alias.providerName && alias.provider)
return alias;
if (alias && alias.path)
return this._handlePathAndCmd(alias);
if (typeof alias === 'string')
return this._parseAliasString(alias);
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotFindBrowser, alias);
},
async _getInfoForAllBrowserNames(provider, providerName) {
const allBrowserNames = provider.isMultiBrowser ?
await provider.getBrowserList() :
[];
if (!allBrowserNames.length)
return { provider, providerName, browserName: '' };
return allBrowserNames
.map(browserName => ({ provider, providerName, browserName }));
},
_getProviderModule(providerName, moduleName) {
try {
const providerObject = require(moduleName);
this.addProvider(providerName, providerObject);
return this._getProviderFromCache(providerName);
}
catch (e) {
return null;
}
},
_getProviderFromCache(providerName) {
return this.providersCache[providerName] || null;
},
_getBuiltinProvider(providerName) {
const providerObject = built_in_1.default[providerName];
if (!providerObject)
return null;
this.addProvider(providerName, providerObject);
return this._getProviderFromCache(providerName);
},
async getBrowserInfo(alias) {
if (alias instanceof connection_1.default)
return alias;
const browserInfo = await this._parseAlias(alias);
const { provider, providerName, browserName } = browserInfo;
if (browserName === 'all')
return await this._getInfoForAllBrowserNames(provider, providerName);
if (!await provider.isValidBrowserName(browserName))
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotFindBrowser, alias);
return Object.assign({ alias }, browserInfo);
},
addProvider(providerName, providerObject) {
providerName = parse_provider_name_1.default(providerName).providerName;
this.providersCache[providerName] = new _1.default(new plugin_host_1.default(providerObject, providerName));
},
removeProvider(providerName) {
providerName = parse_provider_name_1.default(providerName).providerName;
delete this.providersCache[providerName];
},
async getProvider(providerName) {
const parsedProviderName = parse_provider_name_1.default(providerName);
const moduleName = parsedProviderName.moduleName;
providerName = parsedProviderName.providerName;
const provider = this._getProviderFromCache(providerName) ||
this._getProviderModule(providerName, moduleName) ||
this._getBuiltinProvider(providerName);
if (provider)
await this.providersCache[providerName].init();
return provider;
},
dispose() {
return pinkie_1.default.all(Object.values(this.providersCache).map(item => item.dispose()));
}
};
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icm93c2VyL3Byb3ZpZGVyL3Bvb2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNkI7QUFDN0IsMERBQTRDO0FBQzVDLGdFQUFzRDtBQUN0RCxnRkFBc0Q7QUFDdEQsMENBQWlDO0FBQ2pDLCtEQUE4QztBQUM5QyxrREFBb0Q7QUFDcEQsOENBQW9EO0FBRXBELE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUM7QUFFakQsa0JBQWU7SUFDWCxjQUFjLEVBQUUsRUFBRTtJQUVsQixLQUFLLENBQUMsaUJBQWlCLENBQUUsS0FBSztRQUMxQixNQUFNLFdBQVcsR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBRSxLQUFLO1FBQzFCLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxtQkFBbUI7WUFDcEIsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVwRSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLFdBQVcsR0FBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFaEQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FB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UixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLGdCQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IEJVSUxUX0lOX1BST1ZJREVSUyBmcm9tICcuL2J1aWx0LWluJztcbmltcG9ydCBCcm93c2VyUHJvdmlkZXJQbHVnaW5Ib3N0IGZyb20gJy4vcGx1Z2luLWhvc3QnO1xuaW1wb3J0IHBhcnNlUHJvdmlkZXJOYW1lIGZyb20gJy4vcGFyc2UtcHJvdmlkZXItbmFtZSc7XG5pbXBvcnQgQnJvd3NlclByb3ZpZGVyIGZyb20gJy4vJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcblxuY29uc3QgQlJPV1NFUl9QUk9WSURFUl9SRSA9IC9eKFteOlxcc10rKTo/KC4qKT8kLztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHByb3ZpZGVyc0NhY2hlOiB7fSxcblxuICAgIGFzeW5jIF9oYW5kbGVQYXRoQW5kQ21kIChhbGlhcykge1xuICAgICAgICBjb25zdCBicm93c2VyTmFtZSAgPSBKU09OLnN0cmluZ2lmeShhbGlhcyk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9ICdwYXRoJztcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgICAgID0gYXdhaXQgdGhpcy5nZXRQcm92aWRlcihwcm92aWRlck5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7IHByb3ZpZGVyLCBwcm92aWRlck5hbWUsIGJyb3dzZXJOYW1lIH07XG4gICAgfSxcblxuICAgIGFzeW5jIF9wYXJzZUFsaWFzU3RyaW5nIChhbGlhcykge1xuICAgICAgICBjb25zdCBwcm92aWRlclJlZ0V4cE1hdGNoID0gQlJPV1NFUl9QUk9WSURFUl9SRS5leGVjKGFsaWFzKTtcblxuICAgICAgICBpZiAoIXByb3ZpZGVyUmVnRXhwTWF0Y2gpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRCcm93c2VyLCBhbGlhcyk7XG5cbiAgICAgICAgbGV0IHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyUmVnRXhwTWF0Y2hbMV07XG4gICAgICAgIGxldCBicm93c2VyTmFtZSAgPSBwcm92aWRlclJlZ0V4cE1hdGNoWzJdIHx8ICcnO1xuXG4gICAgICAgIGxldCBwcm92aWRlciA9IGF3YWl0IHRoaXMuZ2V0UHJvdmlkZXIocHJvdmlkZXJOYW1lKTtcblxuICAgICAgICBpZiAoIXByb3ZpZGVyICYmIHByb3ZpZGVyUmVnRXhwTWF0Y2hbMl0pXG4gICAgICAgICAgICBwcm92aWRlciA9IGF3YWl0IHRoaXMuZ2V0UHJvdmlkZXIocHJvdmlkZXJOYW1lICsgJzonKTtcblxuICAgICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgICAgICBwcm92aWRlck5hbWUgPSAnbG9jYWxseS1pbnN0YWxsZWQnO1xuICAgICAgICAgICAgcHJvdmlkZXIgICAgID0gYXdhaXQgdGhpcy5nZXRQcm92aWRlcihwcm92aWRlck5hbWUpO1xuICAgICAgICAgICAgYnJvd3Nlck5hbWUgID0gcHJvdmlkZXJSZWdFeHBNYXRjaFsxXSB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHByb3ZpZGVyLCBwcm92aWRlck5hbWUsIGJyb3dzZXJOYW1lIH07XG4gICAgfSxcblxuICAgIGFzeW5jIF9wYXJzZUFsaWFzIChhbGlhcykge1xuICAgICAgICBpZiAoYWxpYXMuYnJvd3Nlck5hbWUgJiYgYWxpYXMucHJvdmlkZXJOYW1lICYmIGFsaWFzLnByb3ZpZGVyKVxuICAgICAgICAgICAgcmV0dXJuIGFsaWFzO1xuXG4gICAgICAgIGlmIChhbGlhcyAmJiBhbGlhcy5wYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZVBhdGhBbmRDbWQoYWxpYXMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlQWxpYXNTdHJpbmcoYWxpYXMpO1xuXG4gICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEJyb3dzZXIsIGFsaWFzKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgX2dldEluZm9Gb3JBbGxCcm93c2VyTmFtZXMgKHByb3ZpZGVyLCBwcm92aWRlck5hbWUpIHtcbiAgICAgICAgY29uc3QgYWxsQnJvd3Nlck5hbWVzID0gcHJvdmlkZXIuaXNNdWx0aUJyb3dzZXIgP1xuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXIuZ2V0QnJvd3Nlckxpc3QoKSA6XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIWFsbEJyb3dzZXJOYW1lcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4geyBwcm92aWRlciwgcHJvdmlkZXJOYW1lLCBicm93c2VyTmFtZTogJycgfTtcblxuICAgICAgICByZXR1cm4gYWxsQnJvd3Nlck5hbWVzXG4gICAgICAgICAgICAubWFwKGJyb3dzZXJOYW1lID0+ICh7IHByb3ZpZGVyLCBwcm92aWRlck5hbWUsIGJyb3dzZXJOYW1lIH0pKTtcbiAgICB9LFxuXG4gICAgX2dldFByb3ZpZGVyTW9kdWxlIChwcm92aWRlck5hbWUsIG1vZHVsZU5hbWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyT2JqZWN0ID0gcmVxdWlyZShtb2R1bGVOYW1lKTtcblxuICAgICAgICAgICAgdGhpcy5hZGRQcm92aWRlcihwcm92aWRlck5hbWUsIHByb3ZpZGVyT2JqZWN0KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm92aWRlckZyb21DYWNoZShwcm92aWRlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfZ2V0UHJvdmlkZXJGcm9tQ2FjaGUgKHByb3ZpZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm92aWRlcnNDYWNoZVtwcm92aWRlck5hbWVdIHx8IG51bGw7XG4gICAgfSxcblxuICAgIF9nZXRCdWlsdGluUHJvdmlkZXIgKHByb3ZpZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlck9iamVjdCA9IEJVSUxUX0lOX1BST1ZJREVSU1twcm92aWRlck5hbWVdO1xuXG4gICAgICAgIGlmICghcHJvdmlkZXJPYmplY3QpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICB0aGlzLmFkZFByb3ZpZGVyKHByb3ZpZGVyTmFtZSwgcHJvdmlkZXJPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm92aWRlckZyb21DYWNoZShwcm92aWRlck5hbWUpO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCcm93c2VySW5mbyAoYWxpYXMpIHtcbiAgICAgICAgaWYgKGFsaWFzIGluc3RhbmNlb2YgQnJvd3NlckNvbm5lY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4gYWxpYXM7XG5cbiAgICAgICAgY29uc3QgYnJvd3NlckluZm8gPSBhd2FpdCB0aGlzLl9wYXJzZUFsaWFzKGFsaWFzKTtcblxuICAgICAgICBjb25zdCB7IHByb3ZpZGVyLCBwcm92aWRlck5hbWUsIGJyb3dzZXJOYW1lIH0gPSBicm93c2VySW5mbztcblxuICAgICAgICBpZiAoYnJvd3Nlck5hbWUgPT09ICdhbGwnKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldEluZm9Gb3JBbGxCcm93c2VyTmFtZXMocHJvdmlkZXIsIHByb3ZpZGVyTmFtZSk7XG5cbiAgICAgICAgaWYgKCFhd2FpdCBwcm92aWRlci5pc1ZhbGlkQnJvd3Nlck5hbWUoYnJvd3Nlck5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kQnJvd3NlciwgYWxpYXMpO1xuXG4gICAgICAgIHJldHVybiB7IGFsaWFzLCAuLi5icm93c2VySW5mbyB9O1xuICAgIH0sXG5cbiAgICBhZGRQcm92aWRlciAocHJvdmlkZXJOYW1lLCBwcm92aWRlck9iamVjdCkge1xuICAgICAgICBwcm92aWRlck5hbWUgPSBwYXJzZVByb3ZpZGVyTmFtZShwcm92aWRlck5hbWUpLnByb3ZpZGVyTmFtZTtcblxuICAgICAgICB0aGlzLnByb3ZpZGVyc0NhY2hlW3Byb3ZpZGVyTmFtZV0gPSBuZXcgQnJvd3NlclByb3ZpZGVyKFxuICAgICAgICAgICAgbmV3IEJyb3dzZXJQcm92aWRlclBsdWdpbkhvc3QocHJvdmlkZXJPYmplY3QsIHByb3ZpZGVyTmFtZSlcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlUHJvdmlkZXIgKHByb3ZpZGVyTmFtZSkge1xuICAgICAgICBwcm92aWRlck5hbWUgPSBwYXJzZVByb3ZpZGVyTmFtZShwcm92aWRlck5hbWUpLnByb3ZpZGVyTmFtZTtcblxuICAgICAgICBkZWxldGUgdGhpcy5wcm92aWRlcnNDYWNoZVtwcm92aWRlck5hbWVdO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcm92aWRlciAocHJvdmlkZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFByb3ZpZGVyTmFtZSA9IHBhcnNlUHJvdmlkZXJOYW1lKHByb3ZpZGVyTmFtZSk7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWUgICAgICAgICA9IHBhcnNlZFByb3ZpZGVyTmFtZS5tb2R1bGVOYW1lO1xuXG4gICAgICAgIHByb3ZpZGVyTmFtZSA9IHBhcnNlZFByb3ZpZGVyTmFtZS5wcm92aWRlck5hbWU7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLl9nZXRQcm92aWRlckZyb21DYWNoZShwcm92aWRlck5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldFByb3ZpZGVyTW9kdWxlKHByb3ZpZGVyTmFtZSwgbW9kdWxlTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0QnVpbHRpblByb3ZpZGVyKHByb3ZpZGVyTmFtZSk7XG5cbiAgICAgICAgaWYgKHByb3ZpZGVyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm92aWRlcnNDYWNoZVtwcm92aWRlck5hbWVdLmluaXQoKTtcblxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfSxcblxuICAgIGRpc3Bvc2UgKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0aGlzLnByb3ZpZGVyc0NhY2hlKS5tYXAoaXRlbSA9PiBpdGVtLmRpc3Bvc2UoKSkpO1xuICAgIH1cbn07XG4iXX0=