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