cucumber
Version:
The official JavaScript implementation of Cucumber.
67 lines (53 loc) • 7.04 kB
JavaScript
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);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 _helpers = require('./helpers');
var _configuration_builder = require('./configuration_builder');var _configuration_builder2 = _interopRequireDefault(_configuration_builder);
var _builder = require('../formatter/builder');var _builder2 = _interopRequireDefault(_builder);
var _fs = require('mz/fs');var _fs2 = _interopRequireDefault(_fs);
var _bluebird = require('bluebird');var _bluebird2 = _interopRequireDefault(_bluebird);
var _runtime = require('../runtime');var _runtime2 = _interopRequireDefault(_runtime);
var _scenario_filter = require('../scenario_filter');var _scenario_filter2 = _interopRequireDefault(_scenario_filter);
var _builder3 = require('../support_code_library/builder');var _builder4 = _interopRequireDefault(_builder3);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}var
Cli = function () {
function Cli(_ref) {var argv = _ref.argv;var cwd = _ref.cwd;var stdout = _ref.stdout;(0, _classCallCheck3.default)(this, Cli);
this.argv = argv;
this.cwd = cwd;
this.stdout = stdout;
}(0, _createClass3.default)(Cli, [{ key: 'getConfiguration', value: function () {var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {var fullArgv;return _regenerator2.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return (
(0, _helpers.getExpandedArgv)({ argv: this.argv, cwd: this.cwd }));case 2:fullArgv = _context.sent;_context.next = 5;return (
_configuration_builder2.default.build({ argv: fullArgv, cwd: this.cwd }));case 5:return _context.abrupt('return', _context.sent);case 6:case 'end':return _context.stop();}}}, _callee, this);}));function getConfiguration() {return _ref2.apply(this, arguments);}return getConfiguration;}() }, { key: 'getFormatters', value: function () {var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(_ref4) {var _this = this;var
formatOptions = _ref4.formatOptions;var formats = _ref4.formats;var supportCodeLibrary = _ref4.supportCodeLibrary;var streamsToClose, formatters, cleanup;return _regenerator2.default.wrap(function _callee3$(_context4) {while (1) {switch (_context4.prev = _context4.next) {case 0:
streamsToClose = [];_context4.next = 3;return (
_bluebird2.default.map(formats, function () {var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(_ref6) {var _context2;var type = _ref6.type;var outputTo = _ref6.outputTo;var stream, fd, typeOptions;return _regenerator2.default.wrap(function _callee2$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0:
stream = _this.stdout;if (!
outputTo) {_context3.next = 7;break;}_context3.next = 4;return (
_fs2.default.open(outputTo, 'w'));case 4:fd = _context3.sent;
stream = _fs2.default.createWriteStream(null, { fd: fd });
streamsToClose.push(stream);case 7:
typeOptions = _lodash2.default.assign({ log: (_context2 = stream).write.bind(_context2), supportCodeLibrary: supportCodeLibrary }, formatOptions);return _context3.abrupt('return',
_builder2.default.build(type, typeOptions));case 9:case 'end':return _context3.stop();}}}, _callee2, _this);}));return function (_x2) {return _ref5.apply(this, arguments);};}()));case 3:formatters = _context4.sent;
cleanup = function cleanup() {
return _bluebird2.default.each(streamsToClose, function (stream) {return _bluebird2.default.promisify(stream.end.bind(stream))();});
};return _context4.abrupt('return',
{ cleanup: cleanup, formatters: formatters });case 6:case 'end':return _context4.stop();}}}, _callee3, this);}));function getFormatters(_x) {return _ref3.apply(this, arguments);}return getFormatters;}() }, { key: 'getSupportCodeLibrary', value: function getSupportCodeLibrary(
supportCodePaths) {
var fns = (0, _helpers.getSupportCodeFunctions)(supportCodePaths);
return _builder4.default.build({ cwd: this.cwd, fns: fns });
} }, { key: 'run', value: function () {var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4() {var configuration, supportCodeLibrary, _ref8, _ref9, features, _ref9$, cleanup, formatters, scenarioFilter, runtime, result;return _regenerator2.default.wrap(function _callee4$(_context5) {while (1) {switch (_context5.prev = _context5.next) {case 0:_context5.next = 2;return (
this.getConfiguration());case 2:configuration = _context5.sent;
supportCodeLibrary = this.getSupportCodeLibrary(configuration.supportCodePaths);_context5.next = 6;return (
_bluebird2.default.all([
(0, _helpers.getFeatures)(configuration.featurePaths),
this.getFormatters({
formatOptions: configuration.formatOptions,
formats: configuration.formats,
supportCodeLibrary: supportCodeLibrary })]));case 6:_ref8 = _context5.sent;_ref9 = (0, _slicedToArray3.default)(_ref8, 2);features = _ref9[0];_ref9$ = _ref9[1];cleanup = _ref9$.cleanup;formatters = _ref9$.formatters;
scenarioFilter = new _scenario_filter2.default(configuration.scenarioFilterOptions);
runtime = new _runtime2.default({
features: features,
listeners: formatters,
options: configuration.runtimeOptions,
scenarioFilter: scenarioFilter,
supportCodeLibrary: supportCodeLibrary });_context5.next = 16;return (
runtime.start());case 16:result = _context5.sent;_context5.next = 19;return (
cleanup());case 19:return _context5.abrupt('return',
result);case 20:case 'end':return _context5.stop();}}}, _callee4, this);}));function run() {return _ref7.apply(this, arguments);}return run;}() }]);return Cli;}();exports.default = Cli;