UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

70 lines (53 loc) 5.1 kB
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _regenerator = require('babel-runtime/regenerator');var _regenerator2 = _interopRequireDefault(_regenerator);var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);var _createClass2 = require('babel-runtime/helpers/createClass');var _createClass3 = _interopRequireDefault(_createClass2);var _bluebird = require('bluebird');var _bluebird2 = _interopRequireDefault(_bluebird); var _time = require('./time');var _time2 = _interopRequireDefault(_time); var _uncaught_exception_manager = require('./uncaught_exception_manager');var _uncaught_exception_manager2 = _interopRequireDefault(_uncaught_exception_manager); var _util = require('util');var _util2 = _interopRequireDefault(_util);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var UserCodeRunner = function () {function UserCodeRunner() {(0, _classCallCheck3.default)(this, UserCodeRunner);}(0, _createClass3.default)(UserCodeRunner, null, [{ key: 'run', value: function () {var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(_ref2) {var argsArray = _ref2.argsArray;var thisArg = _ref2.thisArg;var fn = _ref2.fn;var timeoutInMilliseconds = _ref2.timeoutInMilliseconds;var callbackPromise, fnReturn, _error, racingPromises, callbackInterface, promiseInterface, exceptionHandler, uncaughtExceptionPromise, timeoutPromise, error, result;return _regenerator2.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0: callbackPromise = new _bluebird2.default(function (resolve, reject) { argsArray.push(function (error, result) { if (error) { reject(error); } else { resolve(result); } }); }); fnReturn = void 0;_context.prev = 2; fnReturn = fn.apply(thisArg, argsArray);_context.next = 10;break;case 6:_context.prev = 6;_context.t0 = _context['catch'](2); _error = _context.t0 instanceof Error ? _context.t0 : _util2.default.format(_context.t0);return _context.abrupt('return', { error: _error });case 10: racingPromises = []; callbackInterface = fn.length === argsArray.length; promiseInterface = fnReturn && typeof fnReturn.then === 'function';if (!( callbackInterface && promiseInterface)) {_context.next = 17;break;}return _context.abrupt('return', { error: 'function uses multiple asynchronous interfaces: callback and promise' });case 17:if (! callbackInterface) {_context.next = 21;break;} racingPromises.push(callbackPromise);_context.next = 26;break;case 21:if (! promiseInterface) {_context.next = 25;break;} racingPromises.push(fnReturn);_context.next = 26;break;case 25:return _context.abrupt('return', { result: fnReturn });case 26: exceptionHandler = void 0; uncaughtExceptionPromise = new _bluebird2.default(function (resolve, reject) { exceptionHandler = reject; _uncaught_exception_manager2.default.registerHandler(exceptionHandler); }); racingPromises.push(uncaughtExceptionPromise); timeoutPromise = new _bluebird2.default(function (resolve, reject) { _time2.default.setTimeout(function () { var timeoutMessage = 'function timed out after ' + timeoutInMilliseconds + ' milliseconds'; reject(new Error(timeoutMessage)); }, timeoutInMilliseconds); }); racingPromises.push(timeoutPromise); error = void 0, result = void 0;_context.prev = 32;_context.next = 35;return ( _bluebird2.default.race(racingPromises));case 35:result = _context.sent;_context.next = 41;break;case 38:_context.prev = 38;_context.t1 = _context['catch'](32); if (_context.t1 instanceof Error) { error = _context.t1; } else if (_context.t1) { error = _util2.default.format(_context.t1); } else { error = 'Promise rejected without a reason'; }case 41: _uncaught_exception_manager2.default.unregisterHandler(exceptionHandler);return _context.abrupt('return', { error: error, result: result });case 43:case 'end':return _context.stop();}}}, _callee, this, [[2, 6], [32, 38]]);}));function run(_x) {return _ref.apply(this, arguments);}return run;}() }]);return UserCodeRunner;}();exports.default = UserCodeRunner;