- [ ] issue-207.test.ts: update webkit to allow overridenDateNow to be negative. we will have to pick some other value to be none, eg NaN. - [ ] process.hrtime (same as performance.now, resets to [0, 0] when fake timers are enabled) - [ ] decimal ticks should be supported: https://github.com/sinonjs/fake-timers/blob/main/test/issue-207-test.js - [ ] what happens when you add negative time? - [ ] test abortsignal - [ ] test spawnSync - [ ] support performance.now - [ ] support Date.now() - [ ] support useFakeTimers in combination with setSystemTime - [ ] support functions: - [x] advanceTimersByTime - [ ] advanceTimersByTimeAsync\* - [x] advanceTimersToNextTimer - [ ] advanceTimersToNextTimerAsync\* - [ ] advanceTimersToNextFrame - [x] getTimerCount - [x] clearAllTimers - [ ] getMockedSystemTime - [ ] getRealSystemTime - [ ] runAllTicks - [x] runAllTimers - [ ] runAllTimersAsync\* - [x] runOnlyPendingTimers - [x] make sure `[10, [20]], [30, [40]]` runs 10, 20, and 30 - [ ] runOnlyPendingTimersAsync - [ ] setSystemTime - [x] useFakeTimers - [x] isFakeTimers - [x] useRealTimers - [ ] the result of 'arm' ('.disarm'/'.rearm') seems to be ignored? both disarm and rearm? we should change it to return void if it's actually ignored - [ ] we can make this change seperately in main - [ ] see how fake timers works with setSystemTime - [ ] handle the config argument for useFakeTimers - vitest has the toFake parameter for enabling nextTick and queueMicrotask - jets has a timerLimit parameter - [ ] make sure there is no memory leak if you create a setTimeout/setInterval and clear or stop the fake timers before it fires repeatedly. - [ ] audit the allowFakeTimers list (do we want subprocess timeouts to count? and others) - we will also need some timespec.now() calls to exclude mocked time, ie `timespec.nowUnmocked()` - since test timeouts must be unmocked, we need BunTest timeouts to use unmocked time - [ ] audit all timespec.now() calls to replace some with timespec.nowUnmocked() - [ ] add a test that fake timers do not break test duration calculations - [ ] test the order of '0' timeouts, decide if we will match or not - [ ] consider supporting edge-case where `timeout0(A, timeout0(B)), timeout0(C)` prints `A=0, C=0, B=1` (date.now()) - [ ] \* support async functions (maybe defer these for later? the first PR does not need to have everything. we can stub the unimplemented functions.) - [ ] add types for all functions - [ ] add docs for all functions (at minimum: documentatino comments in the types) - [ ] determine which tags should have timer-faking enabled (eg should subprocess timeout? probably not but maybe) - [ ] find real projects using fake timers, see if they work - [ ] make sure we match jest fake timers also