UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

53 lines (42 loc) 4.74 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 _path = require('path');var _path2 = _interopRequireDefault(_path); var _bluebird = require('bluebird');var _bluebird2 = _interopRequireDefault(_bluebird); var _user_code_runner = require('../user_code_runner');var _user_code_runner2 = _interopRequireDefault(_user_code_runner);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var EventBroadcaster = function () { function EventBroadcaster(_ref) {var cwd = _ref.cwd;var listenerDefaultTimeout = _ref.listenerDefaultTimeout;var listeners = _ref.listeners;(0, _classCallCheck3.default)(this, EventBroadcaster); this.cwd = cwd; this.listenerDefaultTimeout = listenerDefaultTimeout; this.listeners = listeners; }(0, _createClass3.default)(EventBroadcaster, [{ key: 'broadcastAroundEvent', value: function () {var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee( event, fn) {return _regenerator2.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return ( this.broadcastEvent(event.buildBeforeEvent()));case 2:_context.next = 4;return ( fn());case 4:_context.next = 6;return ( this.broadcastEvent(event.buildAfterEvent()));case 6:case 'end':return _context.stop();}}}, _callee, this);}));function broadcastAroundEvent(_x, _x2) {return _ref2.apply(this, arguments);}return broadcastAroundEvent;}() }, { key: 'broadcastEvent', value: function () {var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3( event) {var _this = this;return _regenerator2.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0:_context3.next = 2;return ( _bluebird2.default.each(this.listeners, function () {var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(listener) {var fnName, handler, timeout, _ref5, error, location;return _regenerator2.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0: fnName = 'handle' + event.name; handler = listener[fnName];if (! handler) {_context2.next = 11;break;} timeout = listener.timeout || _this.listenerDefaultTimeout;_context2.next = 6;return ( _user_code_runner2.default.run({ argsArray: [event.data], fn: handler, timeoutInMilliseconds: timeout, thisArg: listener }));case 6:_ref5 = _context2.sent;error = _ref5.error;if (! error) {_context2.next = 11;break;} location = _this.getListenerErrorLocation({ fnName: fnName, listener: listener });throw ( _this.prependLocationToError({ error: error, location: location }));case 11:case 'end':return _context2.stop();}}}, _callee2, _this);}));return function (_x4) {return _ref4.apply(this, arguments);};}()));case 2:case 'end':return _context3.stop();}}}, _callee3, this);}));function broadcastEvent(_x3) {return _ref3.apply(this, arguments);}return broadcastEvent;}() }, { key: 'getListenerErrorLocation', value: function getListenerErrorLocation(_ref6) {var fnName = _ref6.fnName;var listener = _ref6.listener; if (listener.cwd && listener.uri) { return _path2.default.relative(listener.cwd, listener.uri) + ':' + listener.line; } else { return listener.constructor.name + '::' + fnName; } } }, { key: 'prependLocationToError', value: function prependLocationToError(_ref7) {var error = _ref7.error;var location = _ref7.location; if (error instanceof Error) { error.message = location + ' ' + error.message; } else { error = location + ' ' + error; } return error; } }]);return EventBroadcaster;}();exports.default = EventBroadcaster;