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.
263 lines
5.5 KiB
263 lines
5.5 KiB
2 years ago
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
function _ansiEscapes() {
|
||
|
const data = _interopRequireDefault(require('ansi-escapes'));
|
||
|
|
||
|
_ansiEscapes = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
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 _jestWatcher() {
|
||
|
const data = require('jest-watcher');
|
||
|
|
||
|
_jestWatcher = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
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 {ARROW, CLEAR} = _jestUtil().specialChars;
|
||
|
|
||
|
function describeKey(key, description) {
|
||
|
return `${_chalk().default.dim(
|
||
|
ARROW + 'Press'
|
||
|
)} ${key} ${_chalk().default.dim(description)}`;
|
||
|
}
|
||
|
|
||
|
const TestProgressLabel = _chalk().default.bold('Interactive Test Progress');
|
||
|
|
||
|
class FailedTestsInteractiveMode {
|
||
|
constructor(_pipe) {
|
||
|
_defineProperty(this, '_isActive', false);
|
||
|
|
||
|
_defineProperty(this, '_countPaths', 0);
|
||
|
|
||
|
_defineProperty(this, '_skippedNum', 0);
|
||
|
|
||
|
_defineProperty(this, '_testAssertions', []);
|
||
|
|
||
|
_defineProperty(this, '_updateTestRunnerConfig', void 0);
|
||
|
|
||
|
this._pipe = _pipe;
|
||
|
}
|
||
|
|
||
|
isActive() {
|
||
|
return this._isActive;
|
||
|
}
|
||
|
|
||
|
put(key) {
|
||
|
switch (key) {
|
||
|
case 's':
|
||
|
if (this._skippedNum === this._testAssertions.length) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
this._skippedNum += 1; // move skipped test to the end
|
||
|
|
||
|
this._testAssertions.push(this._testAssertions.shift());
|
||
|
|
||
|
if (this._testAssertions.length - this._skippedNum > 0) {
|
||
|
this._run();
|
||
|
} else {
|
||
|
this._drawUIDoneWithSkipped();
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
case 'q':
|
||
|
case _jestWatcher().KEYS.ESCAPE:
|
||
|
this.abort();
|
||
|
break;
|
||
|
|
||
|
case 'r':
|
||
|
this.restart();
|
||
|
break;
|
||
|
|
||
|
case _jestWatcher().KEYS.ENTER:
|
||
|
if (this._testAssertions.length === 0) {
|
||
|
this.abort();
|
||
|
} else {
|
||
|
this._run();
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
|
||
|
run(failedTestAssertions, updateConfig) {
|
||
|
if (failedTestAssertions.length === 0) return;
|
||
|
this._testAssertions = [...failedTestAssertions];
|
||
|
this._countPaths = this._testAssertions.length;
|
||
|
this._updateTestRunnerConfig = updateConfig;
|
||
|
this._isActive = true;
|
||
|
|
||
|
this._run();
|
||
|
}
|
||
|
|
||
|
updateWithResults(results) {
|
||
|
if (!results.snapshot.failure && results.numFailedTests > 0) {
|
||
|
return this._drawUIOverlay();
|
||
|
}
|
||
|
|
||
|
this._testAssertions.shift();
|
||
|
|
||
|
if (this._testAssertions.length === 0) {
|
||
|
return this._drawUIOverlay();
|
||
|
} // Go to the next test
|
||
|
|
||
|
return this._run();
|
||
|
}
|
||
|
|
||
|
_clearTestSummary() {
|
||
|
this._pipe.write(_ansiEscapes().default.cursorUp(6));
|
||
|
|
||
|
this._pipe.write(_ansiEscapes().default.eraseDown);
|
||
|
}
|
||
|
|
||
|
_drawUIDone() {
|
||
|
this._pipe.write(CLEAR);
|
||
|
|
||
|
const messages = [
|
||
|
_chalk().default.bold('Watch Usage'),
|
||
|
describeKey('Enter', 'to return to watch mode.')
|
||
|
];
|
||
|
|
||
|
this._pipe.write(messages.join('\n') + '\n');
|
||
|
}
|
||
|
|
||
|
_drawUIDoneWithSkipped() {
|
||
|
this._pipe.write(CLEAR);
|
||
|
|
||
|
let stats = `${(0, _jestUtil().pluralize)(
|
||
|
'test',
|
||
|
this._countPaths
|
||
|
)} reviewed`;
|
||
|
|
||
|
if (this._skippedNum > 0) {
|
||
|
const skippedText = _chalk().default.bold.yellow(
|
||
|
(0, _jestUtil().pluralize)('test', this._skippedNum) + ' skipped'
|
||
|
);
|
||
|
|
||
|
stats = `${stats}, ${skippedText}`;
|
||
|
}
|
||
|
|
||
|
const message = [
|
||
|
TestProgressLabel,
|
||
|
`${ARROW}${stats}`,
|
||
|
'\n',
|
||
|
_chalk().default.bold('Watch Usage'),
|
||
|
describeKey('r', 'to restart Interactive Mode.'),
|
||
|
describeKey('q', 'to quit Interactive Mode.'),
|
||
|
describeKey('Enter', 'to return to watch mode.')
|
||
|
];
|
||
|
|
||
|
this._pipe.write(`\n${message.join('\n')}`);
|
||
|
}
|
||
|
|
||
|
_drawUIProgress() {
|
||
|
this._clearTestSummary();
|
||
|
|
||
|
const numPass = this._countPaths - this._testAssertions.length;
|
||
|
const numRemaining = this._countPaths - numPass - this._skippedNum;
|
||
|
let stats = `${(0, _jestUtil().pluralize)('test', numRemaining)} remaining`;
|
||
|
|
||
|
if (this._skippedNum > 0) {
|
||
|
const skippedText = _chalk().default.bold.yellow(
|
||
|
(0, _jestUtil().pluralize)('test', this._skippedNum) + ' skipped'
|
||
|
);
|
||
|
|
||
|
stats = `${stats}, ${skippedText}`;
|
||
|
}
|
||
|
|
||
|
const message = [
|
||
|
TestProgressLabel,
|
||
|
`${ARROW}${stats}`,
|
||
|
'\n',
|
||
|
_chalk().default.bold('Watch Usage'),
|
||
|
describeKey('s', 'to skip the current test.'),
|
||
|
describeKey('q', 'to quit Interactive Mode.'),
|
||
|
describeKey('Enter', 'to return to watch mode.')
|
||
|
];
|
||
|
|
||
|
this._pipe.write(`\n${message.join('\n')}`);
|
||
|
}
|
||
|
|
||
|
_drawUIOverlay() {
|
||
|
if (this._testAssertions.length === 0) return this._drawUIDone();
|
||
|
return this._drawUIProgress();
|
||
|
}
|
||
|
|
||
|
_run() {
|
||
|
if (this._updateTestRunnerConfig) {
|
||
|
this._updateTestRunnerConfig(this._testAssertions[0]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
abort() {
|
||
|
this._isActive = false;
|
||
|
this._skippedNum = 0;
|
||
|
|
||
|
if (this._updateTestRunnerConfig) {
|
||
|
this._updateTestRunnerConfig();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
restart() {
|
||
|
this._skippedNum = 0;
|
||
|
this._countPaths = this._testAssertions.length;
|
||
|
|
||
|
this._run();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exports.default = FailedTestsInteractiveMode;
|