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