123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- '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;
|