cucumber
Version:
The official JavaScript implementation of Cucumber.
160 lines (137 loc) • 8.23 kB
JavaScript
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);var _createClass2 = require('babel-runtime/helpers/createClass');var _createClass3 = _interopRequireDefault(_createClass2);var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);var _inherits2 = require('babel-runtime/helpers/inherits');var _inherits3 = _interopRequireDefault(_inherits2);var _lodash = require('lodash');var _lodash2 = _interopRequireDefault(_lodash);
var _utils = require('./utils');
var _duration = require('duration');var _duration2 = _interopRequireDefault(_duration);
var _2 = require('./');var _3 = _interopRequireDefault(_2);
var _indentString = require('indent-string');var _indentString2 = _interopRequireDefault(_indentString);
var _status = require('../status');var _status2 = _interopRequireDefault(_status);
var _cliTable = require('cli-table');var _cliTable2 = _interopRequireDefault(_cliTable);
var _hook = require('../models/hook');var _hook2 = _interopRequireDefault(_hook);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
var STATUS_REPORT_ORDER = [
_status2.default.FAILED,
_status2.default.AMBIGUOUS,
_status2.default.UNDEFINED,
_status2.default.PENDING,
_status2.default.SKIPPED,
_status2.default.PASSED];var
SummaryFormatter = function (_Formatter) {(0, _inherits3.default)(SummaryFormatter, _Formatter);function SummaryFormatter() {(0, _classCallCheck3.default)(this, SummaryFormatter);return (0, _possibleConstructorReturn3.default)(this, (SummaryFormatter.__proto__ || Object.getPrototypeOf(SummaryFormatter)).apply(this, arguments));}(0, _createClass3.default)(SummaryFormatter, [{ key: 'getAmbiguousStepResultMessage', value: function getAmbiguousStepResultMessage(
stepResult) {var _this2 = this;var
ambiguousStepDefinitions = stepResult.ambiguousStepDefinitions;
var table = new _cliTable2.default({
chars: {
'bottom': '', 'bottom-left': '', 'bottom-mid': '', 'bottom-right': '',
'left': '', 'left-mid': '',
'mid': '', 'mid-mid': '', 'middle': ' - ',
'right': '', 'right-mid': '',
'top': '', 'top-left': '', 'top-mid': '', 'top-right': '' },
style: {
border: [], 'padding-left': 0, 'padding-right': 0 } });
table.push.apply(table, ambiguousStepDefinitions.map(function (stepDefinition) {
var pattern = stepDefinition.pattern.toString();
return [pattern, (0, _utils.formatLocation)(_this2.cwd, stepDefinition)];
}));
return 'Multiple step definitions match:' + '\n' + this.indent(table.toString(), 2);
} }, { key: 'getFailedStepResultMessage', value: function getFailedStepResultMessage(
stepResult) {var
failureException = stepResult.failureException;
return failureException.stack || failureException;
} }, { key: 'getPendingStepResultMessage', value: function getPendingStepResultMessage()
{
return 'Pending';
} }, { key: 'getStepResultMessage', value: function getStepResultMessage(
stepResult) {
switch (stepResult.status) {
case _status2.default.AMBIGUOUS:
return this.getAmbiguousStepResultMessage(stepResult);
case _status2.default.FAILED:
return this.getFailedStepResultMessage(stepResult);
case _status2.default.UNDEFINED:
return this.getUndefinedStepResultMessage(stepResult);
case _status2.default.PENDING:
return this.getPendingStepResultMessage(stepResult);}
} }, { key: 'getUndefinedStepResultMessage', value: function getUndefinedStepResultMessage(
stepResult) {var
step = stepResult.step;
var snippet = this.snippetBuilder.build(step);
return 'Undefined. Implement with the following snippet:' + '\n\n' + this.indent(snippet, 2);
} }, { key: 'handleFeaturesResult', value: function handleFeaturesResult(
featuresResult) {
var failures = featuresResult.stepResults.filter(function (stepResult) {
return _lodash2.default.includes([_status2.default.AMBIGUOUS, _status2.default.FAILED], stepResult.status);
});
if (failures.length > 0) {
this.logIssues({ stepResults: failures, title: 'Failures' });
}
var warnings = featuresResult.stepResults.filter(function (stepResult) {
return _lodash2.default.includes([_status2.default.PENDING, _status2.default.UNDEFINED], stepResult.status);
});
if (warnings.length > 0) {
this.logIssues({ stepResults: warnings, title: 'Warnings' });
}
this.logCountSummary('scenario', featuresResult.scenarioResults);
this.logCountSummary('step', featuresResult.stepResults.filter(function (_ref) {var step = _ref.step;return !(step instanceof _hook2.default);}));
this.logDuration(featuresResult);
} }, { key: 'indent', value: function indent(
text, numberOfSpaces) {
return (0, _indentString2.default)(text, ' ', numberOfSpaces);
} }, { key: 'logCountSummary', value: function logCountSummary(
type, objects) {var _this3 = this;
var counts = _lodash2.default.chain(objects).groupBy('status').mapValues('length').value();
var total = _lodash2.default.reduce(counts, function (memo, value) {return memo + value;}) || 0;
var text = total + ' ' + type + (total !== 1 ? 's' : '');
if (total > 0) {(function () {
var details = [];
STATUS_REPORT_ORDER.forEach(function (status) {
if (counts[status] > 0) {
details.push(_this3.colorFns[status](counts[status] + ' ' + status));
}
});
text += ' (' + details.join(', ') + ')';})();
}
this.log(text + '\n');
} }, { key: 'logDuration', value: function logDuration(
featuresResult) {
var milliseconds = featuresResult.duration;
var start = new Date(0);
var end = new Date(milliseconds);
var duration = new _duration2.default(start, end);
this.log(
duration.minutes + 'm' +
duration.toString('%S') + '.' +
duration.toString('%L') + 's' + '\n');
} }, { key: 'logIssue', value: function logIssue(_ref2)
{var number = _ref2.number;var stepResult = _ref2.stepResult;
var message = this.getStepResultMessage(stepResult);
var prefix = number + ') ';var
step = stepResult.step;var
scenario = step.scenario;
var text = prefix;
if (scenario) {
var scenarioLocation = (0, _utils.formatLocation)(this.cwd, scenario);
text += 'Scenario: ' + this.colorFns.bold(scenario.name) + ' - ' + this.colorFns.location(scenarioLocation);
} else {
text += 'Background:';
}
text += '\n';
var stepText = 'Step: ' + this.colorFns.bold(step.keyword + (step.name || ''));
if (step.uri) {
var stepLocation = (0, _utils.formatLocation)(this.cwd, step);
stepText += ' - ' + this.colorFns.location(stepLocation);
}
text += this.indent(stepText, prefix.length) + '\n';var
stepDefinition = stepResult.stepDefinition;
if (stepDefinition) {
var stepDefinitionLocation = (0, _utils.formatLocation)(this.cwd, stepDefinition);
var stepDefinitionLine = 'Step Definition: ' + this.colorFns.location(stepDefinitionLocation);
text += this.indent(stepDefinitionLine, prefix.length) + '\n';
}
var messageColorFn = this.colorFns[stepResult.status];
text += this.indent('Message:', prefix.length) + '\n';
text += this.indent(messageColorFn(message), prefix.length + 2) + '\n\n';
this.log(text);
} }, { key: 'logIssues', value: function logIssues(_ref3)
{var _this4 = this;var stepResults = _ref3.stepResults;var title = _ref3.title;
this.log(title + ':\n\n');
stepResults.forEach(function (stepResult, index) {
_this4.logIssue({ number: index + 1, stepResult: stepResult });
});
} }]);return SummaryFormatter;}(_3.default);exports.default = SummaryFormatter;