UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

89 lines (25 loc) 4.02 kB
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. wrapDefinitions = wrapDefinitions;var _lodash = require('lodash');var _lodash2 = _interopRequireDefault(_lodash);var _utilArity = require('util-arity');var _utilArity2 = _interopRequireDefault(_utilArity);var _isGenerator = require('is-generator');var _isGenerator2 = _interopRequireDefault(_isGenerator);var _cucumberExpressions = require('cucumber-expressions');var _path = require('path');var _path2 = _interopRequireDefault(_path);var _transform_lookup_builder = require('./transform_lookup_builder');var _transform_lookup_builder2 = _interopRequireDefault(_transform_lookup_builder);var _helpers = require('./helpers');var helpers = _interopRequireWildcard(_helpers);function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;} else {var newObj = {};if (obj != null) {for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];}}newObj.default = obj;return newObj;}}function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function build(_ref) {var cwd = _ref.cwd;var fns = _ref.fns;var options = { afterHookDefinitions: [], beforeHookDefinitions: [], defaultTimeout: 5000, listeners: [], stepDefinitions: [], transformLookup: _transform_lookup_builder2.default.build() };var definitionFunctionWrapper = null;var fnContext = { addTransform: function addTransform(_ref2) {var captureGroupRegexps = _ref2.captureGroupRegexps;var transformer = _ref2.transformer;var typeName = _ref2.typeName;var transform = new _cucumberExpressions.Transform(typeName, function () {}, captureGroupRegexps, transformer);options.transformLookup.addTransform(transform);}, After: helpers.defineHook(options.afterHookDefinitions), Before: helpers.defineHook(options.beforeHookDefinitions), defineStep: helpers.defineStep(options.stepDefinitions), registerHandler: helpers.registerHandler(cwd, options.listeners), registerListener: function registerListener(listener) {options.listeners.push(listener);}, setDefaultTimeout: function setDefaultTimeout(milliseconds) {options.defaultTimeout = milliseconds;}, setDefinitionFunctionWrapper: function setDefinitionFunctionWrapper(fn) {definitionFunctionWrapper = fn;}, World: function World(parameters) {this.parameters = parameters;} };fnContext.Given = fnContext.When = fnContext.Then = fnContext.defineStep;fns.forEach(function (fn) {return fn.call(fnContext);});wrapDefinitions({ cwd: cwd, definitionFunctionWrapper: definitionFunctionWrapper, definitions: _lodash2.default.chain(['afterHook', 'beforeHook', 'step']).map(function (key) {return options[key + 'Definitions'];}).flatten().value() });options.World = fnContext.World;return options;}function wrapDefinitions(_ref3) {var cwd = _ref3.cwd;var definitionFunctionWrapper = _ref3.definitionFunctionWrapper;var definitions = _ref3.definitions; if (definitionFunctionWrapper) { definitions.forEach(function (definition) { var codeLength = definition.code.length; var wrappedFn = definitionFunctionWrapper(definition.code); if (wrappedFn !== definition.code) { definition.code = (0, _utilArity2.default)(codeLength, wrappedFn); } }); } else { var generatorDefinitions = _lodash2.default.filter(definitions, function (definition) { return _isGenerator2.default.fn(definition.code); }); if (generatorDefinitions.length > 0) { var references = generatorDefinitions.map(function (definition) { return _path2.default.relative(cwd, definition.uri) + ':' + definition.line; }).join('\n '); var message = '\n The following hook/step definitions use generator functions:\n\n ' + references + '\n\n Use \'this.setDefinitionFunctionWrapper(fn)\' to wrap then in a function that returns a promise.\n '; throw new Error(message); } } }exports.default = { build: build };