UNPKG

karma-cbt-launcher

Version:

Custom launcher for Karma that allows testing remotely through CrossBrowserTesting.

133 lines (107 loc) 6.17 kB
'use strict'; function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } /* This code was originally taken and modified from Actano/Marcus Mennemeier's karma-cbt-launcher. The original code can be found at http://github.com/actano/karma-cbt-launcher */ var consoleLogger = require('./console-logger'); var cbtTunnel = require('./tunnel'); var activeSessions = {}; var waitingSessions = {}; var remoteHub = 'http://hub.crossbrowsertesting.com:80/wd/hub'; var log = consoleLogger('cbt-session'); module.exports = { activeSessions: activeSessions, setLogger: function setLogger(logger) { log = logger.create('cbt-session'); cbtTunnel.setLogger(logger); }, register: function register(id) { if (!waitingSessions[id]) waitingSessions[id] = ''; }, create: function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(id) { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: log.debug('Starting session %s', id); if (!activeSessions[id]) { _context2.next = 3; break; } throw new Error('Session ' + id + ' already active'); case 3: delete waitingSessions[id]; activeSessions[id] = ''; _context2.prev = 5; _context2.next = 8; return cbtTunnel.start(); case 8: _context2.next = 14; break; case 10: _context2.prev = 10; _context2.t0 = _context2['catch'](5); console.error(_context2.t0); process.exit(1); case 14: return _context2.abrupt('return', { stop: function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (activeSessions[id]) { _context.next = 2; break; } throw new Error('Session ' + id + ' not active'); case 2: log.debug('Closing session %s', id); delete activeSessions[id]; if (!(Object.keys(activeSessions).length === 0 && Object.keys(waitingSessions).length === 0)) { _context.next = 8; break; } log.info('Last session, stopping tunnel'); _context.next = 8; return cbtTunnel.stop(); case 8: case 'end': return _context.stop(); } } }, _callee, this); })); function stop() { return _ref2.apply(this, arguments); } return stop; }(), setSeleniumId: function setSeleniumId(seleniumId) { activeSessions[id] = seleniumId; }, configureBuilder: function configureBuilder(builder) { var caps = builder.usingServer(remoteHub).getCapabilities(); log.debug('Configuring selenium builder for %s', JSON.stringify(caps)); caps.set('username', cbtTunnel.username); caps.set('password', cbtTunnel.authkey); caps.set('tunnel_name', cbtTunnel.name); return builder; } }); case 15: case 'end': return _context2.stop(); } } }, _callee2, undefined, [[5, 10]]); })); function create(_x) { return _ref.apply(this, arguments); } return create; }() };