diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-08-14 05:01:11 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-08-14 05:02:09 +0200 |
commit | 363723fc84f7b8477592e0105aeb331ec9a017af (patch) | |
tree | 29f92724f34131bac64d6a318dd7e30612e631c7 /node_modules/jest-util/build/FakeTimers.js | |
parent | 5634e77ad96bfe1818f6b6ee70b7379652e5487f (diff) |
node_modules
Diffstat (limited to 'node_modules/jest-util/build/FakeTimers.js')
-rw-r--r-- | node_modules/jest-util/build/FakeTimers.js | 505 |
1 files changed, 0 insertions, 505 deletions
diff --git a/node_modules/jest-util/build/FakeTimers.js b/node_modules/jest-util/build/FakeTimers.js deleted file mode 100644 index 601d320f2..000000000 --- a/node_modules/jest-util/build/FakeTimers.js +++ /dev/null @@ -1,505 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - - -require('jest-message-util');const formatStackTrace = _require.formatStackTrace; -const setGlobal = require('./setGlobal'); - - - - - - - - - - - - - - - - - - - - - - - - - - - -const MS_IN_A_YEAR = 31536000000; - -class FakeTimers { - - - - - - - - - - - - - - - - constructor( - global, - moduleMocker, - config, - maxLoops) - { - - this._global = global; - this._config = config; - this._maxLoops = maxLoops || 100000; - this._uuidCounter = 1; - this._moduleMocker = moduleMocker; - - // Store original timer APIs for future reference - this._timerAPIs = { - clearImmediate: global.clearImmediate, - clearInterval: global.clearInterval, - clearTimeout: global.clearTimeout, - nextTick: global.process && global.process.nextTick, - setImmediate: global.setImmediate, - setInterval: global.setInterval, - setTimeout: global.setTimeout }; - - - this.reset(); - this._createMocks(); - - // These globally-accessible function are now deprecated! - // They will go away very soon, so do not use them! - // Instead, use the versions available on the `jest` object - global.mockRunTicksRepeatedly = this.runAllTicks.bind(this); - global.mockRunTimersOnce = this.runOnlyPendingTimers.bind(this); - global.mockRunTimersToTime = this.runTimersToTime.bind(this); - global.mockRunTimersRepeatedly = this.runAllTimers.bind(this); - global.mockClearTimers = this.clearAllTimers.bind(this); - global.mockGetTimersCount = () => Object.keys(this._timers).length; - } - - clearAllTimers() { - this._immediates.forEach( - immediate => this._fakeClearImmediate(immediate.uuid)); - - for (const uuid in this._timers) { - delete this._timers[uuid]; - } - } - - dispose() { - this._disposed = true; - this.clearAllTimers(); - } - - reset() { - this._cancelledTicks = {}; - this._cancelledImmediates = {}; - this._now = 0; - this._ticks = []; - this._immediates = []; - this._timers = {}; - } - - runAllTicks() { - this._checkFakeTimers(); - // Only run a generous number of ticks and then bail. - // This is just to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const tick = this._ticks.shift(); - - if (tick === undefined) { - break; - } - - if (!this._cancelledTicks.hasOwnProperty(tick.uuid)) { - // Callback may throw, so update the map prior calling. - this._cancelledTicks[tick.uuid] = true; - tick.callback(); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' ticks, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runAllImmediates() { - this._checkFakeTimers(); - // Only run a generous number of immediates and then bail. - let i; - for (i = 0; i < this._maxLoops; i++) { - const immediate = this._immediates.shift(); - if (immediate === undefined) { - break; - } - this._runImmediate(immediate); - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + - ' immediates, and there are still more! Assuming ' + - 'we\'ve hit an infinite recursion and bailing out...'); - - } - } - - _runImmediate(immediate) { - if (!this._cancelledImmediates.hasOwnProperty(immediate.uuid)) { - // Callback may throw, so update the map prior calling. - this._cancelledImmediates[immediate.uuid] = true; - immediate.callback(); - } - } - - runAllTimers() { - this._checkFakeTimers(); - this.runAllTicks(); - this.runAllImmediates(); - - // Only run a generous number of timers and then bail. - // This is just to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const nextTimerHandle = this._getNextTimerHandle(); - - // If there are no more timer handles, stop! - if (nextTimerHandle === null) { - break; - } - - this._runTimerHandle(nextTimerHandle); - - // Some of the immediate calls could be enqueued - // during the previous handling of the timers, we should - // run them as well. - if (this._immediates.length) { - this.runAllImmediates(); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' timers, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runOnlyPendingTimers() { - this._checkFakeTimers(); - this._immediates.forEach(this._runImmediate, this); - const timers = this._timers; - Object.keys(timers). - sort((left, right) => timers[left].expiry - timers[right].expiry). - forEach(this._runTimerHandle, this); - } - - runTimersToTime(msToRun) { - this._checkFakeTimers(); - // Only run a generous number of timers and then bail. - // This is jsut to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const timerHandle = this._getNextTimerHandle(); - - // If there are no more timer handles, stop! - if (timerHandle === null) { - break; - } - - const nextTimerExpiry = this._timers[timerHandle].expiry; - if (this._now + msToRun < nextTimerExpiry) { - // There are no timers between now and the target we're running to, so - // adjust our time cursor and quit - this._now += msToRun; - break; - } else { - msToRun -= nextTimerExpiry - this._now; - this._now = nextTimerExpiry; - this._runTimerHandle(timerHandle); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' timers, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runWithRealTimers(cb) { - const prevClearImmediate = this._global.clearImmediate; - const prevClearInterval = this._global.clearInterval; - const prevClearTimeout = this._global.clearTimeout; - const prevNextTick = this._global.process.nextTick; - const prevSetImmediate = this._global.setImmediate; - const prevSetInterval = this._global.setInterval; - const prevSetTimeout = this._global.setTimeout; - - this.useRealTimers(); - - let cbErr = null; - let errThrown = false; - try { - cb(); - } catch (e) { - errThrown = true; - cbErr = e; - } - - this._global.clearImmediate = prevClearImmediate; - this._global.clearInterval = prevClearInterval; - this._global.clearTimeout = prevClearTimeout; - this._global.process.nextTick = prevNextTick; - this._global.setImmediate = prevSetImmediate; - this._global.setInterval = prevSetInterval; - this._global.setTimeout = prevSetTimeout; - - if (errThrown) { - throw cbErr; - } - } - - useRealTimers() { - const global = this._global; - setGlobal(global, 'clearImmediate', this._timerAPIs.clearImmediate); - setGlobal(global, 'clearInterval', this._timerAPIs.clearInterval); - setGlobal(global, 'clearTimeout', this._timerAPIs.clearTimeout); - setGlobal(global, 'setImmediate', this._timerAPIs.setImmediate); - setGlobal(global, 'setInterval', this._timerAPIs.setInterval); - setGlobal(global, 'setTimeout', this._timerAPIs.setTimeout); - - global.process.nextTick = this._timerAPIs.nextTick; - } - - useFakeTimers() { - this._createMocks(); - - const global = this._global; - setGlobal(global, 'clearImmediate', this._fakeTimerAPIs.clearImmediate); - setGlobal(global, 'clearInterval', this._fakeTimerAPIs.clearInterval); - setGlobal(global, 'clearTimeout', this._fakeTimerAPIs.clearTimeout); - setGlobal(global, 'setImmediate', this._fakeTimerAPIs.setImmediate); - setGlobal(global, 'setInterval', this._fakeTimerAPIs.setInterval); - setGlobal(global, 'setTimeout', this._fakeTimerAPIs.setTimeout); - - global.process.nextTick = this._fakeTimerAPIs.nextTick; - } - - _checkFakeTimers() { - if (this._global.setTimeout !== this._fakeTimerAPIs.setTimeout) { - 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. This warning is likely a result of a ` + - `default configuration change in Jest 15.\n\n` + - `Release Blog Post: https://facebook.github.io/jest/blog/2016/09/01/jest-15.html\n` + - `Stack Trace:\n` + formatStackTrace(new Error().stack, this._config)); - - } - } - - _createMocks() { - const fn = impl => this._moduleMocker.fn().mockImplementation(impl); - - this._fakeTimerAPIs = { - clearImmediate: fn(this._fakeClearImmediate.bind(this)), - clearInterval: fn(this._fakeClearTimer.bind(this)), - clearTimeout: fn(this._fakeClearTimer.bind(this)), - nextTick: fn(this._fakeNextTick.bind(this)), - setImmediate: fn(this._fakeSetImmediate.bind(this)), - setInterval: fn(this._fakeSetInterval.bind(this)), - setTimeout: fn(this._fakeSetTimeout.bind(this)) }; - - } - - _fakeClearTimer(uuid) { - if (this._timers.hasOwnProperty(uuid)) { - delete this._timers[uuid]; - } - } - - _fakeClearImmediate(uuid) { - this._cancelledImmediates[uuid] = true; - } - - _fakeNextTick(callback) { - if (this._disposed) { - return; - } - - const args = []; - for (let ii = 1, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = String(this._uuidCounter++); - - this._ticks.push({ - callback: () => callback.apply(null, args), - uuid }); - - - const cancelledTicks = this._cancelledTicks; - this._timerAPIs.nextTick(() => { - if (this._blocked) {return;} - if (!cancelledTicks.hasOwnProperty(uuid)) { - // Callback may throw, so update the map prior calling. - cancelledTicks[uuid] = true; - callback.apply(null, args); - } - }); - } - - _fakeSetImmediate(callback) { - if (this._disposed) { - return null; - } - - const args = []; - for (let ii = 1, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._immediates.push({ - callback: () => callback.apply(null, args), - uuid: String(uuid) }); - - - const cancelledImmediates = this._cancelledImmediates; - this._timerAPIs.setImmediate(() => { - if (!cancelledImmediates.hasOwnProperty(uuid)) { - // Callback may throw, so update the map prior calling. - cancelledImmediates[String(uuid)] = true; - callback.apply(null, args); - } - }); - - return uuid; - } - - _fakeSetInterval(callback, intervalDelay) { - if (this._disposed) { - return null; - } - - if (intervalDelay == null) { - intervalDelay = 0; - } - - const args = []; - for (let ii = 2, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._timers[String(uuid)] = { - callback: () => callback.apply(null, args), - expiry: this._now + intervalDelay, - interval: intervalDelay, - type: 'interval' }; - - - return uuid; - } - - _fakeSetTimeout(callback, delay) { - if (this._disposed) { - return null; - } - - if (delay == null) { - delay = 0; - } - - const args = []; - for (let ii = 2, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._timers[String(uuid)] = { - callback: () => callback.apply(null, args), - expiry: this._now + delay, - interval: null, - type: 'timeout' }; - - - return uuid; - } - - _getNextTimerHandle() { - let nextTimerHandle = null; - let uuid; - let soonestTime = MS_IN_A_YEAR; - let timer; - for (uuid in this._timers) { - timer = this._timers[uuid]; - if (timer.expiry < soonestTime) { - soonestTime = timer.expiry; - nextTimerHandle = uuid; - } - } - - return nextTimerHandle; - } - - _runTimerHandle(timerHandle) { - const timer = this._timers[timerHandle]; - - if (!timer) { - return; - } - - switch (timer.type) { - case 'timeout': - const callback = timer.callback; - delete this._timers[timerHandle]; - callback(); - break; - - case 'interval': - timer.expiry = this._now + timer.interval; - timer.callback(); - break; - - default: - throw new Error('Unexpected timer type: ' + timer.type);} - - }} - - - -module.exports = FakeTimers;
\ No newline at end of file |