UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

131 lines (89 loc) 13.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 _event = require('./event');var _event2 = _interopRequireDefault(_event); var _hook = require('../models/hook');var _hook2 = _interopRequireDefault(_hook); var _bluebird = require('bluebird');var _bluebird2 = _interopRequireDefault(_bluebird); var _scenario_result = require('../models/scenario_result');var _scenario_result2 = _interopRequireDefault(_scenario_result); var _status = require('../status');var _status2 = _interopRequireDefault(_status); var _step_result = require('../models/step_result');var _step_result2 = _interopRequireDefault(_step_result); var _step_runner = require('./step_runner');var _step_runner2 = _interopRequireDefault(_step_runner);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var ScenarioRunner = function () { function ScenarioRunner(_ref) {var eventBroadcaster = _ref.eventBroadcaster;var options = _ref.options;var scenario = _ref.scenario;var supportCodeLibrary = _ref.supportCodeLibrary;(0, _classCallCheck3.default)(this, ScenarioRunner); this.eventBroadcaster = eventBroadcaster; this.options = options; this.scenario = scenario; this.supportCodeLibrary = supportCodeLibrary; this.scenarioResult = new _scenario_result2.default(scenario); this.world = new supportCodeLibrary.World(options.worldParameters); }(0, _createClass3.default)(ScenarioRunner, [{ key: 'broadcastScenarioResult', value: function () {var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {var event;return _regenerator2.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0: event = new _event2.default({ data: this.scenarioResult, name: _event2.default.SCENARIO_RESULT_EVENT_NAME });_context.next = 3;return ( this.eventBroadcaster.broadcastEvent(event));case 3:case 'end':return _context.stop();}}}, _callee, this);}));function broadcastScenarioResult() {return _ref2.apply(this, arguments);}return broadcastScenarioResult;}() }, { key: 'broadcastStepResult', value: function () {var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2( stepResult) {var event;return _regenerator2.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0: this.scenarioResult.witnessStepResult(stepResult); event = new _event2.default({ data: stepResult, name: _event2.default.STEP_RESULT_EVENT_NAME });_context2.next = 4;return ( this.eventBroadcaster.broadcastEvent(event));case 4:case 'end':return _context2.stop();}}}, _callee2, this);}));function broadcastStepResult(_x) {return _ref3.apply(this, arguments);}return broadcastStepResult;}() }, { key: 'invokeStep', value: function invokeStep( step, stepDefinition) { return _step_runner2.default.run({ defaultTimeout: this.supportCodeLibrary.defaultTimeout, scenarioResult: this.scenarioResult, step: step, stepDefinition: stepDefinition, transformLookup: this.supportCodeLibrary.transformLookup, world: this.world }); } }, { key: 'isSkippingSteps', value: function isSkippingSteps() { return this.scenarioResult.status !== _status2.default.PASSED; } }, { key: 'run', value: function () {var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {var _this = this;var event;return _regenerator2.default.wrap(function _callee4$(_context4) {while (1) {switch (_context4.prev = _context4.next) {case 0: event = new _event2.default({ data: this.scenario, name: _event2.default.SCENARIO_EVENT_NAME });_context4.next = 3;return ( this.eventBroadcaster.broadcastAroundEvent(event, (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {return _regenerator2.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0:_context3.next = 2;return ( _this.runBeforeHooks());case 2:_context3.next = 4;return ( _this.runSteps());case 4:_context3.next = 6;return ( _this.runAfterHooks());case 6:_context3.next = 8;return ( _this.broadcastScenarioResult());case 8:case 'end':return _context3.stop();}}}, _callee3, _this);}))));case 3:return _context4.abrupt('return', this.scenarioResult);case 4:case 'end':return _context4.stop();}}}, _callee4, this);}));function run() {return _ref4.apply(this, arguments);}return run;}() }, { key: 'runAfterHooks', value: function () {var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {return _regenerator2.default.wrap(function _callee5$(_context5) {while (1) {switch (_context5.prev = _context5.next) {case 0:_context5.next = 2;return ( this.runHooks({ hookDefinitions: this.supportCodeLibrary.afterHookDefinitions.reverse(), hookKeyword: _hook2.default.AFTER_STEP_KEYWORD }));case 2:case 'end':return _context5.stop();}}}, _callee5, this);}));function runAfterHooks() {return _ref6.apply(this, arguments);}return runAfterHooks;}() }, { key: 'runBeforeHooks', value: function () {var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6() {return _regenerator2.default.wrap(function _callee6$(_context6) {while (1) {switch (_context6.prev = _context6.next) {case 0:_context6.next = 2;return ( this.runHooks({ hookDefinitions: this.supportCodeLibrary.beforeHookDefinitions, hookKeyword: _hook2.default.BEFORE_STEP_KEYWORD }));case 2:case 'end':return _context6.stop();}}}, _callee6, this);}));function runBeforeHooks() {return _ref7.apply(this, arguments);}return runBeforeHooks;}() }, { key: 'runHook', value: function () {var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7( hook, hookDefinition) {return _regenerator2.default.wrap(function _callee7$(_context7) {while (1) {switch (_context7.prev = _context7.next) {case 0:if (! this.options.dryRun) {_context7.next = 4;break;}return _context7.abrupt('return', new _step_result2.default({ step: hook, stepDefinition: hookDefinition, status: _status2.default.SKIPPED }));case 4:_context7.next = 6;return ( this.invokeStep(hook, hookDefinition));case 6:return _context7.abrupt('return', _context7.sent);case 7:case 'end':return _context7.stop();}}}, _callee7, this);}));function runHook(_x2, _x3) {return _ref8.apply(this, arguments);}return runHook;}() }, { key: 'runHooks', value: function () {var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(_ref10) {var _this2 = this;var hookDefinitions = _ref10.hookDefinitions;var hookKeyword = _ref10.hookKeyword;return _regenerator2.default.wrap(function _callee10$(_context10) {while (1) {switch (_context10.prev = _context10.next) {case 0:_context10.next = 2;return ( _bluebird2.default.each(hookDefinitions, function () {var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(hookDefinition) {var hook, event;return _regenerator2.default.wrap(function _callee9$(_context9) {while (1) {switch (_context9.prev = _context9.next) {case 0:if ( hookDefinition.appliesToScenario(_this2.scenario)) {_context9.next = 2;break;}return _context9.abrupt('return');case 2: hook = new _hook2.default({ keyword: hookKeyword, scenario: _this2.scenario }); event = new _event2.default({ data: hook, name: _event2.default.STEP_EVENT_NAME });_context9.next = 6;return ( _this2.eventBroadcaster.broadcastAroundEvent(event, (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8() {var stepResult;return _regenerator2.default.wrap(function _callee8$(_context8) {while (1) {switch (_context8.prev = _context8.next) {case 0:_context8.next = 2;return ( _this2.runHook(hook, hookDefinition));case 2:stepResult = _context8.sent;_context8.next = 5;return ( _this2.broadcastStepResult(stepResult));case 5:case 'end':return _context8.stop();}}}, _callee8, _this2);}))));case 6:case 'end':return _context9.stop();}}}, _callee9, _this2);}));return function (_x5) {return _ref11.apply(this, arguments);};}()));case 2:case 'end':return _context10.stop();}}}, _callee10, this);}));function runHooks(_x4) {return _ref9.apply(this, arguments);}return runHooks;}() }, { key: 'runStep', value: function () {var _ref13 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11( step) {var _this3 = this;var stepDefinitions;return _regenerator2.default.wrap(function _callee11$(_context11) {while (1) {switch (_context11.prev = _context11.next) {case 0: stepDefinitions = this.supportCodeLibrary.stepDefinitions.filter(function (stepDefinition) { return stepDefinition.matchesStepName({ stepName: step.name, transformLookup: _this3.supportCodeLibrary.transformLookup }); });if (!( stepDefinitions.length === 0)) {_context11.next = 5;break;}return _context11.abrupt('return', new _step_result2.default({ step: step, status: _status2.default.UNDEFINED }));case 5:if (!( stepDefinitions.length > 1)) {_context11.next = 9;break;}return _context11.abrupt('return', new _step_result2.default({ ambiguousStepDefinitions: stepDefinitions, step: step, status: _status2.default.AMBIGUOUS }));case 9:if (!( this.options.dryRun || this.isSkippingSteps())) {_context11.next = 13;break;}return _context11.abrupt('return', new _step_result2.default({ step: step, stepDefinition: stepDefinitions[0], status: _status2.default.SKIPPED }));case 13:_context11.next = 15;return ( this.invokeStep(step, stepDefinitions[0]));case 15:return _context11.abrupt('return', _context11.sent);case 16:case 'end':return _context11.stop();}}}, _callee11, this);}));function runStep(_x6) {return _ref13.apply(this, arguments);}return runStep;}() }, { key: 'runSteps', value: function () {var _ref14 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14() {var _this4 = this;return _regenerator2.default.wrap(function _callee14$(_context14) {while (1) {switch (_context14.prev = _context14.next) {case 0:_context14.next = 2;return ( _bluebird2.default.each(this.scenario.steps, function () {var _ref15 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13(step) {var event;return _regenerator2.default.wrap(function _callee13$(_context13) {while (1) {switch (_context13.prev = _context13.next) {case 0: event = new _event2.default({ data: step, name: _event2.default.STEP_EVENT_NAME });_context13.next = 3;return ( _this4.eventBroadcaster.broadcastAroundEvent(event, (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12() {var stepResult;return _regenerator2.default.wrap(function _callee12$(_context12) {while (1) {switch (_context12.prev = _context12.next) {case 0:_context12.next = 2;return ( _bluebird2.default.resolve());case 2:_context12.next = 4;return ( _this4.runStep(step));case 4:stepResult = _context12.sent;_context12.next = 7;return ( _this4.broadcastStepResult(stepResult));case 7:case 'end':return _context12.stop();}}}, _callee12, _this4);}))));case 3:case 'end':return _context13.stop();}}}, _callee13, _this4);}));return function (_x7) {return _ref15.apply(this, arguments);};}()));case 2:case 'end':return _context14.stop();}}}, _callee14, this);}));function runSteps() {return _ref14.apply(this, arguments);}return runSteps;}() }]);return ScenarioRunner;}();exports.default = ScenarioRunner;