UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

110 lines (86 loc) 9.12 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 _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;