UNPKG

cucumber

Version:

The official JavaScript implementation of Cucumber.

160 lines (137 loc) 8.23 kB
'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;