Add node modules and compiled JavaScript from main (#57)
Co-authored-by: Oliver King <oking3@uncc.edu>
This commit is contained in:
parent
d893f27da9
commit
7f7e5ba5ea
6750 changed files with 1745644 additions and 10860 deletions
21
node_modules/@jest/reporters/LICENSE
generated
vendored
Normal file
21
node_modules/@jest/reporters/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Facebook, Inc. and its affiliates.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
42
node_modules/@jest/reporters/build/Status.d.ts
generated
vendored
Normal file
42
node_modules/@jest/reporters/build/Status.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
|
||||
import type { ReporterOnStartOptions, Test } from './types';
|
||||
declare type Cache = {
|
||||
content: string;
|
||||
clear: string;
|
||||
};
|
||||
/**
|
||||
* A class that generates the CLI status of currently running tests
|
||||
* and also provides an ANSI escape sequence to remove status lines
|
||||
* from the terminal.
|
||||
*/
|
||||
export default class Status {
|
||||
private _cache;
|
||||
private _callback?;
|
||||
private _currentTests;
|
||||
private _currentTestCases;
|
||||
private _done;
|
||||
private _emitScheduled;
|
||||
private _estimatedTime;
|
||||
private _interval?;
|
||||
private _aggregatedResults?;
|
||||
private _showStatus;
|
||||
constructor();
|
||||
onChange(callback: () => void): void;
|
||||
runStarted(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
|
||||
runFinished(): void;
|
||||
addTestCaseResult(test: Test, testCaseResult: TestCaseResult): void;
|
||||
testStarted(testPath: Config.Path, config: Config.ProjectConfig): void;
|
||||
testFinished(_config: Config.ProjectConfig, testResult: TestResult, aggregatedResults: AggregatedResult): void;
|
||||
get(): Cache;
|
||||
private _emit;
|
||||
private _debouncedEmit;
|
||||
private _tick;
|
||||
}
|
||||
export {};
|
272
node_modules/@jest/reporters/build/Status.js
generated
vendored
Normal file
272
node_modules/@jest/reporters/build/Status.js
generated
vendored
Normal file
|
@ -0,0 +1,272 @@
|
|||
'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 _stringLength() {
|
||||
const data = _interopRequireDefault(require('string-length'));
|
||||
|
||||
_stringLength = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _utils = require('./utils');
|
||||
|
||||
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 RUNNING_TEXT = ' RUNS ';
|
||||
const RUNNING = _chalk().default.reset.inverse.yellow.bold(RUNNING_TEXT) + ' ';
|
||||
/**
|
||||
* This class is a perf optimization for sorting the list of currently
|
||||
* running tests. It tries to keep tests in the same positions without
|
||||
* shifting the whole list.
|
||||
*/
|
||||
|
||||
class CurrentTestList {
|
||||
constructor() {
|
||||
_defineProperty(this, '_array', void 0);
|
||||
|
||||
this._array = [];
|
||||
}
|
||||
|
||||
add(testPath, config) {
|
||||
const index = this._array.indexOf(null);
|
||||
|
||||
const record = {
|
||||
config,
|
||||
testPath
|
||||
};
|
||||
|
||||
if (index !== -1) {
|
||||
this._array[index] = record;
|
||||
} else {
|
||||
this._array.push(record);
|
||||
}
|
||||
}
|
||||
|
||||
delete(testPath) {
|
||||
const record = this._array.find(
|
||||
record => record !== null && record.testPath === testPath
|
||||
);
|
||||
|
||||
this._array[this._array.indexOf(record || null)] = null;
|
||||
}
|
||||
|
||||
get() {
|
||||
return this._array;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A class that generates the CLI status of currently running tests
|
||||
* and also provides an ANSI escape sequence to remove status lines
|
||||
* from the terminal.
|
||||
*/
|
||||
class Status {
|
||||
constructor() {
|
||||
_defineProperty(this, '_cache', void 0);
|
||||
|
||||
_defineProperty(this, '_callback', void 0);
|
||||
|
||||
_defineProperty(this, '_currentTests', void 0);
|
||||
|
||||
_defineProperty(this, '_currentTestCases', void 0);
|
||||
|
||||
_defineProperty(this, '_done', void 0);
|
||||
|
||||
_defineProperty(this, '_emitScheduled', void 0);
|
||||
|
||||
_defineProperty(this, '_estimatedTime', void 0);
|
||||
|
||||
_defineProperty(this, '_interval', void 0);
|
||||
|
||||
_defineProperty(this, '_aggregatedResults', void 0);
|
||||
|
||||
_defineProperty(this, '_showStatus', void 0);
|
||||
|
||||
this._cache = null;
|
||||
this._currentTests = new CurrentTestList();
|
||||
this._currentTestCases = [];
|
||||
this._done = false;
|
||||
this._emitScheduled = false;
|
||||
this._estimatedTime = 0;
|
||||
this._showStatus = false;
|
||||
}
|
||||
|
||||
onChange(callback) {
|
||||
this._callback = callback;
|
||||
}
|
||||
|
||||
runStarted(aggregatedResults, options) {
|
||||
this._estimatedTime = (options && options.estimatedTime) || 0;
|
||||
this._showStatus = options && options.showStatus;
|
||||
this._interval = setInterval(() => this._tick(), 1000);
|
||||
this._aggregatedResults = aggregatedResults;
|
||||
|
||||
this._debouncedEmit();
|
||||
}
|
||||
|
||||
runFinished() {
|
||||
this._done = true;
|
||||
if (this._interval) clearInterval(this._interval);
|
||||
|
||||
this._emit();
|
||||
}
|
||||
|
||||
addTestCaseResult(test, testCaseResult) {
|
||||
this._currentTestCases.push({
|
||||
test,
|
||||
testCaseResult
|
||||
});
|
||||
|
||||
if (!this._showStatus) {
|
||||
this._emit();
|
||||
} else {
|
||||
this._debouncedEmit();
|
||||
}
|
||||
}
|
||||
|
||||
testStarted(testPath, config) {
|
||||
this._currentTests.add(testPath, config);
|
||||
|
||||
if (!this._showStatus) {
|
||||
this._emit();
|
||||
} else {
|
||||
this._debouncedEmit();
|
||||
}
|
||||
}
|
||||
|
||||
testFinished(_config, testResult, aggregatedResults) {
|
||||
const {testFilePath} = testResult;
|
||||
this._aggregatedResults = aggregatedResults;
|
||||
|
||||
this._currentTests.delete(testFilePath);
|
||||
|
||||
this._currentTestCases = this._currentTestCases.filter(({test}) => {
|
||||
if (_config !== test.context.config) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return test.path !== testFilePath;
|
||||
});
|
||||
|
||||
this._debouncedEmit();
|
||||
}
|
||||
|
||||
get() {
|
||||
if (this._cache) {
|
||||
return this._cache;
|
||||
}
|
||||
|
||||
if (this._done) {
|
||||
return {
|
||||
clear: '',
|
||||
content: ''
|
||||
};
|
||||
}
|
||||
|
||||
const width = process.stdout.columns;
|
||||
let content = '\n';
|
||||
|
||||
this._currentTests.get().forEach(record => {
|
||||
if (record) {
|
||||
const {config, testPath} = record;
|
||||
const projectDisplayName = config.displayName
|
||||
? (0, _utils.printDisplayName)(config) + ' '
|
||||
: '';
|
||||
const prefix = RUNNING + projectDisplayName;
|
||||
content +=
|
||||
(0, _utils.wrapAnsiString)(
|
||||
prefix +
|
||||
(0, _utils.trimAndFormatPath)(
|
||||
(0, _stringLength().default)(prefix),
|
||||
config,
|
||||
testPath,
|
||||
width
|
||||
),
|
||||
width
|
||||
) + '\n';
|
||||
}
|
||||
});
|
||||
|
||||
if (this._showStatus && this._aggregatedResults) {
|
||||
content +=
|
||||
'\n' +
|
||||
(0, _utils.getSummary)(this._aggregatedResults, {
|
||||
currentTestCases: this._currentTestCases,
|
||||
estimatedTime: this._estimatedTime,
|
||||
roundTime: true,
|
||||
width
|
||||
});
|
||||
}
|
||||
|
||||
let height = 0;
|
||||
|
||||
for (let i = 0; i < content.length; i++) {
|
||||
if (content[i] === '\n') {
|
||||
height++;
|
||||
}
|
||||
}
|
||||
|
||||
const clear = '\r\x1B[K\r\x1B[1A'.repeat(height);
|
||||
return (this._cache = {
|
||||
clear,
|
||||
content
|
||||
});
|
||||
}
|
||||
|
||||
_emit() {
|
||||
this._cache = null;
|
||||
if (this._callback) this._callback();
|
||||
}
|
||||
|
||||
_debouncedEmit() {
|
||||
if (!this._emitScheduled) {
|
||||
// Perf optimization to avoid two separate renders When
|
||||
// one test finishes and another test starts executing.
|
||||
this._emitScheduled = true;
|
||||
setTimeout(() => {
|
||||
this._emit();
|
||||
|
||||
this._emitScheduled = false;
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
_tick() {
|
||||
this._debouncedEmit();
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = Status;
|
19
node_modules/@jest/reporters/build/base_reporter.d.ts
generated
vendored
Normal file
19
node_modules/@jest/reporters/build/base_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
|
||||
import type { Context, Reporter, ReporterOnStartOptions, Test } from './types';
|
||||
export default class BaseReporter implements Reporter {
|
||||
private _error?;
|
||||
log(message: string): void;
|
||||
onRunStart(_results?: AggregatedResult, _options?: ReporterOnStartOptions): void;
|
||||
onTestCaseResult(_test: Test, _testCaseResult: TestCaseResult): void;
|
||||
onTestResult(_test?: Test, _testResult?: TestResult, _results?: AggregatedResult): void;
|
||||
onTestStart(_test?: Test): void;
|
||||
onRunComplete(_contexts?: Set<Context>, _aggregatedResults?: AggregatedResult): Promise<void> | void;
|
||||
protected _setError(error: Error): void;
|
||||
getLastError(): Error | undefined;
|
||||
}
|
65
node_modules/@jest/reporters/build/base_reporter.js
generated
vendored
Normal file
65
node_modules/@jest/reporters/build/base_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
function _jestUtil() {
|
||||
const data = require('jest-util');
|
||||
|
||||
_jestUtil = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
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 {remove: preRunMessageRemove} = _jestUtil().preRunMessage;
|
||||
|
||||
class BaseReporter {
|
||||
constructor() {
|
||||
_defineProperty(this, '_error', void 0);
|
||||
}
|
||||
|
||||
log(message) {
|
||||
process.stderr.write(message + '\n');
|
||||
}
|
||||
|
||||
onRunStart(_results, _options) {
|
||||
preRunMessageRemove(process.stderr);
|
||||
}
|
||||
|
||||
onTestCaseResult(_test, _testCaseResult) {}
|
||||
|
||||
onTestResult(_test, _testResult, _results) {}
|
||||
|
||||
onTestStart(_test) {}
|
||||
|
||||
onRunComplete(_contexts, _aggregatedResults) {}
|
||||
|
||||
_setError(error) {
|
||||
this._error = error;
|
||||
} // Return an error that occurred during reporting. This error will
|
||||
// define whether the test run was successful or failed.
|
||||
|
||||
getLastError() {
|
||||
return this._error;
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = BaseReporter;
|
23
node_modules/@jest/reporters/build/coverage_reporter.d.ts
generated
vendored
Normal file
23
node_modules/@jest/reporters/build/coverage_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult, TestResult } from '@jest/test-result';
|
||||
import BaseReporter from './base_reporter';
|
||||
import type { Context, CoverageReporterOptions, Test } from './types';
|
||||
export default class CoverageReporter extends BaseReporter {
|
||||
private _coverageMap;
|
||||
private _globalConfig;
|
||||
private _sourceMapStore;
|
||||
private _options;
|
||||
private _v8CoverageResults;
|
||||
constructor(globalConfig: Config.GlobalConfig, options?: CoverageReporterOptions);
|
||||
onTestResult(_test: Test, testResult: TestResult): void;
|
||||
onRunComplete(contexts: Set<Context>, aggregatedResults: AggregatedResult): Promise<void>;
|
||||
private _addUntestedFiles;
|
||||
private _checkThreshold;
|
||||
private _getCoverageResult;
|
||||
}
|
654
node_modules/@jest/reporters/build/coverage_reporter.js
generated
vendored
Normal file
654
node_modules/@jest/reporters/build/coverage_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,654 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
function path() {
|
||||
const data = _interopRequireWildcard(require('path'));
|
||||
|
||||
path = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function fs() {
|
||||
const data = _interopRequireWildcard(require('graceful-fs'));
|
||||
|
||||
fs = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _jestUtil() {
|
||||
const data = require('jest-util');
|
||||
|
||||
_jestUtil = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulLibReport() {
|
||||
const data = _interopRequireDefault(require('istanbul-lib-report'));
|
||||
|
||||
_istanbulLibReport = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulReports() {
|
||||
const data = _interopRequireDefault(require('istanbul-reports'));
|
||||
|
||||
_istanbulReports = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _chalk() {
|
||||
const data = _interopRequireDefault(require('chalk'));
|
||||
|
||||
_chalk = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulLibCoverage() {
|
||||
const data = _interopRequireDefault(require('istanbul-lib-coverage'));
|
||||
|
||||
_istanbulLibCoverage = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulLibSourceMaps() {
|
||||
const data = _interopRequireDefault(require('istanbul-lib-source-maps'));
|
||||
|
||||
_istanbulLibSourceMaps = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _v8Coverage() {
|
||||
const data = require('@bcoe/v8-coverage');
|
||||
|
||||
_v8Coverage = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _jestWorker() {
|
||||
const data = _interopRequireDefault(require('jest-worker'));
|
||||
|
||||
_jestWorker = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _glob() {
|
||||
const data = _interopRequireDefault(require('glob'));
|
||||
|
||||
_glob = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _v8ToIstanbul() {
|
||||
const data = _interopRequireDefault(require('v8-to-istanbul'));
|
||||
|
||||
_v8ToIstanbul = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _base_reporter = _interopRequireDefault(require('./base_reporter'));
|
||||
|
||||
var _get_watermarks = _interopRequireDefault(require('./get_watermarks'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
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 FAIL_COLOR = _chalk().default.bold.red;
|
||||
|
||||
const RUNNING_TEST_COLOR = _chalk().default.bold.dim;
|
||||
|
||||
class CoverageReporter extends _base_reporter.default {
|
||||
constructor(globalConfig, options) {
|
||||
super();
|
||||
|
||||
_defineProperty(this, '_coverageMap', void 0);
|
||||
|
||||
_defineProperty(this, '_globalConfig', void 0);
|
||||
|
||||
_defineProperty(this, '_sourceMapStore', void 0);
|
||||
|
||||
_defineProperty(this, '_options', void 0);
|
||||
|
||||
_defineProperty(this, '_v8CoverageResults', void 0);
|
||||
|
||||
this._coverageMap = _istanbulLibCoverage().default.createCoverageMap({});
|
||||
this._globalConfig = globalConfig;
|
||||
this._sourceMapStore = _istanbulLibSourceMaps().default.createSourceMapStore();
|
||||
this._v8CoverageResults = [];
|
||||
this._options = options || {};
|
||||
}
|
||||
|
||||
onTestResult(_test, testResult) {
|
||||
if (testResult.v8Coverage) {
|
||||
this._v8CoverageResults.push(testResult.v8Coverage);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (testResult.coverage) {
|
||||
this._coverageMap.merge(testResult.coverage);
|
||||
}
|
||||
}
|
||||
|
||||
async onRunComplete(contexts, aggregatedResults) {
|
||||
await this._addUntestedFiles(contexts);
|
||||
const {map, reportContext} = await this._getCoverageResult();
|
||||
|
||||
try {
|
||||
const coverageReporters = this._globalConfig.coverageReporters || [];
|
||||
|
||||
if (!this._globalConfig.useStderr && coverageReporters.length < 1) {
|
||||
coverageReporters.push('text-summary');
|
||||
}
|
||||
|
||||
coverageReporters.forEach(reporter => {
|
||||
let additionalOptions = {};
|
||||
|
||||
if (Array.isArray(reporter)) {
|
||||
[reporter, additionalOptions] = reporter;
|
||||
}
|
||||
|
||||
_istanbulReports()
|
||||
.default.create(reporter, {
|
||||
maxCols: process.stdout.columns || Infinity,
|
||||
...additionalOptions
|
||||
}) // @ts-expect-error
|
||||
.execute(reportContext);
|
||||
});
|
||||
aggregatedResults.coverageMap = map;
|
||||
} catch (e) {
|
||||
console.error(
|
||||
_chalk().default.red(`
|
||||
Failed to write coverage reports:
|
||||
ERROR: ${e.toString()}
|
||||
STACK: ${e.stack}
|
||||
`)
|
||||
);
|
||||
}
|
||||
|
||||
this._checkThreshold(map);
|
||||
}
|
||||
|
||||
async _addUntestedFiles(contexts) {
|
||||
const files = [];
|
||||
contexts.forEach(context => {
|
||||
const config = context.config;
|
||||
|
||||
if (
|
||||
this._globalConfig.collectCoverageFrom &&
|
||||
this._globalConfig.collectCoverageFrom.length
|
||||
) {
|
||||
context.hasteFS
|
||||
.matchFilesWithGlob(
|
||||
this._globalConfig.collectCoverageFrom,
|
||||
config.rootDir
|
||||
)
|
||||
.forEach(filePath =>
|
||||
files.push({
|
||||
config,
|
||||
path: filePath
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
if (!files.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_jestUtil().isInteractive) {
|
||||
process.stderr.write(
|
||||
RUNNING_TEST_COLOR('Running coverage on untested files...')
|
||||
);
|
||||
}
|
||||
|
||||
let worker;
|
||||
|
||||
if (this._globalConfig.maxWorkers <= 1) {
|
||||
worker = require('./coverage_worker');
|
||||
} else {
|
||||
worker = new (_jestWorker().default)(
|
||||
require.resolve('./coverage_worker'),
|
||||
{
|
||||
exposedMethods: ['worker'],
|
||||
maxRetries: 2,
|
||||
numWorkers: this._globalConfig.maxWorkers
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const instrumentation = files.map(async fileObj => {
|
||||
const filename = fileObj.path;
|
||||
const config = fileObj.config;
|
||||
|
||||
const hasCoverageData = this._v8CoverageResults.some(v8Res =>
|
||||
v8Res.some(innerRes => innerRes.result.url === filename)
|
||||
);
|
||||
|
||||
if (
|
||||
!hasCoverageData &&
|
||||
!this._coverageMap.data[filename] &&
|
||||
'worker' in worker
|
||||
) {
|
||||
try {
|
||||
const result = await worker.worker({
|
||||
config,
|
||||
globalConfig: this._globalConfig,
|
||||
options: {
|
||||
...this._options,
|
||||
changedFiles:
|
||||
this._options.changedFiles &&
|
||||
Array.from(this._options.changedFiles),
|
||||
sourcesRelatedToTestsInChangedFiles:
|
||||
this._options.sourcesRelatedToTestsInChangedFiles &&
|
||||
Array.from(this._options.sourcesRelatedToTestsInChangedFiles)
|
||||
},
|
||||
path: filename
|
||||
});
|
||||
|
||||
if (result) {
|
||||
if (result.kind === 'V8Coverage') {
|
||||
this._v8CoverageResults.push([
|
||||
{
|
||||
codeTransformResult: undefined,
|
||||
result: result.result
|
||||
}
|
||||
]);
|
||||
} else {
|
||||
this._coverageMap.addFileCoverage(result.coverage);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(
|
||||
_chalk().default.red(
|
||||
[
|
||||
`Failed to collect coverage from ${filename}`,
|
||||
`ERROR: ${error.message}`,
|
||||
`STACK: ${error.stack}`
|
||||
].join('\n')
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
await Promise.all(instrumentation);
|
||||
} catch {
|
||||
// Do nothing; errors were reported earlier to the console.
|
||||
}
|
||||
|
||||
if (_jestUtil().isInteractive) {
|
||||
(0, _jestUtil().clearLine)(process.stderr);
|
||||
}
|
||||
|
||||
if (worker && 'end' in worker && typeof worker.end === 'function') {
|
||||
await worker.end();
|
||||
}
|
||||
}
|
||||
|
||||
_checkThreshold(map) {
|
||||
const {coverageThreshold} = this._globalConfig;
|
||||
|
||||
if (coverageThreshold) {
|
||||
function check(name, thresholds, actuals) {
|
||||
return ['statements', 'branches', 'lines', 'functions'].reduce(
|
||||
(errors, key) => {
|
||||
const actual = actuals[key].pct;
|
||||
const actualUncovered = actuals[key].total - actuals[key].covered;
|
||||
const threshold = thresholds[key];
|
||||
|
||||
if (threshold !== undefined) {
|
||||
if (threshold < 0) {
|
||||
if (threshold * -1 < actualUncovered) {
|
||||
errors.push(
|
||||
`Jest: Uncovered count for ${key} (${actualUncovered}) ` +
|
||||
`exceeds ${name} threshold (${-1 * threshold})`
|
||||
);
|
||||
}
|
||||
} else if (actual < threshold) {
|
||||
errors.push(
|
||||
`Jest: "${name}" coverage threshold for ${key} (${threshold}%) not met: ${actual}%`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
},
|
||||
[]
|
||||
);
|
||||
}
|
||||
|
||||
const THRESHOLD_GROUP_TYPES = {
|
||||
GLOB: 'glob',
|
||||
GLOBAL: 'global',
|
||||
PATH: 'path'
|
||||
};
|
||||
const coveredFiles = map.files();
|
||||
const thresholdGroups = Object.keys(coverageThreshold);
|
||||
const groupTypeByThresholdGroup = {};
|
||||
const filesByGlob = {};
|
||||
const coveredFilesSortedIntoThresholdGroup = coveredFiles.reduce(
|
||||
(files, file) => {
|
||||
const pathOrGlobMatches = thresholdGroups.reduce(
|
||||
(agg, thresholdGroup) => {
|
||||
const absoluteThresholdGroup = path().resolve(thresholdGroup); // The threshold group might be a path:
|
||||
|
||||
if (file.indexOf(absoluteThresholdGroup) === 0) {
|
||||
groupTypeByThresholdGroup[thresholdGroup] =
|
||||
THRESHOLD_GROUP_TYPES.PATH;
|
||||
return agg.concat([[file, thresholdGroup]]);
|
||||
} // If the threshold group is not a path it might be a glob:
|
||||
// Note: glob.sync is slow. By memoizing the files matching each glob
|
||||
// (rather than recalculating it for each covered file) we save a tonne
|
||||
// of execution time.
|
||||
|
||||
if (filesByGlob[absoluteThresholdGroup] === undefined) {
|
||||
filesByGlob[absoluteThresholdGroup] = _glob()
|
||||
.default.sync(absoluteThresholdGroup)
|
||||
.map(filePath => path().resolve(filePath));
|
||||
}
|
||||
|
||||
if (filesByGlob[absoluteThresholdGroup].indexOf(file) > -1) {
|
||||
groupTypeByThresholdGroup[thresholdGroup] =
|
||||
THRESHOLD_GROUP_TYPES.GLOB;
|
||||
return agg.concat([[file, thresholdGroup]]);
|
||||
}
|
||||
|
||||
return agg;
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
if (pathOrGlobMatches.length > 0) {
|
||||
return files.concat(pathOrGlobMatches);
|
||||
} // Neither a glob or a path? Toss it in global if there's a global threshold:
|
||||
|
||||
if (thresholdGroups.indexOf(THRESHOLD_GROUP_TYPES.GLOBAL) > -1) {
|
||||
groupTypeByThresholdGroup[THRESHOLD_GROUP_TYPES.GLOBAL] =
|
||||
THRESHOLD_GROUP_TYPES.GLOBAL;
|
||||
return files.concat([[file, THRESHOLD_GROUP_TYPES.GLOBAL]]);
|
||||
} // A covered file that doesn't have a threshold:
|
||||
|
||||
return files.concat([[file, undefined]]);
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
const getFilesInThresholdGroup = thresholdGroup =>
|
||||
coveredFilesSortedIntoThresholdGroup
|
||||
.filter(fileAndGroup => fileAndGroup[1] === thresholdGroup)
|
||||
.map(fileAndGroup => fileAndGroup[0]);
|
||||
|
||||
function combineCoverage(filePaths) {
|
||||
return filePaths
|
||||
.map(filePath => map.fileCoverageFor(filePath))
|
||||
.reduce((combinedCoverage, nextFileCoverage) => {
|
||||
if (combinedCoverage === undefined || combinedCoverage === null) {
|
||||
return nextFileCoverage.toSummary();
|
||||
}
|
||||
|
||||
return combinedCoverage.merge(nextFileCoverage.toSummary());
|
||||
}, undefined);
|
||||
}
|
||||
|
||||
let errors = [];
|
||||
thresholdGroups.forEach(thresholdGroup => {
|
||||
switch (groupTypeByThresholdGroup[thresholdGroup]) {
|
||||
case THRESHOLD_GROUP_TYPES.GLOBAL: {
|
||||
const coverage = combineCoverage(
|
||||
getFilesInThresholdGroup(THRESHOLD_GROUP_TYPES.GLOBAL)
|
||||
);
|
||||
|
||||
if (coverage) {
|
||||
errors = errors.concat(
|
||||
check(
|
||||
thresholdGroup,
|
||||
coverageThreshold[thresholdGroup],
|
||||
coverage
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case THRESHOLD_GROUP_TYPES.PATH: {
|
||||
const coverage = combineCoverage(
|
||||
getFilesInThresholdGroup(thresholdGroup)
|
||||
);
|
||||
|
||||
if (coverage) {
|
||||
errors = errors.concat(
|
||||
check(
|
||||
thresholdGroup,
|
||||
coverageThreshold[thresholdGroup],
|
||||
coverage
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case THRESHOLD_GROUP_TYPES.GLOB:
|
||||
getFilesInThresholdGroup(thresholdGroup).forEach(
|
||||
fileMatchingGlob => {
|
||||
errors = errors.concat(
|
||||
check(
|
||||
fileMatchingGlob,
|
||||
coverageThreshold[thresholdGroup],
|
||||
map.fileCoverageFor(fileMatchingGlob).toSummary()
|
||||
)
|
||||
);
|
||||
}
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
// If the file specified by path is not found, error is returned.
|
||||
if (thresholdGroup !== THRESHOLD_GROUP_TYPES.GLOBAL) {
|
||||
errors = errors.concat(
|
||||
`Jest: Coverage data for ${thresholdGroup} was not found.`
|
||||
);
|
||||
}
|
||||
|
||||
// Sometimes all files in the coverage data are matched by
|
||||
// PATH and GLOB threshold groups in which case, don't error when
|
||||
// the global threshold group doesn't match any files.
|
||||
}
|
||||
});
|
||||
errors = errors.filter(
|
||||
err => err !== undefined && err !== null && err.length > 0
|
||||
);
|
||||
|
||||
if (errors.length > 0) {
|
||||
this.log(`${FAIL_COLOR(errors.join('\n'))}`);
|
||||
|
||||
this._setError(new Error(errors.join('\n')));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async _getCoverageResult() {
|
||||
if (this._globalConfig.coverageProvider === 'v8') {
|
||||
const mergedCoverages = (0, _v8Coverage().mergeProcessCovs)(
|
||||
this._v8CoverageResults.map(cov => ({
|
||||
result: cov.map(r => r.result)
|
||||
}))
|
||||
);
|
||||
const fileTransforms = new Map();
|
||||
|
||||
this._v8CoverageResults.forEach(res =>
|
||||
res.forEach(r => {
|
||||
if (r.codeTransformResult && !fileTransforms.has(r.result.url)) {
|
||||
fileTransforms.set(r.result.url, r.codeTransformResult);
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
const transformedCoverage = await Promise.all(
|
||||
mergedCoverages.result.map(async res => {
|
||||
const fileTransform = fileTransforms.get(res.url);
|
||||
let sourcemapContent = undefined;
|
||||
|
||||
if (
|
||||
fileTransform &&
|
||||
fileTransform.sourceMapPath &&
|
||||
fs().existsSync(fileTransform.sourceMapPath)
|
||||
) {
|
||||
sourcemapContent = JSON.parse(
|
||||
fs().readFileSync(fileTransform.sourceMapPath, 'utf8')
|
||||
);
|
||||
}
|
||||
|
||||
const converter = (0, _v8ToIstanbul().default)(
|
||||
res.url,
|
||||
0,
|
||||
fileTransform && sourcemapContent
|
||||
? {
|
||||
originalSource: fileTransform.originalCode,
|
||||
source: fileTransform.code,
|
||||
sourceMap: {
|
||||
sourcemap: sourcemapContent
|
||||
}
|
||||
}
|
||||
: {
|
||||
source: fs().readFileSync(res.url, 'utf8')
|
||||
}
|
||||
);
|
||||
await converter.load();
|
||||
converter.applyCoverage(res.functions);
|
||||
return converter.toIstanbul();
|
||||
})
|
||||
);
|
||||
|
||||
const map = _istanbulLibCoverage().default.createCoverageMap({});
|
||||
|
||||
transformedCoverage.forEach(res => map.merge(res));
|
||||
|
||||
const reportContext = _istanbulLibReport().default.createContext({
|
||||
coverageMap: map,
|
||||
dir: this._globalConfig.coverageDirectory,
|
||||
watermarks: (0, _get_watermarks.default)(this._globalConfig)
|
||||
});
|
||||
|
||||
return {
|
||||
map,
|
||||
reportContext
|
||||
};
|
||||
}
|
||||
|
||||
const map = await this._sourceMapStore.transformCoverage(this._coverageMap);
|
||||
|
||||
const reportContext = _istanbulLibReport().default.createContext({
|
||||
coverageMap: map,
|
||||
dir: this._globalConfig.coverageDirectory,
|
||||
sourceFinder: this._sourceMapStore.sourceFinder,
|
||||
watermarks: (0, _get_watermarks.default)(this._globalConfig)
|
||||
});
|
||||
|
||||
return {
|
||||
map,
|
||||
reportContext
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = CoverageReporter;
|
17
node_modules/@jest/reporters/build/coverage_worker.d.ts
generated
vendored
Normal file
17
node_modules/@jest/reporters/build/coverage_worker.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { CoverageReporterSerializedOptions } from './types';
|
||||
import { CoverageWorkerResult } from './generateEmptyCoverage';
|
||||
export declare type CoverageWorkerData = {
|
||||
globalConfig: Config.GlobalConfig;
|
||||
config: Config.ProjectConfig;
|
||||
path: Config.Path;
|
||||
options?: CoverageReporterSerializedOptions;
|
||||
};
|
||||
export type { CoverageWorkerResult };
|
||||
export declare function worker({ config, globalConfig, path, options, }: CoverageWorkerData): CoverageWorkerResult | null;
|
103
node_modules/@jest/reporters/build/coverage_worker.js
generated
vendored
Normal file
103
node_modules/@jest/reporters/build/coverage_worker.js
generated
vendored
Normal file
|
@ -0,0 +1,103 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.worker = worker;
|
||||
|
||||
function fs() {
|
||||
const data = _interopRequireWildcard(require('graceful-fs'));
|
||||
|
||||
fs = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _exit() {
|
||||
const data = _interopRequireDefault(require('exit'));
|
||||
|
||||
_exit = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _generateEmptyCoverage = _interopRequireWildcard(
|
||||
require('./generateEmptyCoverage')
|
||||
);
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
// Make sure uncaught errors are logged before we exit.
|
||||
process.on('uncaughtException', err => {
|
||||
console.error(err.stack);
|
||||
(0, _exit().default)(1);
|
||||
});
|
||||
|
||||
function worker({config, globalConfig, path, options}) {
|
||||
return (0, _generateEmptyCoverage.default)(
|
||||
fs().readFileSync(path, 'utf8'),
|
||||
path,
|
||||
globalConfig,
|
||||
config,
|
||||
(options === null || options === void 0 ? void 0 : options.changedFiles) &&
|
||||
new Set(options.changedFiles),
|
||||
(options === null || options === void 0
|
||||
? void 0
|
||||
: options.sourcesRelatedToTestsInChangedFiles) &&
|
||||
new Set(options.sourcesRelatedToTestsInChangedFiles)
|
||||
);
|
||||
}
|
31
node_modules/@jest/reporters/build/default_reporter.d.ts
generated
vendored
Normal file
31
node_modules/@jest/reporters/build/default_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult, TestCaseResult, TestResult } from '@jest/test-result';
|
||||
import type { ReporterOnStartOptions, Test } from './types';
|
||||
import BaseReporter from './base_reporter';
|
||||
export default class DefaultReporter extends BaseReporter {
|
||||
private _clear;
|
||||
private _err;
|
||||
protected _globalConfig: Config.GlobalConfig;
|
||||
private _out;
|
||||
private _status;
|
||||
private _bufferedOutput;
|
||||
constructor(globalConfig: Config.GlobalConfig);
|
||||
private _wrapStdio;
|
||||
forceFlushBufferedOutput(): void;
|
||||
private _clearStatus;
|
||||
private _printStatus;
|
||||
onRunStart(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
|
||||
onTestStart(test: Test): void;
|
||||
onTestCaseResult(test: Test, testCaseResult: TestCaseResult): void;
|
||||
onRunComplete(): void;
|
||||
onTestResult(test: Test, testResult: TestResult, aggregatedResults: AggregatedResult): void;
|
||||
testFinished(config: Config.ProjectConfig, testResult: TestResult, aggregatedResults: AggregatedResult): void;
|
||||
printTestFileHeader(_testPath: Config.Path, config: Config.ProjectConfig, result: TestResult): void;
|
||||
printTestFileFailureMessage(_testPath: Config.Path, _config: Config.ProjectConfig, result: TestResult): void;
|
||||
}
|
258
node_modules/@jest/reporters/build/default_reporter.js
generated
vendored
Normal file
258
node_modules/@jest/reporters/build/default_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,258 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
function _jestUtil() {
|
||||
const data = require('jest-util');
|
||||
|
||||
_jestUtil = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _console() {
|
||||
const data = require('@jest/console');
|
||||
|
||||
_console = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _chalk() {
|
||||
const data = _interopRequireDefault(require('chalk'));
|
||||
|
||||
_chalk = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _base_reporter = _interopRequireDefault(require('./base_reporter'));
|
||||
|
||||
var _Status = _interopRequireDefault(require('./Status'));
|
||||
|
||||
var _get_result_header = _interopRequireDefault(require('./get_result_header'));
|
||||
|
||||
var _get_snapshot_status = _interopRequireDefault(
|
||||
require('./get_snapshot_status')
|
||||
);
|
||||
|
||||
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 TITLE_BULLET = _chalk().default.bold('\u25cf ');
|
||||
|
||||
class DefaultReporter extends _base_reporter.default {
|
||||
// ANSI clear sequence for the last printed status
|
||||
constructor(globalConfig) {
|
||||
super();
|
||||
|
||||
_defineProperty(this, '_clear', void 0);
|
||||
|
||||
_defineProperty(this, '_err', void 0);
|
||||
|
||||
_defineProperty(this, '_globalConfig', void 0);
|
||||
|
||||
_defineProperty(this, '_out', void 0);
|
||||
|
||||
_defineProperty(this, '_status', void 0);
|
||||
|
||||
_defineProperty(this, '_bufferedOutput', void 0);
|
||||
|
||||
this._globalConfig = globalConfig;
|
||||
this._clear = '';
|
||||
this._out = process.stdout.write.bind(process.stdout);
|
||||
this._err = process.stderr.write.bind(process.stderr);
|
||||
this._status = new _Status.default();
|
||||
this._bufferedOutput = new Set();
|
||||
|
||||
this._wrapStdio(process.stdout);
|
||||
|
||||
this._wrapStdio(process.stderr);
|
||||
|
||||
this._status.onChange(() => {
|
||||
this._clearStatus();
|
||||
|
||||
this._printStatus();
|
||||
});
|
||||
}
|
||||
|
||||
_wrapStdio(stream) {
|
||||
const originalWrite = stream.write;
|
||||
let buffer = [];
|
||||
let timeout = null;
|
||||
|
||||
const flushBufferedOutput = () => {
|
||||
const string = buffer.join('');
|
||||
buffer = []; // This is to avoid conflicts between random output and status text
|
||||
|
||||
this._clearStatus();
|
||||
|
||||
if (string) {
|
||||
originalWrite.call(stream, string);
|
||||
}
|
||||
|
||||
this._printStatus();
|
||||
|
||||
this._bufferedOutput.delete(flushBufferedOutput);
|
||||
};
|
||||
|
||||
this._bufferedOutput.add(flushBufferedOutput);
|
||||
|
||||
const debouncedFlush = () => {
|
||||
// If the process blows up no errors would be printed.
|
||||
// There should be a smart way to buffer stderr, but for now
|
||||
// we just won't buffer it.
|
||||
if (stream === process.stderr) {
|
||||
flushBufferedOutput();
|
||||
} else {
|
||||
if (!timeout) {
|
||||
timeout = setTimeout(() => {
|
||||
flushBufferedOutput();
|
||||
timeout = null;
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
stream.write = chunk => {
|
||||
buffer.push(chunk);
|
||||
debouncedFlush();
|
||||
return true;
|
||||
};
|
||||
} // Don't wait for the debounced call and flush all output immediately.
|
||||
|
||||
forceFlushBufferedOutput() {
|
||||
for (const flushBufferedOutput of this._bufferedOutput) {
|
||||
flushBufferedOutput();
|
||||
}
|
||||
}
|
||||
|
||||
_clearStatus() {
|
||||
if (_jestUtil().isInteractive) {
|
||||
if (this._globalConfig.useStderr) {
|
||||
this._err(this._clear);
|
||||
} else {
|
||||
this._out(this._clear);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_printStatus() {
|
||||
const {content, clear} = this._status.get();
|
||||
|
||||
this._clear = clear;
|
||||
|
||||
if (_jestUtil().isInteractive) {
|
||||
if (this._globalConfig.useStderr) {
|
||||
this._err(content);
|
||||
} else {
|
||||
this._out(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onRunStart(aggregatedResults, options) {
|
||||
this._status.runStarted(aggregatedResults, options);
|
||||
}
|
||||
|
||||
onTestStart(test) {
|
||||
this._status.testStarted(test.path, test.context.config);
|
||||
}
|
||||
|
||||
onTestCaseResult(test, testCaseResult) {
|
||||
this._status.addTestCaseResult(test, testCaseResult);
|
||||
}
|
||||
|
||||
onRunComplete() {
|
||||
this.forceFlushBufferedOutput();
|
||||
|
||||
this._status.runFinished();
|
||||
|
||||
process.stdout.write = this._out;
|
||||
process.stderr.write = this._err;
|
||||
(0, _jestUtil().clearLine)(process.stderr);
|
||||
}
|
||||
|
||||
onTestResult(test, testResult, aggregatedResults) {
|
||||
this.testFinished(test.context.config, testResult, aggregatedResults);
|
||||
|
||||
if (!testResult.skipped) {
|
||||
this.printTestFileHeader(
|
||||
testResult.testFilePath,
|
||||
test.context.config,
|
||||
testResult
|
||||
);
|
||||
this.printTestFileFailureMessage(
|
||||
testResult.testFilePath,
|
||||
test.context.config,
|
||||
testResult
|
||||
);
|
||||
}
|
||||
|
||||
this.forceFlushBufferedOutput();
|
||||
}
|
||||
|
||||
testFinished(config, testResult, aggregatedResults) {
|
||||
this._status.testFinished(config, testResult, aggregatedResults);
|
||||
}
|
||||
|
||||
printTestFileHeader(_testPath, config, result) {
|
||||
this.log(
|
||||
(0, _get_result_header.default)(result, this._globalConfig, config)
|
||||
);
|
||||
|
||||
if (result.console) {
|
||||
this.log(
|
||||
' ' +
|
||||
TITLE_BULLET +
|
||||
'Console\n\n' +
|
||||
(0, _console().getConsoleOutput)(
|
||||
config.cwd,
|
||||
!!this._globalConfig.verbose,
|
||||
result.console,
|
||||
config,
|
||||
this._globalConfig
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
printTestFileFailureMessage(_testPath, _config, result) {
|
||||
if (result.failureMessage) {
|
||||
this.log(result.failureMessage);
|
||||
}
|
||||
|
||||
const didUpdate = this._globalConfig.updateSnapshot === 'all';
|
||||
const snapshotStatuses = (0, _get_snapshot_status.default)(
|
||||
result.snapshot,
|
||||
didUpdate
|
||||
);
|
||||
snapshotStatuses.forEach(this.log);
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = DefaultReporter;
|
19
node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts
generated
vendored
Normal file
19
node_modules/@jest/reporters/build/generateEmptyCoverage.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import { FileCoverage } from 'istanbul-lib-coverage';
|
||||
import type { V8Coverage } from 'collect-v8-coverage';
|
||||
declare type SingleV8Coverage = V8Coverage[number];
|
||||
export declare type CoverageWorkerResult = {
|
||||
kind: 'BabelCoverage';
|
||||
coverage: FileCoverage;
|
||||
} | {
|
||||
kind: 'V8Coverage';
|
||||
result: SingleV8Coverage;
|
||||
};
|
||||
export default function (source: string, filename: Config.Path, globalConfig: Config.GlobalConfig, config: Config.ProjectConfig, changedFiles?: Set<Config.Path>, sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>): CoverageWorkerResult | null;
|
||||
export {};
|
158
node_modules/@jest/reporters/build/generateEmptyCoverage.js
generated
vendored
Normal file
158
node_modules/@jest/reporters/build/generateEmptyCoverage.js
generated
vendored
Normal file
|
@ -0,0 +1,158 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = _default;
|
||||
|
||||
function fs() {
|
||||
const data = _interopRequireWildcard(require('graceful-fs'));
|
||||
|
||||
fs = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulLibInstrument() {
|
||||
const data = require('istanbul-lib-instrument');
|
||||
|
||||
_istanbulLibInstrument = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _istanbulLibCoverage() {
|
||||
const data = require('istanbul-lib-coverage');
|
||||
|
||||
_istanbulLibCoverage = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _transform() {
|
||||
const data = require('@jest/transform');
|
||||
|
||||
_transform = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
function _default(
|
||||
source,
|
||||
filename,
|
||||
globalConfig,
|
||||
config,
|
||||
changedFiles,
|
||||
sourcesRelatedToTestsInChangedFiles
|
||||
) {
|
||||
const coverageOptions = {
|
||||
changedFiles,
|
||||
collectCoverage: globalConfig.collectCoverage,
|
||||
collectCoverageFrom: globalConfig.collectCoverageFrom,
|
||||
collectCoverageOnlyFrom: globalConfig.collectCoverageOnlyFrom,
|
||||
coverageProvider: globalConfig.coverageProvider,
|
||||
sourcesRelatedToTestsInChangedFiles
|
||||
};
|
||||
let coverageWorkerResult = null;
|
||||
|
||||
if ((0, _transform().shouldInstrument)(filename, coverageOptions, config)) {
|
||||
if (coverageOptions.coverageProvider === 'v8') {
|
||||
const stat = fs().statSync(filename);
|
||||
return {
|
||||
kind: 'V8Coverage',
|
||||
result: {
|
||||
functions: [
|
||||
{
|
||||
functionName: '(empty-report)',
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{
|
||||
count: 0,
|
||||
endOffset: stat.size,
|
||||
startOffset: 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
scriptId: '0',
|
||||
url: filename
|
||||
}
|
||||
};
|
||||
} // Transform file with instrumentation to make sure initial coverage data is well mapped to original code.
|
||||
|
||||
const {code} = new (_transform().ScriptTransformer)(config).transformSource(
|
||||
filename,
|
||||
source,
|
||||
true
|
||||
); // TODO: consider passing AST
|
||||
|
||||
const extracted = (0, _istanbulLibInstrument().readInitialCoverage)(code); // Check extracted initial coverage is not null, this can happen when using /* istanbul ignore file */
|
||||
|
||||
if (extracted) {
|
||||
coverageWorkerResult = {
|
||||
coverage: (0, _istanbulLibCoverage().createFileCoverage)(
|
||||
extracted.coverageData
|
||||
),
|
||||
kind: 'BabelCoverage'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return coverageWorkerResult;
|
||||
}
|
10
node_modules/@jest/reporters/build/get_result_header.d.ts
generated
vendored
Normal file
10
node_modules/@jest/reporters/build/get_result_header.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { TestResult } from '@jest/test-result';
|
||||
declare const _default: (result: TestResult, globalConfig: Config.GlobalConfig, projectConfig?: Config.ProjectConfig | undefined) => string;
|
||||
export default _default;
|
107
node_modules/@jest/reporters/build/get_result_header.js
generated
vendored
Normal file
107
node_modules/@jest/reporters/build/get_result_header.js
generated
vendored
Normal file
|
@ -0,0 +1,107 @@
|
|||
'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;
|
||||
}
|
||||
|
||||
function _terminalLink() {
|
||||
const data = _interopRequireDefault(require('terminal-link'));
|
||||
|
||||
_terminalLink = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _utils = require('./utils');
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const LONG_TEST_COLOR = _chalk().default.reset.bold.bgRed; // Explicitly reset for these messages since they can get written out in the
|
||||
// middle of error logging
|
||||
|
||||
const FAIL_TEXT = 'FAIL';
|
||||
const PASS_TEXT = 'PASS';
|
||||
const FAIL = _chalk().default.supportsColor
|
||||
? _chalk().default.reset.inverse.bold.red(` ${FAIL_TEXT} `)
|
||||
: FAIL_TEXT;
|
||||
const PASS = _chalk().default.supportsColor
|
||||
? _chalk().default.reset.inverse.bold.green(` ${PASS_TEXT} `)
|
||||
: PASS_TEXT;
|
||||
|
||||
var _default = (result, globalConfig, projectConfig) => {
|
||||
var _result$perfStats;
|
||||
|
||||
const testPath = result.testFilePath;
|
||||
const formattedTestPath = (0, _utils.formatTestPath)(
|
||||
projectConfig ? projectConfig : globalConfig,
|
||||
testPath
|
||||
);
|
||||
const fileLink = (0, _terminalLink().default)(
|
||||
formattedTestPath,
|
||||
`file://${testPath}`,
|
||||
{
|
||||
fallback: () => formattedTestPath
|
||||
}
|
||||
);
|
||||
const status =
|
||||
result.numFailingTests > 0 || result.testExecError ? FAIL : PASS;
|
||||
const testDetail = [];
|
||||
|
||||
if (
|
||||
(_result$perfStats = result.perfStats) === null ||
|
||||
_result$perfStats === void 0
|
||||
? void 0
|
||||
: _result$perfStats.slow
|
||||
) {
|
||||
const runTime = result.perfStats.runtime / 1000;
|
||||
testDetail.push(LONG_TEST_COLOR((0, _jestUtil().formatTime)(runTime, 0)));
|
||||
}
|
||||
|
||||
if (result.memoryUsage) {
|
||||
const toMB = bytes => Math.floor(bytes / 1024 / 1024);
|
||||
|
||||
testDetail.push(`${toMB(result.memoryUsage)} MB heap size`);
|
||||
}
|
||||
|
||||
const projectDisplayName =
|
||||
projectConfig && projectConfig.displayName
|
||||
? (0, _utils.printDisplayName)(projectConfig) + ' '
|
||||
: '';
|
||||
return (
|
||||
`${status} ${projectDisplayName}${fileLink}` +
|
||||
(testDetail.length ? ` (${testDetail.join(', ')})` : '')
|
||||
);
|
||||
};
|
||||
|
||||
exports.default = _default;
|
9
node_modules/@jest/reporters/build/get_snapshot_status.d.ts
generated
vendored
Normal file
9
node_modules/@jest/reporters/build/get_snapshot_status.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { TestResult } from '@jest/test-result';
|
||||
declare const _default: (snapshot: TestResult['snapshot'], afterUpdate: boolean) => Array<string>;
|
||||
export default _default;
|
113
node_modules/@jest/reporters/build/get_snapshot_status.js
generated
vendored
Normal file
113
node_modules/@jest/reporters/build/get_snapshot_status.js
generated
vendored
Normal file
|
@ -0,0 +1,113 @@
|
|||
'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;
|
||||
}
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const ARROW = ' \u203A ';
|
||||
const DOT = ' \u2022 ';
|
||||
|
||||
const FAIL_COLOR = _chalk().default.bold.red;
|
||||
|
||||
const SNAPSHOT_ADDED = _chalk().default.bold.green;
|
||||
|
||||
const SNAPSHOT_UPDATED = _chalk().default.bold.green;
|
||||
|
||||
const SNAPSHOT_OUTDATED = _chalk().default.bold.yellow;
|
||||
|
||||
var _default = (snapshot, afterUpdate) => {
|
||||
const statuses = [];
|
||||
|
||||
if (snapshot.added) {
|
||||
statuses.push(
|
||||
SNAPSHOT_ADDED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshot.added) +
|
||||
' written.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshot.updated) {
|
||||
statuses.push(
|
||||
SNAPSHOT_UPDATED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshot.updated) +
|
||||
' updated.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshot.unmatched) {
|
||||
statuses.push(
|
||||
FAIL_COLOR(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshot.unmatched) +
|
||||
' failed.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshot.unchecked) {
|
||||
if (afterUpdate) {
|
||||
statuses.push(
|
||||
SNAPSHOT_UPDATED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshot.unchecked) +
|
||||
' removed.'
|
||||
)
|
||||
);
|
||||
} else {
|
||||
statuses.push(
|
||||
SNAPSHOT_OUTDATED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshot.unchecked) +
|
||||
' obsolete'
|
||||
) + '.'
|
||||
);
|
||||
}
|
||||
|
||||
snapshot.uncheckedKeys.forEach(key => {
|
||||
statuses.push(` ${DOT}${key}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (snapshot.fileDeleted) {
|
||||
statuses.push(SNAPSHOT_UPDATED(ARROW + 'snapshot file removed.'));
|
||||
}
|
||||
|
||||
return statuses;
|
||||
};
|
||||
|
||||
exports.default = _default;
|
10
node_modules/@jest/reporters/build/get_snapshot_summary.d.ts
generated
vendored
Normal file
10
node_modules/@jest/reporters/build/get_snapshot_summary.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { SnapshotSummary } from '@jest/test-result';
|
||||
declare const _default: (snapshots: SnapshotSummary, globalConfig: Config.GlobalConfig, updateCommand: string) => Array<string>;
|
||||
export default _default;
|
205
node_modules/@jest/reporters/build/get_snapshot_summary.js
generated
vendored
Normal file
205
node_modules/@jest/reporters/build/get_snapshot_summary.js
generated
vendored
Normal file
|
@ -0,0 +1,205 @@
|
|||
'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 _utils = require('./utils');
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const ARROW = ' \u203A ';
|
||||
const DOWN_ARROW = ' \u21B3 ';
|
||||
const DOT = ' \u2022 ';
|
||||
|
||||
const FAIL_COLOR = _chalk().default.bold.red;
|
||||
|
||||
const OBSOLETE_COLOR = _chalk().default.bold.yellow;
|
||||
|
||||
const SNAPSHOT_ADDED = _chalk().default.bold.green;
|
||||
|
||||
const SNAPSHOT_NOTE = _chalk().default.dim;
|
||||
|
||||
const SNAPSHOT_REMOVED = _chalk().default.bold.green;
|
||||
|
||||
const SNAPSHOT_SUMMARY = _chalk().default.bold;
|
||||
|
||||
const SNAPSHOT_UPDATED = _chalk().default.bold.green;
|
||||
|
||||
var _default = (snapshots, globalConfig, updateCommand) => {
|
||||
const summary = [];
|
||||
summary.push(SNAPSHOT_SUMMARY('Snapshot Summary'));
|
||||
|
||||
if (snapshots.added) {
|
||||
summary.push(
|
||||
SNAPSHOT_ADDED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshots.added) +
|
||||
' written '
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.filesAdded
|
||||
)}.`
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshots.unmatched) {
|
||||
summary.push(
|
||||
FAIL_COLOR(
|
||||
`${ARROW}${(0, _jestUtil().pluralize)(
|
||||
'snapshot',
|
||||
snapshots.unmatched
|
||||
)} failed`
|
||||
) +
|
||||
` from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.filesUnmatched
|
||||
)}. ` +
|
||||
SNAPSHOT_NOTE(
|
||||
'Inspect your code changes or ' + updateCommand + ' to update them.'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshots.updated) {
|
||||
summary.push(
|
||||
SNAPSHOT_UPDATED(
|
||||
ARROW +
|
||||
(0, _jestUtil().pluralize)('snapshot', snapshots.updated) +
|
||||
' updated '
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.filesUpdated
|
||||
)}.`
|
||||
);
|
||||
}
|
||||
|
||||
if (snapshots.filesRemoved) {
|
||||
if (snapshots.didUpdate) {
|
||||
summary.push(
|
||||
SNAPSHOT_REMOVED(
|
||||
`${ARROW}${(0, _jestUtil().pluralize)(
|
||||
'snapshot file',
|
||||
snapshots.filesRemoved
|
||||
)} removed `
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.filesRemoved
|
||||
)}.`
|
||||
);
|
||||
} else {
|
||||
summary.push(
|
||||
OBSOLETE_COLOR(
|
||||
`${ARROW}${(0, _jestUtil().pluralize)(
|
||||
'snapshot file',
|
||||
snapshots.filesRemoved
|
||||
)} obsolete `
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.filesRemoved
|
||||
)}. ` +
|
||||
SNAPSHOT_NOTE(
|
||||
`To remove ${
|
||||
snapshots.filesRemoved === 1 ? 'it' : 'them all'
|
||||
}, ${updateCommand}.`
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) {
|
||||
const [head, ...tail] = snapshots.filesRemovedList;
|
||||
summary.push(
|
||||
` ${DOWN_ARROW} ${DOT}${(0, _utils.formatTestPath)(globalConfig, head)}`
|
||||
);
|
||||
tail.forEach(key => {
|
||||
summary.push(
|
||||
` ${DOT}${(0, _utils.formatTestPath)(globalConfig, key)}`
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
if (snapshots.unchecked) {
|
||||
if (snapshots.didUpdate) {
|
||||
summary.push(
|
||||
SNAPSHOT_REMOVED(
|
||||
`${ARROW}${(0, _jestUtil().pluralize)(
|
||||
'snapshot',
|
||||
snapshots.unchecked
|
||||
)} removed `
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.uncheckedKeysByFile.length
|
||||
)}.`
|
||||
);
|
||||
} else {
|
||||
summary.push(
|
||||
OBSOLETE_COLOR(
|
||||
`${ARROW}${(0, _jestUtil().pluralize)(
|
||||
'snapshot',
|
||||
snapshots.unchecked
|
||||
)} obsolete `
|
||||
) +
|
||||
`from ${(0, _jestUtil().pluralize)(
|
||||
'test suite',
|
||||
snapshots.uncheckedKeysByFile.length
|
||||
)}. ` +
|
||||
SNAPSHOT_NOTE(
|
||||
`To remove ${
|
||||
snapshots.unchecked === 1 ? 'it' : 'them all'
|
||||
}, ${updateCommand}.`
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
snapshots.uncheckedKeysByFile.forEach(uncheckedFile => {
|
||||
summary.push(
|
||||
` ${DOWN_ARROW}${(0, _utils.formatTestPath)(
|
||||
globalConfig,
|
||||
uncheckedFile.filePath
|
||||
)}`
|
||||
);
|
||||
uncheckedFile.keys.forEach(key => {
|
||||
summary.push(` ${DOT}${key}`);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return summary;
|
||||
};
|
||||
|
||||
exports.default = _default;
|
9
node_modules/@jest/reporters/build/get_watermarks.d.ts
generated
vendored
Normal file
9
node_modules/@jest/reporters/build/get_watermarks.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import istanbulReport = require('istanbul-lib-report');
|
||||
export default function getWatermarks(config: Config.GlobalConfig): istanbulReport.Watermarks;
|
47
node_modules/@jest/reporters/build/get_watermarks.js
generated
vendored
Normal file
47
node_modules/@jest/reporters/build/get_watermarks.js
generated
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = getWatermarks;
|
||||
|
||||
function _istanbulLibReport() {
|
||||
const data = _interopRequireDefault(require('istanbul-lib-report'));
|
||||
|
||||
_istanbulLibReport = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
function getWatermarks(config) {
|
||||
const defaultWatermarks = _istanbulLibReport().default.getDefaultWatermarks();
|
||||
|
||||
const {coverageThreshold} = config;
|
||||
|
||||
if (!coverageThreshold || !coverageThreshold.global) {
|
||||
return defaultWatermarks;
|
||||
}
|
||||
|
||||
const keys = ['branches', 'functions', 'lines', 'statements'];
|
||||
return keys.reduce((watermarks, key) => {
|
||||
const value = coverageThreshold.global[key];
|
||||
|
||||
if (value !== undefined) {
|
||||
watermarks[key][1] = value;
|
||||
}
|
||||
|
||||
return watermarks;
|
||||
}, defaultWatermarks);
|
||||
}
|
24
node_modules/@jest/reporters/build/index.d.ts
generated
vendored
Normal file
24
node_modules/@jest/reporters/build/index.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
export type { Config } from '@jest/types';
|
||||
export type { AggregatedResult, SnapshotSummary, TestResult, } from '@jest/test-result';
|
||||
export { default as BaseReporter } from './base_reporter';
|
||||
export { default as CoverageReporter } from './coverage_reporter';
|
||||
export { default as DefaultReporter } from './default_reporter';
|
||||
export { default as NotifyReporter } from './notify_reporter';
|
||||
export { default as SummaryReporter } from './summary_reporter';
|
||||
export { default as VerboseReporter } from './verbose_reporter';
|
||||
export type { Context, Reporter, ReporterOnStartOptions, SummaryOptions, Test, } from './types';
|
||||
export declare const utils: {
|
||||
formatTestPath: (config: import("@jest/types/build/Config").GlobalConfig | import("@jest/types/build/Config").ProjectConfig, testPath: string) => string;
|
||||
printDisplayName: (config: import("@jest/types/build/Config").ProjectConfig) => string;
|
||||
relativePath: (config: import("@jest/types/build/Config").GlobalConfig | import("@jest/types/build/Config").ProjectConfig, testPath: string) => {
|
||||
basename: string;
|
||||
dirname: string;
|
||||
};
|
||||
trimAndFormatPath: (pad: number, config: import("@jest/types/build/Config").GlobalConfig | import("@jest/types/build/Config").ProjectConfig, testPath: string, columns: number) => string;
|
||||
};
|
74
node_modules/@jest/reporters/build/index.js
generated
vendored
Normal file
74
node_modules/@jest/reporters/build/index.js
generated
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, 'BaseReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _base_reporter.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'CoverageReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _coverage_reporter.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'DefaultReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _default_reporter.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'NotifyReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _notify_reporter.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'SummaryReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _summary_reporter.default;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, 'VerboseReporter', {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _verbose_reporter.default;
|
||||
}
|
||||
});
|
||||
exports.utils = void 0;
|
||||
|
||||
var _utils = require('./utils');
|
||||
|
||||
var _base_reporter = _interopRequireDefault(require('./base_reporter'));
|
||||
|
||||
var _coverage_reporter = _interopRequireDefault(require('./coverage_reporter'));
|
||||
|
||||
var _default_reporter = _interopRequireDefault(require('./default_reporter'));
|
||||
|
||||
var _notify_reporter = _interopRequireDefault(require('./notify_reporter'));
|
||||
|
||||
var _summary_reporter = _interopRequireDefault(require('./summary_reporter'));
|
||||
|
||||
var _verbose_reporter = _interopRequireDefault(require('./verbose_reporter'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const utils = {
|
||||
formatTestPath: _utils.formatTestPath,
|
||||
printDisplayName: _utils.printDisplayName,
|
||||
relativePath: _utils.relativePath,
|
||||
trimAndFormatPath: _utils.trimAndFormatPath
|
||||
};
|
||||
exports.utils = utils;
|
18
node_modules/@jest/reporters/build/notify_reporter.d.ts
generated
vendored
Normal file
18
node_modules/@jest/reporters/build/notify_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult } from '@jest/test-result';
|
||||
import type { Context, TestSchedulerContext } from './types';
|
||||
import BaseReporter from './base_reporter';
|
||||
export default class NotifyReporter extends BaseReporter {
|
||||
private _notifier;
|
||||
private _startRun;
|
||||
private _globalConfig;
|
||||
private _context;
|
||||
constructor(globalConfig: Config.GlobalConfig, startRun: (globalConfig: Config.GlobalConfig) => any, context: TestSchedulerContext);
|
||||
onRunComplete(contexts: Set<Context>, result: AggregatedResult): void;
|
||||
}
|
254
node_modules/@jest/reporters/build/notify_reporter.js
generated
vendored
Normal file
254
node_modules/@jest/reporters/build/notify_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,254 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
function path() {
|
||||
const data = _interopRequireWildcard(require('path'));
|
||||
|
||||
path = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function util() {
|
||||
const data = _interopRequireWildcard(require('util'));
|
||||
|
||||
util = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _exit() {
|
||||
const data = _interopRequireDefault(require('exit'));
|
||||
|
||||
_exit = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _jestUtil() {
|
||||
const data = require('jest-util');
|
||||
|
||||
_jestUtil = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _base_reporter = _interopRequireDefault(require('./base_reporter'));
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
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 isDarwin = process.platform === 'darwin';
|
||||
const icon = path().resolve(__dirname, '../assets/jest_logo.png');
|
||||
|
||||
class NotifyReporter extends _base_reporter.default {
|
||||
constructor(globalConfig, startRun, context) {
|
||||
super();
|
||||
|
||||
_defineProperty(this, '_notifier', loadNotifier());
|
||||
|
||||
_defineProperty(this, '_startRun', void 0);
|
||||
|
||||
_defineProperty(this, '_globalConfig', void 0);
|
||||
|
||||
_defineProperty(this, '_context', void 0);
|
||||
|
||||
this._globalConfig = globalConfig;
|
||||
this._startRun = startRun;
|
||||
this._context = context;
|
||||
}
|
||||
|
||||
onRunComplete(contexts, result) {
|
||||
const success =
|
||||
result.numFailedTests === 0 && result.numRuntimeErrorTestSuites === 0;
|
||||
const firstContext = contexts.values().next();
|
||||
const hasteFS =
|
||||
firstContext && firstContext.value && firstContext.value.hasteFS;
|
||||
let packageName;
|
||||
|
||||
if (hasteFS != null) {
|
||||
// assuming root package.json is the first one
|
||||
const [filePath] = hasteFS.matchFiles('package.json');
|
||||
packageName =
|
||||
filePath != null
|
||||
? hasteFS.getModuleName(filePath)
|
||||
: this._globalConfig.rootDir;
|
||||
} else {
|
||||
packageName = this._globalConfig.rootDir;
|
||||
}
|
||||
|
||||
packageName = packageName != null ? `${packageName} - ` : '';
|
||||
const notifyMode = this._globalConfig.notifyMode;
|
||||
const statusChanged =
|
||||
this._context.previousSuccess !== success || this._context.firstRun;
|
||||
const testsHaveRun = result.numTotalTests !== 0;
|
||||
|
||||
if (
|
||||
testsHaveRun &&
|
||||
success &&
|
||||
(notifyMode === 'always' ||
|
||||
notifyMode === 'success' ||
|
||||
notifyMode === 'success-change' ||
|
||||
(notifyMode === 'change' && statusChanged) ||
|
||||
(notifyMode === 'failure-change' && statusChanged))
|
||||
) {
|
||||
const title = util().format('%s%d%% Passed', packageName, 100);
|
||||
const message = `${isDarwin ? '\u2705 ' : ''}${(0, _jestUtil().pluralize)(
|
||||
'test',
|
||||
result.numPassedTests
|
||||
)} passed`;
|
||||
|
||||
this._notifier.notify({
|
||||
icon,
|
||||
message,
|
||||
timeout: false,
|
||||
title
|
||||
});
|
||||
} else if (
|
||||
testsHaveRun &&
|
||||
!success &&
|
||||
(notifyMode === 'always' ||
|
||||
notifyMode === 'failure' ||
|
||||
notifyMode === 'failure-change' ||
|
||||
(notifyMode === 'change' && statusChanged) ||
|
||||
(notifyMode === 'success-change' && statusChanged))
|
||||
) {
|
||||
const failed = result.numFailedTests / result.numTotalTests;
|
||||
const title = util().format(
|
||||
'%s%d%% Failed',
|
||||
packageName,
|
||||
Math.ceil(Number.isNaN(failed) ? 0 : failed * 100)
|
||||
);
|
||||
const message = util().format(
|
||||
(isDarwin ? '\u26D4\uFE0F ' : '') + '%d of %d tests failed',
|
||||
result.numFailedTests,
|
||||
result.numTotalTests
|
||||
);
|
||||
const watchMode = this._globalConfig.watch || this._globalConfig.watchAll;
|
||||
const restartAnswer = 'Run again';
|
||||
const quitAnswer = 'Exit tests';
|
||||
|
||||
if (!watchMode) {
|
||||
this._notifier.notify({
|
||||
icon,
|
||||
message,
|
||||
timeout: false,
|
||||
title
|
||||
});
|
||||
} else {
|
||||
this._notifier.notify(
|
||||
{
|
||||
actions: [restartAnswer, quitAnswer],
|
||||
closeLabel: 'Close',
|
||||
icon,
|
||||
message,
|
||||
timeout: false,
|
||||
title // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/42303
|
||||
},
|
||||
(err, _, metadata) => {
|
||||
if (err || !metadata) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (metadata.activationValue === quitAnswer) {
|
||||
(0, _exit().default)(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (metadata.activationValue === restartAnswer) {
|
||||
this._startRun(this._globalConfig);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
this._context.previousSuccess = success;
|
||||
this._context.firstRun = false;
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = NotifyReporter;
|
||||
|
||||
function loadNotifier() {
|
||||
try {
|
||||
return require('node-notifier');
|
||||
} catch (err) {
|
||||
if (err.code !== 'MODULE_NOT_FOUND') {
|
||||
throw err;
|
||||
} else {
|
||||
throw Error(
|
||||
'notify reporter requires optional dependeny node-notifier but it was not found'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
21
node_modules/@jest/reporters/build/summary_reporter.d.ts
generated
vendored
Normal file
21
node_modules/@jest/reporters/build/summary_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult } from '@jest/test-result';
|
||||
import type { Context, ReporterOnStartOptions } from './types';
|
||||
import BaseReporter from './base_reporter';
|
||||
export default class SummaryReporter extends BaseReporter {
|
||||
private _estimatedTime;
|
||||
private _globalConfig;
|
||||
constructor(globalConfig: Config.GlobalConfig);
|
||||
private _write;
|
||||
onRunStart(aggregatedResults: AggregatedResult, options: ReporterOnStartOptions): void;
|
||||
onRunComplete(contexts: Set<Context>, aggregatedResults: AggregatedResult): void;
|
||||
private _printSnapshotSummary;
|
||||
private _printSummary;
|
||||
private _getTestSummary;
|
||||
}
|
272
node_modules/@jest/reporters/build/summary_reporter.js
generated
vendored
Normal file
272
node_modules/@jest/reporters/build/summary_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,272 @@
|
|||
'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 _base_reporter = _interopRequireDefault(require('./base_reporter'));
|
||||
|
||||
var _utils = require('./utils');
|
||||
|
||||
var _get_result_header = _interopRequireDefault(require('./get_result_header'));
|
||||
|
||||
var _get_snapshot_summary = _interopRequireDefault(
|
||||
require('./get_snapshot_summary')
|
||||
);
|
||||
|
||||
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 TEST_SUMMARY_THRESHOLD = 20;
|
||||
const NPM_EVENTS = new Set([
|
||||
'prepublish',
|
||||
'publish',
|
||||
'postpublish',
|
||||
'preinstall',
|
||||
'install',
|
||||
'postinstall',
|
||||
'preuninstall',
|
||||
'uninstall',
|
||||
'postuninstall',
|
||||
'preversion',
|
||||
'version',
|
||||
'postversion',
|
||||
'pretest',
|
||||
'test',
|
||||
'posttest',
|
||||
'prestop',
|
||||
'stop',
|
||||
'poststop',
|
||||
'prestart',
|
||||
'start',
|
||||
'poststart',
|
||||
'prerestart',
|
||||
'restart',
|
||||
'postrestart'
|
||||
]);
|
||||
const {
|
||||
npm_config_user_agent,
|
||||
npm_lifecycle_event,
|
||||
npm_lifecycle_script
|
||||
} = process.env;
|
||||
|
||||
class SummaryReporter extends _base_reporter.default {
|
||||
constructor(globalConfig) {
|
||||
super();
|
||||
|
||||
_defineProperty(this, '_estimatedTime', void 0);
|
||||
|
||||
_defineProperty(this, '_globalConfig', void 0);
|
||||
|
||||
this._globalConfig = globalConfig;
|
||||
this._estimatedTime = 0;
|
||||
} // If we write more than one character at a time it is possible that
|
||||
// Node.js exits in the middle of printing the result. This was first observed
|
||||
// in Node.js 0.10 and still persists in Node.js 6.7+.
|
||||
// Let's print the test failure summary character by character which is safer
|
||||
// when hundreds of tests are failing.
|
||||
|
||||
_write(string) {
|
||||
for (let i = 0; i < string.length; i++) {
|
||||
process.stderr.write(string.charAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
onRunStart(aggregatedResults, options) {
|
||||
super.onRunStart(aggregatedResults, options);
|
||||
this._estimatedTime = options.estimatedTime;
|
||||
}
|
||||
|
||||
onRunComplete(contexts, aggregatedResults) {
|
||||
const {numTotalTestSuites, testResults, wasInterrupted} = aggregatedResults;
|
||||
|
||||
if (numTotalTestSuites) {
|
||||
const lastResult = testResults[testResults.length - 1]; // Print a newline if the last test did not fail to line up newlines
|
||||
// similar to when an error would have been thrown in the test.
|
||||
|
||||
if (
|
||||
!this._globalConfig.verbose &&
|
||||
lastResult &&
|
||||
!lastResult.numFailingTests &&
|
||||
!lastResult.testExecError
|
||||
) {
|
||||
this.log('');
|
||||
}
|
||||
|
||||
this._printSummary(aggregatedResults, this._globalConfig);
|
||||
|
||||
this._printSnapshotSummary(
|
||||
aggregatedResults.snapshot,
|
||||
this._globalConfig
|
||||
);
|
||||
|
||||
if (numTotalTestSuites) {
|
||||
let message = (0, _utils.getSummary)(aggregatedResults, {
|
||||
estimatedTime: this._estimatedTime
|
||||
});
|
||||
|
||||
if (!this._globalConfig.silent) {
|
||||
message +=
|
||||
'\n' +
|
||||
(wasInterrupted
|
||||
? _chalk().default.bold.red('Test run was interrupted.')
|
||||
: this._getTestSummary(contexts, this._globalConfig));
|
||||
}
|
||||
|
||||
this.log(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_printSnapshotSummary(snapshots, globalConfig) {
|
||||
if (
|
||||
snapshots.added ||
|
||||
snapshots.filesRemoved ||
|
||||
snapshots.unchecked ||
|
||||
snapshots.unmatched ||
|
||||
snapshots.updated
|
||||
) {
|
||||
let updateCommand;
|
||||
const event = npm_lifecycle_event || '';
|
||||
const prefix = NPM_EVENTS.has(event) ? '' : 'run ';
|
||||
const isYarn =
|
||||
typeof npm_config_user_agent === 'string' &&
|
||||
npm_config_user_agent.includes('yarn');
|
||||
const client = isYarn ? 'yarn' : 'npm';
|
||||
const scriptUsesJest =
|
||||
typeof npm_lifecycle_script === 'string' &&
|
||||
npm_lifecycle_script.includes('jest');
|
||||
|
||||
if (globalConfig.watch || globalConfig.watchAll) {
|
||||
updateCommand = 'press `u`';
|
||||
} else if (event && scriptUsesJest) {
|
||||
updateCommand = `run \`${
|
||||
client + ' ' + prefix + event + (isYarn ? '' : ' --')
|
||||
} -u\``;
|
||||
} else {
|
||||
updateCommand = 're-run jest with `-u`';
|
||||
}
|
||||
|
||||
const snapshotSummary = (0, _get_snapshot_summary.default)(
|
||||
snapshots,
|
||||
globalConfig,
|
||||
updateCommand
|
||||
);
|
||||
snapshotSummary.forEach(this.log);
|
||||
this.log(''); // print empty line
|
||||
}
|
||||
}
|
||||
|
||||
_printSummary(aggregatedResults, globalConfig) {
|
||||
// If there were any failing tests and there was a large number of tests
|
||||
// executed, re-print the failing results at the end of execution output.
|
||||
const failedTests = aggregatedResults.numFailedTests;
|
||||
const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites;
|
||||
|
||||
if (
|
||||
failedTests + runtimeErrors > 0 &&
|
||||
aggregatedResults.numTotalTestSuites > TEST_SUMMARY_THRESHOLD
|
||||
) {
|
||||
this.log(_chalk().default.bold('Summary of all failing tests'));
|
||||
aggregatedResults.testResults.forEach(testResult => {
|
||||
const {failureMessage} = testResult;
|
||||
|
||||
if (failureMessage) {
|
||||
this._write(
|
||||
(0, _get_result_header.default)(testResult, globalConfig) +
|
||||
'\n' +
|
||||
failureMessage +
|
||||
'\n'
|
||||
);
|
||||
}
|
||||
});
|
||||
this.log(''); // print empty line
|
||||
}
|
||||
}
|
||||
|
||||
_getTestSummary(contexts, globalConfig) {
|
||||
const getMatchingTestsInfo = () => {
|
||||
const prefix = globalConfig.findRelatedTests
|
||||
? ' related to files matching '
|
||||
: ' matching ';
|
||||
return (
|
||||
_chalk().default.dim(prefix) +
|
||||
(0, _jestUtil().testPathPatternToRegExp)(
|
||||
globalConfig.testPathPattern
|
||||
).toString()
|
||||
);
|
||||
};
|
||||
|
||||
let testInfo = '';
|
||||
|
||||
if (globalConfig.runTestsByPath) {
|
||||
testInfo = _chalk().default.dim(' within paths');
|
||||
} else if (globalConfig.onlyChanged) {
|
||||
testInfo = _chalk().default.dim(' related to changed files');
|
||||
} else if (globalConfig.testPathPattern) {
|
||||
testInfo = getMatchingTestsInfo();
|
||||
}
|
||||
|
||||
let nameInfo = '';
|
||||
|
||||
if (globalConfig.runTestsByPath) {
|
||||
nameInfo = ' ' + globalConfig.nonFlagArgs.map(p => `"${p}"`).join(', ');
|
||||
} else if (globalConfig.testNamePattern) {
|
||||
nameInfo =
|
||||
_chalk().default.dim(' with tests matching ') +
|
||||
`"${globalConfig.testNamePattern}"`;
|
||||
}
|
||||
|
||||
const contextInfo =
|
||||
contexts.size > 1
|
||||
? _chalk().default.dim(' in ') +
|
||||
contexts.size +
|
||||
_chalk().default.dim(' projects')
|
||||
: '';
|
||||
return (
|
||||
_chalk().default.dim('Ran all test suites') +
|
||||
testInfo +
|
||||
nameInfo +
|
||||
contextInfo +
|
||||
_chalk().default.dim('.')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
exports.default = SummaryReporter;
|
75
node_modules/@jest/reporters/build/types.d.ts
generated
vendored
Normal file
75
node_modules/@jest/reporters/build/types.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult, SerializableError, TestCaseResult, TestResult } from '@jest/test-result';
|
||||
import type { FS as HasteFS, ModuleMap } from 'jest-haste-map';
|
||||
import type { ResolverType } from 'jest-resolve';
|
||||
import type { worker } from './coverage_worker';
|
||||
export declare type ReporterOnStartOptions = {
|
||||
estimatedTime: number;
|
||||
showStatus: boolean;
|
||||
};
|
||||
export declare type Context = {
|
||||
config: Config.ProjectConfig;
|
||||
hasteFS: HasteFS;
|
||||
moduleMap: ModuleMap;
|
||||
resolver: ResolverType;
|
||||
};
|
||||
export declare type Test = {
|
||||
context: Context;
|
||||
duration?: number;
|
||||
path: Config.Path;
|
||||
};
|
||||
export declare type CoverageWorker = {
|
||||
worker: typeof worker;
|
||||
};
|
||||
export declare type CoverageReporterOptions = {
|
||||
changedFiles?: Set<Config.Path>;
|
||||
sourcesRelatedToTestsInChangedFiles?: Set<Config.Path>;
|
||||
};
|
||||
export declare type CoverageReporterSerializedOptions = {
|
||||
changedFiles?: Array<Config.Path>;
|
||||
sourcesRelatedToTestsInChangedFiles?: Array<Config.Path>;
|
||||
};
|
||||
export declare type OnTestStart = (test: Test) => Promise<void>;
|
||||
export declare type OnTestFailure = (test: Test, error: SerializableError) => Promise<any>;
|
||||
export declare type OnTestSuccess = (test: Test, result: TestResult) => Promise<any>;
|
||||
export interface Reporter {
|
||||
readonly onTestResult?: (test: Test, testResult: TestResult, aggregatedResult: AggregatedResult) => Promise<void> | void;
|
||||
readonly onTestFileResult?: (test: Test, testResult: TestResult, aggregatedResult: AggregatedResult) => Promise<void> | void;
|
||||
readonly onTestCaseResult?: (test: Test, testCaseResult: TestCaseResult) => Promise<void> | void;
|
||||
readonly onRunStart: (results: AggregatedResult, options: ReporterOnStartOptions) => Promise<void> | void;
|
||||
readonly onTestStart?: (test: Test) => Promise<void> | void;
|
||||
readonly onTestFileStart?: (test: Test) => Promise<void> | void;
|
||||
readonly onRunComplete: (contexts: Set<Context>, results: AggregatedResult) => Promise<void> | void;
|
||||
readonly getLastError: () => Error | void;
|
||||
}
|
||||
export declare type SummaryOptions = {
|
||||
currentTestCases?: Array<{
|
||||
test: Test;
|
||||
testCaseResult: TestCaseResult;
|
||||
}>;
|
||||
estimatedTime?: number;
|
||||
roundTime?: boolean;
|
||||
width?: number;
|
||||
};
|
||||
export declare type TestRunnerOptions = {
|
||||
serial: boolean;
|
||||
};
|
||||
export declare type TestRunData = Array<{
|
||||
context: Context;
|
||||
matches: {
|
||||
allTests: number;
|
||||
tests: Array<Test>;
|
||||
total: number;
|
||||
};
|
||||
}>;
|
||||
export declare type TestSchedulerContext = {
|
||||
firstRun: boolean;
|
||||
previousSuccess: boolean;
|
||||
changedFiles?: Set<Config.Path>;
|
||||
};
|
1
node_modules/@jest/reporters/build/types.js
generated
vendored
Normal file
1
node_modules/@jest/reporters/build/types.js
generated
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
'use strict';
|
18
node_modules/@jest/reporters/build/utils.d.ts
generated
vendored
Normal file
18
node_modules/@jest/reporters/build/utils.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult } from '@jest/test-result';
|
||||
import type { SummaryOptions } from './types';
|
||||
export declare const printDisplayName: (config: Config.ProjectConfig) => string;
|
||||
export declare const trimAndFormatPath: (pad: number, config: Config.ProjectConfig | Config.GlobalConfig, testPath: Config.Path, columns: number) => string;
|
||||
export declare const formatTestPath: (config: Config.GlobalConfig | Config.ProjectConfig, testPath: Config.Path) => string;
|
||||
export declare const relativePath: (config: Config.GlobalConfig | Config.ProjectConfig, testPath: Config.Path) => {
|
||||
basename: string;
|
||||
dirname: string;
|
||||
};
|
||||
export declare const getSummary: (aggregatedResults: AggregatedResult, options?: SummaryOptions | undefined) => string;
|
||||
export declare const wrapAnsiString: (string: string, terminalWidth: number) => string;
|
429
node_modules/@jest/reporters/build/utils.js
generated
vendored
Normal file
429
node_modules/@jest/reporters/build/utils.js
generated
vendored
Normal file
|
@ -0,0 +1,429 @@
|
|||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.wrapAnsiString = exports.getSummary = exports.relativePath = exports.formatTestPath = exports.trimAndFormatPath = exports.printDisplayName = void 0;
|
||||
|
||||
function path() {
|
||||
const data = _interopRequireWildcard(require('path'));
|
||||
|
||||
path = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _chalk() {
|
||||
const data = _interopRequireDefault(require('chalk'));
|
||||
|
||||
_chalk = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _slash() {
|
||||
const data = _interopRequireDefault(require('slash'));
|
||||
|
||||
_slash = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _jestUtil() {
|
||||
const data = require('jest-util');
|
||||
|
||||
_jestUtil = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache() {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cache = new WeakMap();
|
||||
_getRequireWildcardCache = function () {
|
||||
return cache;
|
||||
};
|
||||
return cache;
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj) {
|
||||
if (obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache();
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const PROGRESS_BAR_WIDTH = 40;
|
||||
|
||||
const printDisplayName = config => {
|
||||
const {displayName} = config;
|
||||
|
||||
const white = _chalk().default.reset.inverse.white;
|
||||
|
||||
if (!displayName) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const {name, color} = displayName;
|
||||
const chosenColor = _chalk().default.reset.inverse[color]
|
||||
? _chalk().default.reset.inverse[color]
|
||||
: white;
|
||||
return _chalk().default.supportsColor ? chosenColor(` ${name} `) : name;
|
||||
};
|
||||
|
||||
exports.printDisplayName = printDisplayName;
|
||||
|
||||
const trimAndFormatPath = (pad, config, testPath, columns) => {
|
||||
const maxLength = columns - pad;
|
||||
const relative = relativePath(config, testPath);
|
||||
const {basename} = relative;
|
||||
let {dirname} = relative; // length is ok
|
||||
|
||||
if ((dirname + path().sep + basename).length <= maxLength) {
|
||||
return (0, _slash().default)(
|
||||
_chalk().default.dim(dirname + path().sep) +
|
||||
_chalk().default.bold(basename)
|
||||
);
|
||||
} // we can fit trimmed dirname and full basename
|
||||
|
||||
const basenameLength = basename.length;
|
||||
|
||||
if (basenameLength + 4 < maxLength) {
|
||||
const dirnameLength = maxLength - 4 - basenameLength;
|
||||
dirname =
|
||||
'...' + dirname.slice(dirname.length - dirnameLength, dirname.length);
|
||||
return (0, _slash().default)(
|
||||
_chalk().default.dim(dirname + path().sep) +
|
||||
_chalk().default.bold(basename)
|
||||
);
|
||||
}
|
||||
|
||||
if (basenameLength + 4 === maxLength) {
|
||||
return (0, _slash().default)(
|
||||
_chalk().default.dim('...' + path().sep) + _chalk().default.bold(basename)
|
||||
);
|
||||
} // can't fit dirname, but can fit trimmed basename
|
||||
|
||||
return (0, _slash().default)(
|
||||
_chalk().default.bold(
|
||||
'...' + basename.slice(basename.length - maxLength - 4, basename.length)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
exports.trimAndFormatPath = trimAndFormatPath;
|
||||
|
||||
const formatTestPath = (config, testPath) => {
|
||||
const {dirname, basename} = relativePath(config, testPath);
|
||||
return (0, _slash().default)(
|
||||
_chalk().default.dim(dirname + path().sep) + _chalk().default.bold(basename)
|
||||
);
|
||||
};
|
||||
|
||||
exports.formatTestPath = formatTestPath;
|
||||
|
||||
const relativePath = (config, testPath) => {
|
||||
// this function can be called with ProjectConfigs or GlobalConfigs. GlobalConfigs
|
||||
// do not have config.cwd, only config.rootDir. Try using config.cwd, fallback
|
||||
// to config.rootDir. (Also, some unit just use config.rootDir, which is ok)
|
||||
testPath = path().relative(config.cwd || config.rootDir, testPath);
|
||||
const dirname = path().dirname(testPath);
|
||||
const basename = path().basename(testPath);
|
||||
return {
|
||||
basename,
|
||||
dirname
|
||||
};
|
||||
};
|
||||
|
||||
exports.relativePath = relativePath;
|
||||
|
||||
const getValuesCurrentTestCases = (currentTestCases = []) => {
|
||||
let numFailingTests = 0;
|
||||
let numPassingTests = 0;
|
||||
let numPendingTests = 0;
|
||||
let numTodoTests = 0;
|
||||
let numTotalTests = 0;
|
||||
currentTestCases.forEach(testCase => {
|
||||
switch (testCase.testCaseResult.status) {
|
||||
case 'failed': {
|
||||
numFailingTests++;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'passed': {
|
||||
numPassingTests++;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'skipped': {
|
||||
numPendingTests++;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'todo': {
|
||||
numTodoTests++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
numTotalTests++;
|
||||
});
|
||||
return {
|
||||
numFailingTests,
|
||||
numPassingTests,
|
||||
numPendingTests,
|
||||
numTodoTests,
|
||||
numTotalTests
|
||||
};
|
||||
};
|
||||
|
||||
const getSummary = (aggregatedResults, options) => {
|
||||
let runTime = (Date.now() - aggregatedResults.startTime) / 1000;
|
||||
|
||||
if (options && options.roundTime) {
|
||||
runTime = Math.floor(runTime);
|
||||
}
|
||||
|
||||
const valuesForCurrentTestCases = getValuesCurrentTestCases(
|
||||
options === null || options === void 0 ? void 0 : options.currentTestCases
|
||||
);
|
||||
const estimatedTime = (options && options.estimatedTime) || 0;
|
||||
const snapshotResults = aggregatedResults.snapshot;
|
||||
const snapshotsAdded = snapshotResults.added;
|
||||
const snapshotsFailed = snapshotResults.unmatched;
|
||||
const snapshotsOutdated = snapshotResults.unchecked;
|
||||
const snapshotsFilesRemoved = snapshotResults.filesRemoved;
|
||||
const snapshotsDidUpdate = snapshotResults.didUpdate;
|
||||
const snapshotsPassed = snapshotResults.matched;
|
||||
const snapshotsTotal = snapshotResults.total;
|
||||
const snapshotsUpdated = snapshotResults.updated;
|
||||
const suitesFailed = aggregatedResults.numFailedTestSuites;
|
||||
const suitesPassed = aggregatedResults.numPassedTestSuites;
|
||||
const suitesPending = aggregatedResults.numPendingTestSuites;
|
||||
const suitesRun = suitesFailed + suitesPassed;
|
||||
const suitesTotal = aggregatedResults.numTotalTestSuites;
|
||||
const testsFailed = aggregatedResults.numFailedTests;
|
||||
const testsPassed = aggregatedResults.numPassedTests;
|
||||
const testsPending = aggregatedResults.numPendingTests;
|
||||
const testsTodo = aggregatedResults.numTodoTests;
|
||||
const testsTotal = aggregatedResults.numTotalTests;
|
||||
const width = (options && options.width) || 0;
|
||||
const suites =
|
||||
_chalk().default.bold('Test Suites: ') +
|
||||
(suitesFailed
|
||||
? _chalk().default.bold.red(`${suitesFailed} failed`) + ', '
|
||||
: '') +
|
||||
(suitesPending
|
||||
? _chalk().default.bold.yellow(`${suitesPending} skipped`) + ', '
|
||||
: '') +
|
||||
(suitesPassed
|
||||
? _chalk().default.bold.green(`${suitesPassed} passed`) + ', '
|
||||
: '') +
|
||||
(suitesRun !== suitesTotal
|
||||
? suitesRun + ' of ' + suitesTotal
|
||||
: suitesTotal) +
|
||||
` total`;
|
||||
const updatedTestsFailed =
|
||||
testsFailed + valuesForCurrentTestCases.numFailingTests;
|
||||
const updatedTestsPending =
|
||||
testsPending + valuesForCurrentTestCases.numPendingTests;
|
||||
const updatedTestsTodo = testsTodo + valuesForCurrentTestCases.numTodoTests;
|
||||
const updatedTestsPassed =
|
||||
testsPassed + valuesForCurrentTestCases.numPassingTests;
|
||||
const updatedTestsTotal =
|
||||
testsTotal + valuesForCurrentTestCases.numTotalTests;
|
||||
const tests =
|
||||
_chalk().default.bold('Tests: ') +
|
||||
(updatedTestsFailed > 0
|
||||
? _chalk().default.bold.red(`${updatedTestsFailed} failed`) + ', '
|
||||
: '') +
|
||||
(updatedTestsPending > 0
|
||||
? _chalk().default.bold.yellow(`${updatedTestsPending} skipped`) + ', '
|
||||
: '') +
|
||||
(updatedTestsTodo > 0
|
||||
? _chalk().default.bold.magenta(`${updatedTestsTodo} todo`) + ', '
|
||||
: '') +
|
||||
(updatedTestsPassed > 0
|
||||
? _chalk().default.bold.green(`${updatedTestsPassed} passed`) + ', '
|
||||
: '') +
|
||||
`${updatedTestsTotal} total`;
|
||||
const snapshots =
|
||||
_chalk().default.bold('Snapshots: ') +
|
||||
(snapshotsFailed
|
||||
? _chalk().default.bold.red(`${snapshotsFailed} failed`) + ', '
|
||||
: '') +
|
||||
(snapshotsOutdated && !snapshotsDidUpdate
|
||||
? _chalk().default.bold.yellow(`${snapshotsOutdated} obsolete`) + ', '
|
||||
: '') +
|
||||
(snapshotsOutdated && snapshotsDidUpdate
|
||||
? _chalk().default.bold.green(`${snapshotsOutdated} removed`) + ', '
|
||||
: '') +
|
||||
(snapshotsFilesRemoved && !snapshotsDidUpdate
|
||||
? _chalk().default.bold.yellow(
|
||||
(0, _jestUtil().pluralize)('file', snapshotsFilesRemoved) +
|
||||
' obsolete'
|
||||
) + ', '
|
||||
: '') +
|
||||
(snapshotsFilesRemoved && snapshotsDidUpdate
|
||||
? _chalk().default.bold.green(
|
||||
(0, _jestUtil().pluralize)('file', snapshotsFilesRemoved) + ' removed'
|
||||
) + ', '
|
||||
: '') +
|
||||
(snapshotsUpdated
|
||||
? _chalk().default.bold.green(`${snapshotsUpdated} updated`) + ', '
|
||||
: '') +
|
||||
(snapshotsAdded
|
||||
? _chalk().default.bold.green(`${snapshotsAdded} written`) + ', '
|
||||
: '') +
|
||||
(snapshotsPassed
|
||||
? _chalk().default.bold.green(`${snapshotsPassed} passed`) + ', '
|
||||
: '') +
|
||||
`${snapshotsTotal} total`;
|
||||
const time = renderTime(runTime, estimatedTime, width);
|
||||
return [suites, tests, snapshots, time].join('\n');
|
||||
};
|
||||
|
||||
exports.getSummary = getSummary;
|
||||
|
||||
const renderTime = (runTime, estimatedTime, width) => {
|
||||
// If we are more than one second over the estimated time, highlight it.
|
||||
const renderedTime =
|
||||
estimatedTime && runTime >= estimatedTime + 1
|
||||
? _chalk().default.bold.yellow((0, _jestUtil().formatTime)(runTime, 0))
|
||||
: (0, _jestUtil().formatTime)(runTime, 0);
|
||||
let time = _chalk().default.bold(`Time:`) + ` ${renderedTime}`;
|
||||
|
||||
if (runTime < estimatedTime) {
|
||||
time += `, estimated ${(0, _jestUtil().formatTime)(estimatedTime, 0)}`;
|
||||
} // Only show a progress bar if the test run is actually going to take
|
||||
// some time.
|
||||
|
||||
if (estimatedTime > 2 && runTime < estimatedTime && width) {
|
||||
const availableWidth = Math.min(PROGRESS_BAR_WIDTH, width);
|
||||
const length = Math.min(
|
||||
Math.floor((runTime / estimatedTime) * availableWidth),
|
||||
availableWidth
|
||||
);
|
||||
|
||||
if (availableWidth >= 2) {
|
||||
time +=
|
||||
'\n' +
|
||||
_chalk().default.green('█').repeat(length) +
|
||||
_chalk()
|
||||
.default.white('█')
|
||||
.repeat(availableWidth - length);
|
||||
}
|
||||
}
|
||||
|
||||
return time;
|
||||
}; // word-wrap a string that contains ANSI escape sequences.
|
||||
// ANSI escape sequences do not add to the string length.
|
||||
|
||||
const wrapAnsiString = (string, terminalWidth) => {
|
||||
if (terminalWidth === 0) {
|
||||
// if the terminal width is zero, don't bother word-wrapping
|
||||
return string;
|
||||
}
|
||||
|
||||
const ANSI_REGEXP = /[\u001b\u009b]\[\d{1,2}m/g;
|
||||
const tokens = [];
|
||||
let lastIndex = 0;
|
||||
let match;
|
||||
|
||||
while ((match = ANSI_REGEXP.exec(string))) {
|
||||
const ansi = match[0];
|
||||
const index = match['index'];
|
||||
|
||||
if (index != lastIndex) {
|
||||
tokens.push(['string', string.slice(lastIndex, index)]);
|
||||
}
|
||||
|
||||
tokens.push(['ansi', ansi]);
|
||||
lastIndex = index + ansi.length;
|
||||
}
|
||||
|
||||
if (lastIndex != string.length - 1) {
|
||||
tokens.push(['string', string.slice(lastIndex, string.length)]);
|
||||
}
|
||||
|
||||
let lastLineLength = 0;
|
||||
return tokens
|
||||
.reduce(
|
||||
(lines, [kind, token]) => {
|
||||
if (kind === 'string') {
|
||||
if (lastLineLength + token.length > terminalWidth) {
|
||||
while (token.length) {
|
||||
const chunk = token.slice(0, terminalWidth - lastLineLength);
|
||||
const remaining = token.slice(
|
||||
terminalWidth - lastLineLength,
|
||||
token.length
|
||||
);
|
||||
lines[lines.length - 1] += chunk;
|
||||
lastLineLength += chunk.length;
|
||||
token = remaining;
|
||||
|
||||
if (token.length) {
|
||||
lines.push('');
|
||||
lastLineLength = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
lines[lines.length - 1] += token;
|
||||
lastLineLength += token.length;
|
||||
}
|
||||
} else {
|
||||
lines[lines.length - 1] += token;
|
||||
}
|
||||
|
||||
return lines;
|
||||
},
|
||||
['']
|
||||
)
|
||||
.join('\n');
|
||||
};
|
||||
|
||||
exports.wrapAnsiString = wrapAnsiString;
|
24
node_modules/@jest/reporters/build/verbose_reporter.d.ts
generated
vendored
Normal file
24
node_modules/@jest/reporters/build/verbose_reporter.d.ts
generated
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
import type { Config } from '@jest/types';
|
||||
import type { AggregatedResult, AssertionResult, Suite, TestResult } from '@jest/test-result';
|
||||
import type { Test } from './types';
|
||||
import DefaultReporter from './default_reporter';
|
||||
export default class VerboseReporter extends DefaultReporter {
|
||||
protected _globalConfig: Config.GlobalConfig;
|
||||
constructor(globalConfig: Config.GlobalConfig);
|
||||
static filterTestResults(testResults: Array<AssertionResult>): Array<AssertionResult>;
|
||||
static groupTestsBySuites(testResults: Array<AssertionResult>): Suite;
|
||||
onTestResult(test: Test, result: TestResult, aggregatedResults: AggregatedResult): void;
|
||||
private _logTestResults;
|
||||
private _logSuite;
|
||||
private _getIcon;
|
||||
private _logTest;
|
||||
private _logTests;
|
||||
private _logTodoOrPendingTest;
|
||||
private _logLine;
|
||||
}
|
209
node_modules/@jest/reporters/build/verbose_reporter.js
generated
vendored
Normal file
209
node_modules/@jest/reporters/build/verbose_reporter.js
generated
vendored
Normal file
|
@ -0,0 +1,209 @@
|
|||
'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 _default_reporter = _interopRequireDefault(require('./default_reporter'));
|
||||
|
||||
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 _default_reporter.default {
|
||||
constructor(globalConfig) {
|
||||
super(globalConfig);
|
||||
|
||||
_defineProperty(this, '_globalConfig', void 0);
|
||||
|
||||
this._globalConfig = globalConfig;
|
||||
}
|
||||
|
||||
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;
|
66
node_modules/@jest/reporters/package.json
generated
vendored
Normal file
66
node_modules/@jest/reporters/package.json
generated
vendored
Normal file
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"name": "@jest/reporters",
|
||||
"description": "Jest's reporters",
|
||||
"version": "26.4.1",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"dependencies": {
|
||||
"@bcoe/v8-coverage": "^0.2.3",
|
||||
"@jest/console": "^26.3.0",
|
||||
"@jest/test-result": "^26.3.0",
|
||||
"@jest/transform": "^26.3.0",
|
||||
"@jest/types": "^26.3.0",
|
||||
"chalk": "^4.0.0",
|
||||
"collect-v8-coverage": "^1.0.0",
|
||||
"exit": "^0.1.2",
|
||||
"glob": "^7.1.2",
|
||||
"graceful-fs": "^4.2.4",
|
||||
"istanbul-lib-coverage": "^3.0.0",
|
||||
"istanbul-lib-instrument": "^4.0.3",
|
||||
"istanbul-lib-report": "^3.0.0",
|
||||
"istanbul-lib-source-maps": "^4.0.0",
|
||||
"istanbul-reports": "^3.0.2",
|
||||
"jest-haste-map": "^26.3.0",
|
||||
"jest-resolve": "^26.4.0",
|
||||
"jest-util": "^26.3.0",
|
||||
"jest-worker": "^26.3.0",
|
||||
"slash": "^3.0.0",
|
||||
"source-map": "^0.6.0",
|
||||
"string-length": "^4.0.1",
|
||||
"terminal-link": "^2.0.0",
|
||||
"v8-to-istanbul": "^5.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/exit": "^0.1.30",
|
||||
"@types/glob": "^7.1.1",
|
||||
"@types/graceful-fs": "^4.1.3",
|
||||
"@types/istanbul-lib-coverage": "^2.0.0",
|
||||
"@types/istanbul-lib-instrument": "^1.7.2",
|
||||
"@types/istanbul-lib-report": "^3.0.0",
|
||||
"@types/istanbul-lib-source-maps": "^4.0.0",
|
||||
"@types/istanbul-reports": "^3.0.0",
|
||||
"@types/node-notifier": "^6.0.0",
|
||||
"mock-fs": "^4.4.1",
|
||||
"strip-ansi": "^6.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"node-notifier": "^8.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.14.2"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/facebook/jest",
|
||||
"directory": "packages/jest-reporters"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/facebook/jest/issues"
|
||||
},
|
||||
"homepage": "https://jestjs.io/",
|
||||
"license": "MIT",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"gitHead": "e1d51deea8d089a06f28b4dbe9287a4428508610"
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue