mirror of https://github.com/actions/setup-python
433 lines
11 KiB
JavaScript
433 lines
11 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
var _types = require('./types');
|
||
|
|
||
|
var _state = require('./state');
|
||
|
|
||
|
var _utils = require('./utils');
|
||
|
|
||
|
var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
|
||
|
var Promise = global[Symbol.for('jest-native-promise')] || global.Promise;
|
||
|
var Symbol = global['jest-symbol-do-not-touch'] || global.Symbol;
|
||
|
|
||
|
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 run =
|
||
|
/*#__PURE__*/
|
||
|
(function() {
|
||
|
var _ref = _asyncToGenerator(function*() {
|
||
|
const _getState = (0, _state.getState)(),
|
||
|
rootDescribeBlock = _getState.rootDescribeBlock;
|
||
|
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'run_start'
|
||
|
});
|
||
|
yield _runTestsForDescribeBlock(rootDescribeBlock);
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'run_finish'
|
||
|
});
|
||
|
return (0,
|
||
|
_utils.makeRunResult)((0, _state.getState)().rootDescribeBlock, (0, _state.getState)().unhandledErrors);
|
||
|
});
|
||
|
|
||
|
return function run() {
|
||
|
return _ref.apply(this, arguments);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
const _runTestsForDescribeBlock =
|
||
|
/*#__PURE__*/
|
||
|
(function() {
|
||
|
var _ref2 = _asyncToGenerator(function*(describeBlock) {
|
||
|
(0, _state.dispatch)({
|
||
|
describeBlock,
|
||
|
name: 'run_describe_start'
|
||
|
});
|
||
|
|
||
|
const _getAllHooksForDescri = (0, _utils.getAllHooksForDescribe)(
|
||
|
describeBlock
|
||
|
),
|
||
|
beforeAll = _getAllHooksForDescri.beforeAll,
|
||
|
afterAll = _getAllHooksForDescri.afterAll;
|
||
|
|
||
|
var _iteratorNormalCompletion = true;
|
||
|
var _didIteratorError = false;
|
||
|
var _iteratorError = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator = beforeAll[Symbol.iterator](), _step;
|
||
|
!(_iteratorNormalCompletion = (_step = _iterator.next()).done);
|
||
|
_iteratorNormalCompletion = true
|
||
|
) {
|
||
|
const hook = _step.value;
|
||
|
yield _callCircusHook({
|
||
|
describeBlock,
|
||
|
hook
|
||
|
});
|
||
|
} // Tests that fail and are retried we run after other tests
|
||
|
} catch (err) {
|
||
|
_didIteratorError = true;
|
||
|
_iteratorError = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
||
|
_iterator.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError) {
|
||
|
throw _iteratorError;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const retryTimes = parseInt(global[_types.RETRY_TIMES], 10) || 0;
|
||
|
const deferredRetryTests = [];
|
||
|
var _iteratorNormalCompletion2 = true;
|
||
|
var _didIteratorError2 = false;
|
||
|
var _iteratorError2 = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator2 = describeBlock.tests[Symbol.iterator](), _step2;
|
||
|
!(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
|
||
|
_iteratorNormalCompletion2 = true
|
||
|
) {
|
||
|
const test = _step2.value;
|
||
|
const hasErrorsBeforeTestRun = test.errors.length > 0;
|
||
|
yield _runTest(test);
|
||
|
|
||
|
if (
|
||
|
hasErrorsBeforeTestRun === false &&
|
||
|
retryTimes > 0 &&
|
||
|
test.errors.length > 0
|
||
|
) {
|
||
|
deferredRetryTests.push(test);
|
||
|
}
|
||
|
} // Re-run failed tests n-times if configured
|
||
|
} catch (err) {
|
||
|
_didIteratorError2 = true;
|
||
|
_iteratorError2 = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
||
|
_iterator2.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError2) {
|
||
|
throw _iteratorError2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (var _i = 0; _i < deferredRetryTests.length; _i++) {
|
||
|
const test = deferredRetryTests[_i];
|
||
|
let numRetriesAvailable = retryTimes;
|
||
|
|
||
|
while (numRetriesAvailable > 0 && test.errors.length > 0) {
|
||
|
// Clear errors so retries occur
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_retry',
|
||
|
test
|
||
|
});
|
||
|
yield _runTest(test);
|
||
|
numRetriesAvailable--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var _iteratorNormalCompletion3 = true;
|
||
|
var _didIteratorError3 = false;
|
||
|
var _iteratorError3 = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator3 = describeBlock.children[Symbol.iterator](), _step3;
|
||
|
!(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
|
||
|
_iteratorNormalCompletion3 = true
|
||
|
) {
|
||
|
const child = _step3.value;
|
||
|
yield _runTestsForDescribeBlock(child);
|
||
|
}
|
||
|
} catch (err) {
|
||
|
_didIteratorError3 = true;
|
||
|
_iteratorError3 = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
||
|
_iterator3.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError3) {
|
||
|
throw _iteratorError3;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var _iteratorNormalCompletion4 = true;
|
||
|
var _didIteratorError4 = false;
|
||
|
var _iteratorError4 = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator4 = afterAll[Symbol.iterator](), _step4;
|
||
|
!(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done);
|
||
|
_iteratorNormalCompletion4 = true
|
||
|
) {
|
||
|
const hook = _step4.value;
|
||
|
yield _callCircusHook({
|
||
|
describeBlock,
|
||
|
hook
|
||
|
});
|
||
|
}
|
||
|
} catch (err) {
|
||
|
_didIteratorError4 = true;
|
||
|
_iteratorError4 = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
|
||
|
_iterator4.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError4) {
|
||
|
throw _iteratorError4;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
(0, _state.dispatch)({
|
||
|
describeBlock,
|
||
|
name: 'run_describe_finish'
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return function _runTestsForDescribeBlock(_x) {
|
||
|
return _ref2.apply(this, arguments);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
const _runTest =
|
||
|
/*#__PURE__*/
|
||
|
(function() {
|
||
|
var _ref3 = _asyncToGenerator(function*(test) {
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_start',
|
||
|
test
|
||
|
});
|
||
|
const testContext = Object.create(null);
|
||
|
|
||
|
const _getState2 = (0, _state.getState)(),
|
||
|
hasFocusedTests = _getState2.hasFocusedTests,
|
||
|
testNamePattern = _getState2.testNamePattern;
|
||
|
|
||
|
const isSkipped =
|
||
|
test.mode === 'skip' ||
|
||
|
(hasFocusedTests && test.mode !== 'only') ||
|
||
|
(testNamePattern && !testNamePattern.test((0, _utils.getTestID)(test)));
|
||
|
|
||
|
if (isSkipped) {
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_skip',
|
||
|
test
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (test.mode === 'todo') {
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_todo',
|
||
|
test
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const _getEachHooksForTest = (0, _utils.getEachHooksForTest)(test),
|
||
|
afterEach = _getEachHooksForTest.afterEach,
|
||
|
beforeEach = _getEachHooksForTest.beforeEach;
|
||
|
|
||
|
var _iteratorNormalCompletion5 = true;
|
||
|
var _didIteratorError5 = false;
|
||
|
var _iteratorError5 = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator5 = beforeEach[Symbol.iterator](), _step5;
|
||
|
!(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done);
|
||
|
_iteratorNormalCompletion5 = true
|
||
|
) {
|
||
|
const hook = _step5.value;
|
||
|
|
||
|
if (test.errors.length) {
|
||
|
// If any of the before hooks failed already, we don't run any
|
||
|
// hooks after that.
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
yield _callCircusHook({
|
||
|
hook,
|
||
|
test,
|
||
|
testContext
|
||
|
});
|
||
|
}
|
||
|
} catch (err) {
|
||
|
_didIteratorError5 = true;
|
||
|
_iteratorError5 = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
|
||
|
_iterator5.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError5) {
|
||
|
throw _iteratorError5;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
yield _callCircusTest(test, testContext);
|
||
|
var _iteratorNormalCompletion6 = true;
|
||
|
var _didIteratorError6 = false;
|
||
|
var _iteratorError6 = undefined;
|
||
|
|
||
|
try {
|
||
|
for (
|
||
|
var _iterator6 = afterEach[Symbol.iterator](), _step6;
|
||
|
!(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done);
|
||
|
_iteratorNormalCompletion6 = true
|
||
|
) {
|
||
|
const hook = _step6.value;
|
||
|
yield _callCircusHook({
|
||
|
hook,
|
||
|
test,
|
||
|
testContext
|
||
|
});
|
||
|
} // `afterAll` hooks should not affect test status (pass or fail), because if
|
||
|
// we had a global `afterAll` hook it would block all existing tests until
|
||
|
// this hook is executed. So we dispatch `test_done` right away.
|
||
|
} catch (err) {
|
||
|
_didIteratorError6 = true;
|
||
|
_iteratorError6 = err;
|
||
|
} finally {
|
||
|
try {
|
||
|
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
|
||
|
_iterator6.return();
|
||
|
}
|
||
|
} finally {
|
||
|
if (_didIteratorError6) {
|
||
|
throw _iteratorError6;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_done',
|
||
|
test
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return function _runTest(_x2) {
|
||
|
return _ref3.apply(this, arguments);
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
const _callCircusHook = ({hook, test, describeBlock, testContext}) => {
|
||
|
(0, _state.dispatch)({
|
||
|
hook,
|
||
|
name: 'hook_start'
|
||
|
});
|
||
|
const timeout = hook.timeout || (0, _state.getState)().testTimeout;
|
||
|
return (0, _utils.callAsyncCircusFn)(hook.fn, testContext, {
|
||
|
isHook: true,
|
||
|
timeout
|
||
|
})
|
||
|
.then(() =>
|
||
|
(0, _state.dispatch)({
|
||
|
describeBlock,
|
||
|
hook,
|
||
|
name: 'hook_success',
|
||
|
test
|
||
|
})
|
||
|
)
|
||
|
.catch(error =>
|
||
|
(0, _state.dispatch)({
|
||
|
describeBlock,
|
||
|
error,
|
||
|
hook,
|
||
|
name: 'hook_failure',
|
||
|
test
|
||
|
})
|
||
|
);
|
||
|
};
|
||
|
|
||
|
const _callCircusTest = (test, testContext) => {
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_fn_start',
|
||
|
test
|
||
|
});
|
||
|
const timeout = test.timeout || (0, _state.getState)().testTimeout;
|
||
|
(0, _utils.invariant)(
|
||
|
test.fn,
|
||
|
`Tests with no 'fn' should have 'mode' set to 'skipped'`
|
||
|
);
|
||
|
|
||
|
if (test.errors.length) {
|
||
|
// We don't run the test if there's already an error in before hooks.
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
|
||
|
return (0, _utils.callAsyncCircusFn)(test.fn, testContext, {
|
||
|
isHook: false,
|
||
|
timeout
|
||
|
})
|
||
|
.then(() =>
|
||
|
(0, _state.dispatch)({
|
||
|
name: 'test_fn_success',
|
||
|
test
|
||
|
})
|
||
|
)
|
||
|
.catch(error =>
|
||
|
(0, _state.dispatch)({
|
||
|
error,
|
||
|
name: 'test_fn_failure',
|
||
|
test
|
||
|
})
|
||
|
);
|
||
|
};
|
||
|
|
||
|
var _default = run;
|
||
|
exports.default = _default;
|