cucumber
Version:
The official JavaScript implementation of Cucumber.
70 lines (53 loc) • 5.1 kB
JavaScript
;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;