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.
181 lines
3.5 KiB
181 lines
3.5 KiB
'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;
|
|
|