@web/test-runner-saucelabs
Version:
Saucelabs launcher for Web Test Runner
68 lines • 4.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSauceLabsLauncher = void 0;
const nanoid_1 = require("nanoid");
const SauceLabsLauncher_js_1 = require("./SauceLabsLauncher.js");
const SauceLabsLauncherManager_js_1 = require("./SauceLabsLauncherManager.js");
function createSauceLabsLauncher(saucelabsOptions, saucelabsCapabilities, sauceConnectOptions) {
if (saucelabsOptions == null) {
throw new Error('Options are required to set user and key.');
}
if (typeof saucelabsOptions.user !== 'string') {
throw new Error('Missing user in options');
}
if (typeof saucelabsOptions.key !== 'string') {
throw new Error('Missing key in options');
}
const finalSauceLabsOptions = Object.assign({}, saucelabsOptions);
if (typeof finalSauceLabsOptions.region !== 'string') {
finalSauceLabsOptions.region = 'us';
}
const finalConnectOptions = Object.assign({}, sauceConnectOptions);
if (typeof finalConnectOptions.tunnelIdentifier !== 'string') {
finalConnectOptions.tunnelIdentifier = `web-test-runner-${(0, nanoid_1.nanoid)()}`;
}
const manager = new SauceLabsLauncherManager_js_1.SauceLabsLauncherManager(finalSauceLabsOptions, finalConnectOptions);
return function sauceLabsLauncher(capabilities) {
var _a, _b, _c, _d, _e, _f, _g, _h;
if (capabilities == null) {
throw new Error('Capabilities are required.');
}
let finalCapabilities = Object.assign({}, capabilities);
const finalSauceCapabilities = Object.assign({ tunnelIdentifier: finalConnectOptions.tunnelIdentifier }, saucelabsCapabilities);
// W3C capabilities: only browserVersion is mandatory, platformName is optional.
// Note that setting 'sauce:options' forces Sauce Labs to use W3C capabilities.
if (capabilities.browserVersion) {
// version is not a valid W3C key.
delete finalCapabilities.version;
// platform is not a valid W3C key and will throw, use platformName instead.
if (capabilities.platform) {
finalCapabilities.platformName =
finalCapabilities.platformName || finalCapabilities.platform;
delete finalCapabilities.platform;
}
finalCapabilities['sauce:options'] = Object.assign(Object.assign({}, finalSauceCapabilities), (finalCapabilities['sauce:options'] || {}));
}
else {
// JWP capabilities for remote environments not yet supporting W3C.
// This enables running tests on iPhone Simulators in Sauce Labs.
finalCapabilities = Object.assign(Object.assign({}, finalCapabilities), finalSauceCapabilities);
}
// Type cast to not fail on snake case syntax e.g. browser_version.
const caps = finalCapabilities;
const browserName = (_c = (_b = (_a = caps.browserName) !== null && _a !== void 0 ? _a : caps.browser) !== null && _b !== void 0 ? _b : caps.device) !== null && _c !== void 0 ? _c : 'unknown';
const browserVersion = (_f = (_e = (_d = caps.browserVersion) !== null && _d !== void 0 ? _d : caps.version) !== null && _e !== void 0 ? _e : caps.browser_version) !== null && _f !== void 0 ? _f : '';
const platform = (_h = (_g = caps.platformName) !== null && _g !== void 0 ? _g : caps.platform) !== null && _h !== void 0 ? _h : '';
const browserIdentifier = `${browserName}${browserVersion}${platform}`;
const options = {
user: finalSauceLabsOptions.user,
key: finalSauceLabsOptions.key,
region: finalSauceLabsOptions.region,
logLevel: 'error',
capabilities: Object.assign({}, finalCapabilities),
};
return new SauceLabsLauncher_js_1.SauceLabsLauncher(manager, browserIdentifier, options);
};
}
exports.createSauceLabsLauncher = createSauceLabsLauncher;
//# sourceMappingURL=createSauceLabsLauncher.js.map