cucumber
Version:
The official JavaScript implementation of Cucumber.
110 lines (86 loc) • 9.12 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 _lodash = require('lodash');var _lodash2 = _interopRequireDefault(_lodash);
var _argv_parser = require('./argv_parser');var _argv_parser2 = _interopRequireDefault(_argv_parser);
var _fs = require('mz/fs');var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');var _path2 = _interopRequireDefault(_path);
var _path_expander = require('./path_expander');var _path_expander2 = _interopRequireDefault(_path_expander);
var _bluebird = require('bluebird');var _bluebird2 = _interopRequireDefault(_bluebird);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var
ConfigurationBuilder = function () {(0, _createClass3.default)(ConfigurationBuilder, null, [{ key: 'build', value: function () {var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(
options) {var builder;return _regenerator2.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:
builder = new ConfigurationBuilder(options);_context.next = 3;return (
builder.build());case 3:return _context.abrupt('return', _context.sent);case 4:case 'end':return _context.stop();}}}, _callee, this);}));function build(_x) {return _ref.apply(this, arguments);}return build;}() }]);
function ConfigurationBuilder(_ref2) {var argv = _ref2.argv;var cwd = _ref2.cwd;(0, _classCallCheck3.default)(this, ConfigurationBuilder);
this.cwd = cwd;
this.pathExpander = new _path_expander2.default(cwd);
var parsedArgv = _argv_parser2.default.parse(argv);
this.args = parsedArgv.args;
this.options = parsedArgv.options;
}(0, _createClass3.default)(ConfigurationBuilder, [{ key: 'build', value: function () {var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {var unexpandedFeaturePaths, featurePaths, featureDirectoryPaths, unexpandedSupportCodePaths, supportCodePaths;return _regenerator2.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0:_context2.next = 2;return (
this.getUnexpandedFeaturePaths());case 2:unexpandedFeaturePaths = _context2.sent;_context2.next = 5;return (
this.expandFeaturePaths(unexpandedFeaturePaths));case 5:featurePaths = _context2.sent;
featureDirectoryPaths = this.getFeatureDirectoryPaths(featurePaths);
unexpandedSupportCodePaths = this.options.require.length > 0 ? this.options.require : featureDirectoryPaths;_context2.next = 10;return (
this.expandSupportCodePaths(unexpandedSupportCodePaths));case 10:supportCodePaths = _context2.sent;return _context2.abrupt('return',
{
featurePaths: featurePaths,
formats: this.getFormats(),
formatOptions: this.getFormatOptions(),
profiles: this.options.profile,
runtimeOptions: {
dryRun: !!this.options.dryRun,
failFast: !!this.options.failFast,
filterStacktraces: !this.options.backtrace,
strict: !!this.options.strict,
worldParameters: this.options.worldParameters },
scenarioFilterOptions: {
cwd: this.cwd,
featurePaths: unexpandedFeaturePaths,
names: this.options.name,
tagExpression: this.options.tags },
supportCodePaths: supportCodePaths });case 12:case 'end':return _context2.stop();}}}, _callee2, this);}));function build() {return _ref3.apply(this, arguments);}return build;}() }, { key: 'expandFeaturePaths', value: function () {var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(
featurePaths) {return _regenerator2.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0:
featurePaths = featurePaths.map(function (p) {return p.replace(/(:\d+)*$/g, '');}); // Strip line numbers
_context3.next = 3;return this.pathExpander.expandPathsWithExtensions(featurePaths, ['feature']);case 3:return _context3.abrupt('return', _context3.sent);case 4:case 'end':return _context3.stop();}}}, _callee3, this);}));function expandFeaturePaths(_x2) {return _ref4.apply(this, arguments);}return expandFeaturePaths;}() }, { key: 'getFeatureDirectoryPaths', value: function getFeatureDirectoryPaths(
featurePaths) {var _this = this;
var featureDirs = featurePaths.map(function (featurePath) {
return _path2.default.relative(_this.cwd, _path2.default.dirname(featurePath));
});
return _lodash2.default.uniq(featureDirs);
} }, { key: 'getFormatOptions', value: function getFormatOptions()
{
var formatOptions = _lodash2.default.clone(this.options.formatOptions);
formatOptions.cwd = this.cwd;
_lodash2.default.defaults(formatOptions, { colorsEnabled: true });
return formatOptions;
} }, { key: 'getFormats', value: function getFormats()
{
var mapping = { '': 'pretty' };
this.options.format.forEach(function (format) {
var parts = format.split(':');
var type = parts[0];
var outputTo = parts.slice(1).join(':');
mapping[outputTo] = type;
});
return _lodash2.default.map(mapping, function (type, outputTo) {
return { outputTo: outputTo, type: type };
});
} }, { key: 'getUnexpandedFeaturePaths', value: function () {var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {var _this2 = this;var nestedFeaturePaths, featurePaths;return _regenerator2.default.wrap(function _callee5$(_context5) {while (1) {switch (_context5.prev = _context5.next) {case 0:if (!(
this.args.length > 0)) {_context5.next = 7;break;}_context5.next = 3;return (
_bluebird2.default.map(this.args, function () {var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(arg) {var filename, filePath, content;return _regenerator2.default.wrap(function _callee4$(_context4) {while (1) {switch (_context4.prev = _context4.next) {case 0:
filename = _path2.default.basename(arg);if (!(
filename[0] === '@')) {_context4.next = 9;break;}
filePath = _path2.default.join(_this2.cwd, arg);_context4.next = 5;return (
_fs2.default.readFile(filePath, 'utf8'));case 5:content = _context4.sent;return _context4.abrupt('return',
_lodash2.default.chain(content).split('\n').map(_lodash2.default.trim).compact().value());case 9:return _context4.abrupt('return',
arg);case 10:case 'end':return _context4.stop();}}}, _callee4, _this2);}));return function (_x3) {return _ref6.apply(this, arguments);};}()));case 3:nestedFeaturePaths = _context5.sent;
featurePaths = _lodash2.default.flatten(nestedFeaturePaths);if (!(
featurePaths.length > 0)) {_context5.next = 7;break;}return _context5.abrupt('return',
featurePaths);case 7:return _context5.abrupt('return',
['features']);case 8:case 'end':return _context5.stop();}}}, _callee5, this);}));function getUnexpandedFeaturePaths() {return _ref5.apply(this, arguments);}return getUnexpandedFeaturePaths;}() }, { key: 'expandSupportCodePaths', value: function () {var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(
supportCodePaths) {var extensions;return _regenerator2.default.wrap(function _callee6$(_context6) {while (1) {switch (_context6.prev = _context6.next) {case 0:
extensions = ['js'];
this.options.compiler.forEach(function (compiler) {
var parts = compiler.split(':');
extensions.push(parts[0]);
require(parts[1]);
});_context6.next = 4;return (
this.pathExpander.expandPathsWithExtensions(supportCodePaths, extensions));case 4:return _context6.abrupt('return', _context6.sent);case 5:case 'end':return _context6.stop();}}}, _callee6, this);}));function expandSupportCodePaths(_x4) {return _ref7.apply(this, arguments);}return expandSupportCodePaths;}() }]);return ConfigurationBuilder;}();exports.default = ConfigurationBuilder;