cucumber
Version:
The official JavaScript implementation of Cucumber.
131 lines (89 loc) • 13.1 kB
JavaScript
'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;