Skip to content

Commit

Permalink
Replace test renderer's fake Scheduler implementation with mock build…
Browse files Browse the repository at this point in the history
… (#14970)

* Replace test renderer's fake Scheduler implementation with mock build

The test renderer has its own mock implementation of the Scheduler
interface, with the ability to partially render work in tests. Now that
this functionality has been lifted into a proper mock Scheduler build,
we can use that instead.

* Fix Profiler tests in prod
  • Loading branch information
acdlite authored Feb 28, 2019
1 parent 474ba05 commit fb64460
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 122 deletions.
19 changes: 7 additions & 12 deletions src/ReactTestHostConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,8 @@
* @flow
*/

import * as Scheduler from 'scheduler/unstable_mock';
import warning from 'shared/warning';
import {
nowImplementation as TestRendererSchedulingNowImplementation,
scheduleDeferredCallback as TestRendererSchedulingScheduleDeferredCallback,
cancelDeferredCallback as TestRendererSchedulingCancelDeferredCallback,
shouldYield as TestRendererSchedulingShouldYield,
} from './ReactTestRendererScheduling';

export type Type = string;
export type Props = Object;
Expand Down Expand Up @@ -202,16 +197,16 @@ export function createTextInstance(
export const isPrimaryRenderer = false;
// This approach enables `now` to be mocked by tests,
// Even after the reconciler has initialized and read host config values.
export const now = () => TestRendererSchedulingNowImplementation();
export const scheduleDeferredCallback = TestRendererSchedulingScheduleDeferredCallback;
export const cancelDeferredCallback = TestRendererSchedulingCancelDeferredCallback;
export const shouldYield = TestRendererSchedulingShouldYield;
export const now = Scheduler.unstable_now;
export const scheduleDeferredCallback = Scheduler.unstable_scheduleCallback;
export const cancelDeferredCallback = Scheduler.unstable_cancelCallback;
export const shouldYield = Scheduler.unstable_shouldYield;

export const scheduleTimeout = setTimeout;
export const cancelTimeout = clearTimeout;
export const noTimeout = -1;
export const schedulePassiveEffects = scheduleDeferredCallback;
export const cancelPassiveEffects = cancelDeferredCallback;
export const schedulePassiveEffects = Scheduler.unstable_scheduleCallback;
export const cancelPassiveEffects = Scheduler.unstable_cancelCallback;

// -------------------
// Mutation
Expand Down
21 changes: 5 additions & 16 deletions src/ReactTestRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type {Fiber} from 'react-reconciler/src/ReactFiber';
import type {FiberRoot} from 'react-reconciler/src/ReactFiberRoot';
import type {Instance, TextInstance} from './ReactTestHostConfig';

import * as Scheduler from 'scheduler/unstable_mock';
import {
getPublicRootInstance,
createContainer,
Expand Down Expand Up @@ -42,13 +43,6 @@ import ReactVersion from 'shared/ReactVersion';
import warningWithoutStack from 'shared/warningWithoutStack';

import {getPublicInstance} from './ReactTestHostConfig';
import {
flushAll,
flushNumberOfYields,
clearYields,
setNowImplementation,
yieldValue,
} from './ReactTestRendererScheduling';

type TestRendererOptions = {
createNodeMock: (element: React$Element<any>) => any,
Expand Down Expand Up @@ -430,6 +424,8 @@ function propsMatch(props: Object, filter: Object): boolean {
}

const ReactTestRendererFiber = {
_Scheduler: Scheduler,

create(element: React$Element<any>, options: TestRendererOptions) {
let createNodeMock = defaultTestOptions.createNodeMock;
let isConcurrent = false;
Expand All @@ -455,6 +451,8 @@ const ReactTestRendererFiber = {
updateContainer(element, root, null, null);

const entry = {
_Scheduler: Scheduler,

root: undefined, // makes flow happy
// we define a 'getter' for 'root' below using 'Object.defineProperty'
toJSON(): Array<ReactTestRendererNode> | ReactTestRendererNode | null {
Expand Down Expand Up @@ -518,13 +516,9 @@ const ReactTestRendererFiber = {
return getPublicRootInstance(root);
},

unstable_flushAll: flushAll,
unstable_flushSync<T>(fn: () => T): T {
clearYields();
return flushSync(fn);
},
unstable_flushNumberOfYields: flushNumberOfYields,
unstable_clearYields: clearYields,
};

Object.defineProperty(
Expand Down Expand Up @@ -555,15 +549,10 @@ const ReactTestRendererFiber = {
return entry;
},

unstable_yield: yieldValue,
unstable_clearYields: clearYields,

/* eslint-disable camelcase */
unstable_batchedUpdates: batchedUpdates,
/* eslint-enable camelcase */

unstable_setNowImplementation: setNowImplementation,

act(callback: () => void): Thenable {
// note: keep these warning messages in sync with
// createNoop.js and ReactTestUtils.js
Expand Down
86 changes: 0 additions & 86 deletions src/ReactTestRendererScheduling.js

This file was deleted.

18 changes: 10 additions & 8 deletions src/__tests__/ReactTestRendererAsync-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@

let React;
let ReactTestRenderer;
let Scheduler;

describe('ReactTestRendererAsync', () => {
beforeEach(() => {
jest.resetModules();
React = require('react');
ReactTestRenderer = require('react-test-renderer');
Scheduler = require('scheduler');
});

it('flushAll flushes all work', () => {
Expand Down Expand Up @@ -46,7 +48,7 @@ describe('ReactTestRendererAsync', () => {

it('flushAll returns array of yielded values', () => {
function Child(props) {
ReactTestRenderer.unstable_yield(props.children);
Scheduler.yieldValue(props.children);
return props.children;
}
function Parent(props) {
Expand All @@ -72,7 +74,7 @@ describe('ReactTestRendererAsync', () => {

it('flushThrough flushes until the expected values is yielded', () => {
function Child(props) {
ReactTestRenderer.unstable_yield(props.children);
Scheduler.yieldValue(props.children);
return props.children;
}
function Parent(props) {
Expand Down Expand Up @@ -100,7 +102,7 @@ describe('ReactTestRendererAsync', () => {

it('supports high priority interruptions', () => {
function Child(props) {
ReactTestRenderer.unstable_yield(props.children);
Scheduler.yieldValue(props.children);
return props.children;
}

Expand Down Expand Up @@ -141,7 +143,7 @@ describe('ReactTestRendererAsync', () => {
describe('Jest matchers', () => {
it('toFlushAndYieldThrough', () => {
const Yield = ({id}) => {
ReactTestRenderer.unstable_yield(id);
Scheduler.yieldValue(id);
return id;
};

Expand All @@ -163,7 +165,7 @@ describe('ReactTestRendererAsync', () => {

it('toFlushAndYield', () => {
const Yield = ({id}) => {
ReactTestRenderer.unstable_yield(id);
Scheduler.yieldValue(id);
return id;
};

Expand Down Expand Up @@ -197,7 +199,7 @@ describe('ReactTestRendererAsync', () => {

it('toFlushAndThrow', () => {
const Yield = ({id}) => {
ReactTestRenderer.unstable_yield(id);
Scheduler.yieldValue(id);
return id;
};

Expand Down Expand Up @@ -254,7 +256,7 @@ describe('ReactTestRendererAsync', () => {

it('toHaveYielded', () => {
const Yield = ({id}) => {
ReactTestRenderer.unstable_yield(id);
Scheduler.yieldValue(id);
return id;
};

Expand All @@ -278,7 +280,7 @@ describe('ReactTestRendererAsync', () => {
const renderer = ReactTestRenderer.create(<div />, {
unstable_isConcurrent: true,
});
ReactTestRenderer.unstable_yield('Something');
Scheduler.yieldValue('Something');
expect(() => expect(renderer).toFlushWithoutYielding()).toThrow(
'Log of yielded values is not empty.',
);
Expand Down

0 comments on commit fb64460

Please sign in to comment.