dillon1000/react
Commit
Browse files [Scheduler] Test browser implementation details (#16198)
The Scheduler implementation uses browser APIs like `MessageChannel`, `requestAnimationFrame`, and `setTimeout` to schedule work on the main thread. Most of our tests treat these as implementation details; however, the sequence and timing of these APIs are not precisely specified, and can vary wildly across browsers. To prevent regressions, we need the ability to simulate specific edge cases that we may encounter in various browsers. This adds a new test suite that mocks all browser methods used in our implementation. It assumes as little as possible about the order and timing of events. The only thing it assumes is that requestAnimationFrame is passed a frame time that is equal to or less than the time returned by performance.now. Everything else can be controlled at will. It also includes Scheduler-specific invariants, e.g. only one rAF callback can be scheduled at a time. It overlaps slightly with the existing SchedulerDOM-test suite, which also mocks the browser APIs, but exposes a higher-level set of testing primitives. I will consolidate the two suites in a follow-up.
Changed paths2 files
First-parent comparisonpackages/scheduler/src/__tests__/SchedulerBrowser-test.js AddedM packages/scheduler/src/forks/SchedulerHostConfig.default.js ModifiedPatch
Files changed
Rendering syntax-highlighted changes…