You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

447 lines
11 KiB

4 years ago
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.default = void 0;
function _path() {
const data = _interopRequireDefault(require('path'));
_path = function _path() {
return data;
};
return data;
}
function _chalk() {
const data = _interopRequireDefault(require('chalk'));
_chalk = function _chalk() {
return data;
};
return data;
}
function _realpathNative() {
const data = require('realpath-native');
_realpathNative = function _realpathNative() {
return data;
};
return data;
}
function _console() {
const data = require('@jest/console');
_console = function _console() {
return data;
};
return data;
}
function _jestUtil() {
const data = require('jest-util');
_jestUtil = function _jestUtil() {
return data;
};
return data;
}
function _exit() {
const data = _interopRequireDefault(require('exit'));
_exit = function _exit() {
return data;
};
return data;
}
function _gracefulFs() {
const data = _interopRequireDefault(require('graceful-fs'));
_gracefulFs = function _gracefulFs() {
return data;
};
return data;
}
function _jestWatcher() {
const data = require('jest-watcher');
_jestWatcher = function _jestWatcher() {
return data;
};
return data;
}
function _testResult() {
const data = require('@jest/test-result');
_testResult = function _testResult() {
return data;
};
return data;
}
var _getNoTestsFoundMessage = _interopRequireDefault(
require('./getNoTestsFoundMessage')
);
var _runGlobalHook = _interopRequireDefault(require('./runGlobalHook'));
var _SearchSource = _interopRequireDefault(require('./SearchSource'));
var _TestScheduler = _interopRequireDefault(require('./TestScheduler'));
var _collectHandles = _interopRequireDefault(require('./collectHandles'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(
Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
})
);
}
ownKeys.forEach(function(key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
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;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function() {
var self = this,
args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);
}
_next(undefined);
});
};
}
const getTestPaths =
/*#__PURE__*/
(function() {
var _ref = _asyncToGenerator(function*(
globalConfig,
context,
outputStream,
changedFiles,
jestHooks,
filter
) {
const source = new _SearchSource.default(context);
const data = yield source.getTestPaths(
globalConfig,
changedFiles,
filter
);
if (!data.tests.length && globalConfig.onlyChanged && data.noSCM) {
new (_console()).CustomConsole(outputStream, outputStream).log(
'Jest can only find uncommitted changed files in a git or hg ' +
'repository. If you make your project a git or hg ' +
'repository (`git init` or `hg init`), Jest will be able ' +
'to only run tests related to files changed since the last ' +
'commit.'
);
}
const shouldTestArray = yield Promise.all(
data.tests.map(test =>
jestHooks.shouldRunTestSuite({
config: test.context.config,
duration: test.duration,
testPath: test.path
})
)
);
const filteredTests = data.tests.filter((_test, i) => shouldTestArray[i]);
return _objectSpread({}, data, {
allTests: filteredTests.length,
tests: filteredTests
});
});
return function getTestPaths(_x, _x2, _x3, _x4, _x5, _x6) {
return _ref.apply(this, arguments);
};
})();
const processResults = (runResults, options) => {
const outputFile = options.outputFile,
isJSON = options.json,
onComplete = options.onComplete,
outputStream = options.outputStream,
testResultsProcessor = options.testResultsProcessor,
collectHandles = options.collectHandles;
if (collectHandles) {
runResults.openHandles = collectHandles();
} else {
runResults.openHandles = [];
}
if (testResultsProcessor) {
runResults = require(testResultsProcessor)(runResults);
}
if (isJSON) {
if (outputFile) {
const cwd = (0, _realpathNative().sync)(process.cwd());
const filePath = _path().default.resolve(cwd, outputFile);
_gracefulFs().default.writeFileSync(
filePath,
JSON.stringify((0, _jestUtil().formatTestResults)(runResults))
);
outputStream.write(
`Test results written to: ${_path().default.relative(cwd, filePath)}\n`
);
} else {
process.stdout.write(
JSON.stringify((0, _jestUtil().formatTestResults)(runResults))
);
}
}
return onComplete && onComplete(runResults);
};
const testSchedulerContext = {
firstRun: true,
previousSuccess: true
};
var _default =
/*#__PURE__*/
(function() {
var _runJest = _asyncToGenerator(function*({
contexts,
globalConfig,
outputStream,
testWatcher,
jestHooks = new (_jestWatcher()).JestHook().getEmitter(),
startRun,
changedFilesPromise,
onComplete,
failedTestsCache,
filter
}) {
const Sequencer = (0, _jestUtil().interopRequireDefault)(
require(globalConfig.testSequencer)
).default;
const sequencer = new Sequencer();
let allTests = [];
if (changedFilesPromise && globalConfig.watch) {
const _ref2 = yield changedFilesPromise,
repos = _ref2.repos;
const noSCM = Object.keys(repos).every(scm => repos[scm].size === 0);
if (noSCM) {
process.stderr.write(
'\n' +
_chalk().default.bold('--watch') +
' is not supported without git/hg, please use --watchAll ' +
'\n'
);
(0, _exit().default)(1);
}
}
const testRunData = yield Promise.all(
contexts.map(
/*#__PURE__*/
(function() {
var _ref3 = _asyncToGenerator(function*(context) {
const matches = yield getTestPaths(
globalConfig,
context,
outputStream,
changedFilesPromise && (yield changedFilesPromise),
jestHooks,
filter
);
allTests = allTests.concat(matches.tests);
return {
context,
matches
};
});
return function(_x8) {
return _ref3.apply(this, arguments);
};
})()
)
);
allTests = yield sequencer.sort(allTests);
if (globalConfig.listTests) {
const testsPaths = Array.from(new Set(allTests.map(test => test.path)));
if (globalConfig.json) {
console.log(JSON.stringify(testsPaths));
} else {
console.log(testsPaths.join('\n'));
}
onComplete &&
onComplete((0, _testResult().makeEmptyAggregatedTestResult)());
return null;
}
if (globalConfig.onlyFailures && failedTestsCache) {
allTests = failedTestsCache.filterTests(allTests);
globalConfig = failedTestsCache.updateConfig(globalConfig);
}
const hasTests = allTests.length > 0;
if (!hasTests) {
const noTestsFoundMessage = (0, _getNoTestsFoundMessage.default)(
testRunData,
globalConfig
);
if (
globalConfig.passWithNoTests ||
globalConfig.findRelatedTests ||
globalConfig.lastCommit ||
globalConfig.onlyChanged
) {
new (_console()).CustomConsole(outputStream, outputStream).log(
noTestsFoundMessage
);
} else {
new (_console()).CustomConsole(outputStream, outputStream).error(
noTestsFoundMessage
);
(0, _exit().default)(1);
}
} else if (
allTests.length === 1 &&
globalConfig.silent !== true &&
globalConfig.verbose !== false
) {
const newConfig = _objectSpread({}, globalConfig, {
verbose: true
});
globalConfig = Object.freeze(newConfig);
}
let collectHandles;
if (globalConfig.detectOpenHandles) {
collectHandles = (0, _collectHandles.default)();
}
if (hasTests) {
yield (0, _runGlobalHook.default)({
allTests,
globalConfig,
moduleName: 'globalSetup'
});
}
if (changedFilesPromise) {
testSchedulerContext.changedFiles = (yield changedFilesPromise).changedFiles;
}
const results = yield new _TestScheduler.default(
globalConfig,
{
startRun
},
testSchedulerContext
).scheduleTests(allTests, testWatcher);
sequencer.cacheResults(allTests, results);
if (hasTests) {
yield (0, _runGlobalHook.default)({
allTests,
globalConfig,
moduleName: 'globalTeardown'
});
}
return processResults(results, {
collectHandles,
json: globalConfig.json,
onComplete,
outputFile: globalConfig.outputFile,
outputStream,
testResultsProcessor: globalConfig.testResultsProcessor
});
});
function runJest(_x7) {
return _runJest.apply(this, arguments);
}
return runJest;
})();
exports.default = _default;