aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@jest/reporters/build/VerboseReporter.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@jest/reporters/build/VerboseReporter.js')
-rw-r--r--node_modules/@jest/reporters/build/VerboseReporter.js226
1 files changed, 226 insertions, 0 deletions
diff --git a/node_modules/@jest/reporters/build/VerboseReporter.js b/node_modules/@jest/reporters/build/VerboseReporter.js
new file mode 100644
index 0000000..57758ed
--- /dev/null
+++ b/node_modules/@jest/reporters/build/VerboseReporter.js
@@ -0,0 +1,226 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+
+ _chalk = function () {
+ return data;
+ };
+
+ return data;
+}
+
+function _jestUtil() {
+ const data = require('jest-util');
+
+ _jestUtil = function () {
+ return data;
+ };
+
+ return data;
+}
+
+var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter'));
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+
+const {ICONS} = _jestUtil().specialChars;
+
+class VerboseReporter extends _DefaultReporter.default {
+ constructor(globalConfig) {
+ super(globalConfig);
+
+ _defineProperty(this, '_globalConfig', void 0);
+
+ this._globalConfig = globalConfig;
+ } // Verbose mode is for debugging. Buffering of output is undesirable.
+ // See https://github.com/facebook/jest/issues/8208
+
+ __wrapStdio(stream) {
+ const write = stream.write.bind(stream);
+
+ stream.write = chunk => {
+ this.__clearStatus();
+
+ write(chunk);
+
+ this.__printStatus();
+
+ return true;
+ };
+ }
+
+ static filterTestResults(testResults) {
+ return testResults.filter(({status}) => status !== 'pending');
+ }
+
+ static groupTestsBySuites(testResults) {
+ const root = {
+ suites: [],
+ tests: [],
+ title: ''
+ };
+ testResults.forEach(testResult => {
+ let targetSuite = root; // Find the target suite for this test,
+ // creating nested suites as necessary.
+
+ for (const title of testResult.ancestorTitles) {
+ let matchingSuite = targetSuite.suites.find(s => s.title === title);
+
+ if (!matchingSuite) {
+ matchingSuite = {
+ suites: [],
+ tests: [],
+ title
+ };
+ targetSuite.suites.push(matchingSuite);
+ }
+
+ targetSuite = matchingSuite;
+ }
+
+ targetSuite.tests.push(testResult);
+ });
+ return root;
+ }
+
+ onTestResult(test, result, aggregatedResults) {
+ super.testFinished(test.context.config, result, aggregatedResults);
+
+ if (!result.skipped) {
+ this.printTestFileHeader(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+
+ if (!result.testExecError && !result.skipped) {
+ this._logTestResults(result.testResults);
+ }
+
+ this.printTestFileFailureMessage(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+ }
+
+ super.forceFlushBufferedOutput();
+ }
+
+ _logTestResults(testResults) {
+ this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0);
+
+ this._logLine();
+ }
+
+ _logSuite(suite, indentLevel) {
+ if (suite.title) {
+ this._logLine(suite.title, indentLevel);
+ }
+
+ this._logTests(suite.tests, indentLevel + 1);
+
+ suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1));
+ }
+
+ _getIcon(status) {
+ if (status === 'failed') {
+ return _chalk().default.red(ICONS.failed);
+ } else if (status === 'pending') {
+ return _chalk().default.yellow(ICONS.pending);
+ } else if (status === 'todo') {
+ return _chalk().default.magenta(ICONS.todo);
+ } else {
+ return _chalk().default.green(ICONS.success);
+ }
+ }
+
+ _logTest(test, indentLevel) {
+ const status = this._getIcon(test.status);
+
+ const time = test.duration
+ ? ` (${(0, _jestUtil().formatTime)(Math.round(test.duration))})`
+ : '';
+
+ this._logLine(
+ status + ' ' + _chalk().default.dim(test.title + time),
+ indentLevel
+ );
+ }
+
+ _logTests(tests, indentLevel) {
+ if (this._globalConfig.expand) {
+ tests.forEach(test => this._logTest(test, indentLevel));
+ } else {
+ const summedTests = tests.reduce(
+ (result, test) => {
+ if (test.status === 'pending') {
+ result.pending.push(test);
+ } else if (test.status === 'todo') {
+ result.todo.push(test);
+ } else {
+ this._logTest(test, indentLevel);
+ }
+
+ return result;
+ },
+ {
+ pending: [],
+ todo: []
+ }
+ );
+
+ if (summedTests.pending.length > 0) {
+ summedTests.pending.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+
+ if (summedTests.todo.length > 0) {
+ summedTests.todo.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+ }
+ }
+
+ _logTodoOrPendingTest(indentLevel) {
+ return test => {
+ const printedTestStatus =
+ test.status === 'pending' ? 'skipped' : test.status;
+
+ const icon = this._getIcon(test.status);
+
+ const text = _chalk().default.dim(`${printedTestStatus} ${test.title}`);
+
+ this._logLine(`${icon} ${text}`, indentLevel);
+ };
+ }
+
+ _logLine(str, indentLevel) {
+ const indentation = ' '.repeat(indentLevel || 0);
+ this.log(indentation + (str || ''));
+ }
+}
+
+exports.default = VerboseReporter;
+
+_defineProperty(VerboseReporter, 'filename', __filename);