182 lines
3.5 KiB
JavaScript
182 lines
3.5 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
function _fakeTimers() {
|
||
|
const data = require('@sinonjs/fake-timers');
|
||
|
|
||
|
_fakeTimers = function () {
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
function _jestMessageUtil() {
|
||
|
const data = require('jest-message-util');
|
||
|
|
||
|
_jestMessageUtil = 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;
|
||
|
}
|
||
|
|
||
|
class FakeTimers {
|
||
|
constructor({global, config, maxLoops}) {
|
||
|
_defineProperty(this, '_clock', void 0);
|
||
|
|
||
|
_defineProperty(this, '_config', void 0);
|
||
|
|
||
|
_defineProperty(this, '_fakingTime', void 0);
|
||
|
|
||
|
_defineProperty(this, '_global', void 0);
|
||
|
|
||
|
_defineProperty(this, '_fakeTimers', void 0);
|
||
|
|
||
|
_defineProperty(this, '_maxLoops', void 0);
|
||
|
|
||
|
this._global = global;
|
||
|
this._config = config;
|
||
|
this._maxLoops = maxLoops || 100000;
|
||
|
this._fakingTime = false;
|
||
|
this._fakeTimers = (0, _fakeTimers().withGlobal)(global);
|
||
|
}
|
||
|
|
||
|
clearAllTimers() {
|
||
|
if (this._fakingTime) {
|
||
|
this._clock.reset();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dispose() {
|
||
|
this.useRealTimers();
|
||
|
}
|
||
|
|
||
|
runAllTimers() {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
this._clock.runAll();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
runOnlyPendingTimers() {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
this._clock.runToLast();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
advanceTimersToNextTimer(steps = 1) {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
for (let i = steps; i > 0; i--) {
|
||
|
this._clock.next(); // Fire all timers at this point: https://github.com/sinonjs/fake-timers/issues/250
|
||
|
|
||
|
this._clock.tick(0);
|
||
|
|
||
|
if (this._clock.countTimers() === 0) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
advanceTimersByTime(msToRun) {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
this._clock.tick(msToRun);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
runAllTicks() {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
// @ts-expect-error
|
||
|
this._clock.runMicrotasks();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
useRealTimers() {
|
||
|
if (this._fakingTime) {
|
||
|
this._clock.uninstall();
|
||
|
|
||
|
this._fakingTime = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
useFakeTimers() {
|
||
|
if (!this._fakingTime) {
|
||
|
const toFake = Object.keys(this._fakeTimers.timers);
|
||
|
this._clock = this._fakeTimers.install({
|
||
|
loopLimit: this._maxLoops,
|
||
|
now: Date.now(),
|
||
|
toFake
|
||
|
});
|
||
|
this._fakingTime = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
reset() {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
const {now} = this._clock;
|
||
|
|
||
|
this._clock.reset();
|
||
|
|
||
|
this._clock.setSystemTime(now);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
setSystemTime(now) {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
this._clock.setSystemTime(now);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getRealSystemTime() {
|
||
|
return Date.now();
|
||
|
}
|
||
|
|
||
|
getTimerCount() {
|
||
|
if (this._checkFakeTimers()) {
|
||
|
return this._clock.countTimers();
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
_checkFakeTimers() {
|
||
|
if (!this._fakingTime) {
|
||
|
this._global.console.warn(
|
||
|
'A function to advance timers was called but the timers API is not ' +
|
||
|
'mocked with fake timers. Call `jest.useFakeTimers()` in this test or ' +
|
||
|
'enable fake timers globally by setting `"timers": "fake"` in the ' +
|
||
|
'configuration file\nStack Trace:\n' +
|
||
|
(0, _jestMessageUtil().formatStackTrace)(
|
||
|
new Error().stack,
|
||
|
this._config,
|
||
|
{
|
||
|
noStackTrace: false
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return this._fakingTime;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exports.default = FakeTimers;
|