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