Skip to content

Commit da94e8b

Browse files
authored
Revert "Cleanup enableSyncDefaultUpdate flag (facebook#26236)" (facebook#26528)
This reverts commit b2ae9dd. While the feature flag is fully rolled out, these tests are also testing behavior set with an unstable flag on root, which for now we want to preserve. Not sure if there's a better way then adding a dynamic feature flag to the www build?
1 parent 0700dd5 commit da94e8b

36 files changed

+1477
-314
lines changed

packages/react-art/src/__tests__/ReactART-test.js

+58
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ const ReactTestRenderer = require('react-test-renderer');
3333

3434
// Isolate the noop renderer
3535
jest.resetModules();
36+
const ReactNoop = require('react-noop-renderer');
37+
const Scheduler = require('scheduler');
3638

3739
let Group;
3840
let Shape;
3941
let Surface;
4042
let TestComponent;
4143

44+
let waitFor;
45+
4246
const Missing = {};
4347

4448
function testDOMNodeStructure(domNode, expectedStructure) {
@@ -76,6 +80,8 @@ describe('ReactART', () => {
7680
Shape = ReactART.Shape;
7781
Surface = ReactART.Surface;
7882

83+
({waitFor} = require('internal-test-utils'));
84+
7985
TestComponent = class extends React.Component {
8086
group = React.createRef();
8187

@@ -357,6 +363,58 @@ describe('ReactART', () => {
357363
doClick(instance);
358364
expect(onClick2).toBeCalled();
359365
});
366+
367+
// @gate !enableSyncDefaultUpdates
368+
it('can concurrently render with a "primary" renderer while sharing context', async () => {
369+
const CurrentRendererContext = React.createContext(null);
370+
371+
function Yield(props) {
372+
Scheduler.log(props.value);
373+
return null;
374+
}
375+
376+
let ops = [];
377+
function LogCurrentRenderer() {
378+
return (
379+
<CurrentRendererContext.Consumer>
380+
{currentRenderer => {
381+
ops.push(currentRenderer);
382+
return null;
383+
}}
384+
</CurrentRendererContext.Consumer>
385+
);
386+
}
387+
388+
// Using test renderer instead of the DOM renderer here because async
389+
// testing APIs for the DOM renderer don't exist.
390+
ReactNoop.render(
391+
<CurrentRendererContext.Provider value="Test">
392+
<Yield value="A" />
393+
<Yield value="B" />
394+
<LogCurrentRenderer />
395+
<Yield value="C" />
396+
</CurrentRendererContext.Provider>,
397+
);
398+
399+
await waitFor(['A']);
400+
401+
ReactDOM.render(
402+
<Surface>
403+
<LogCurrentRenderer />
404+
<CurrentRendererContext.Provider value="ART">
405+
<LogCurrentRenderer />
406+
</CurrentRendererContext.Provider>
407+
</Surface>,
408+
container,
409+
);
410+
411+
expect(ops).toEqual([null, 'ART']);
412+
413+
ops = [];
414+
await waitFor(['B', 'C']);
415+
416+
expect(ops).toEqual(['Test']);
417+
});
360418
});
361419

362420
describe('ReactARTComponents', () => {

packages/react-dom/src/__tests__/ReactDOMNativeEventHeuristic-test.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,11 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
312312
expect(container.textContent).toEqual('not hovered');
313313

314314
await waitFor(['hovered']);
315-
expect(container.textContent).toEqual('hovered');
315+
if (gate(flags => flags.enableSyncDefaultUpdates)) {
316+
expect(container.textContent).toEqual('hovered');
317+
} else {
318+
expect(container.textContent).toEqual('not hovered');
319+
}
316320
});
317321
expect(container.textContent).toEqual('hovered');
318322
});

packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -2036,7 +2036,14 @@ describe('ReactDOMServerPartialHydration', () => {
20362036
suspend = true;
20372037

20382038
await act(async () => {
2039-
await waitFor(['Before', 'After']);
2039+
if (gate(flags => flags.enableSyncDefaultUpdates)) {
2040+
await waitFor(['Before', 'After']);
2041+
} else {
2042+
await waitFor(['Before']);
2043+
// This took a long time to render.
2044+
Scheduler.unstable_advanceTime(1000);
2045+
await waitFor(['After']);
2046+
}
20402047

20412048
// This will cause us to skip the second row completely.
20422049
});

packages/react-dom/src/events/__tests__/DOMPluginEventSystem-test.internal.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -1984,9 +1984,13 @@ describe('DOMPluginEventSystem', () => {
19841984
log.length = 0;
19851985

19861986
// Increase counter
1987-
React.startTransition(() => {
1987+
if (gate(flags => flags.enableSyncDefaultUpdates)) {
1988+
React.startTransition(() => {
1989+
root.render(<Test counter={1} />);
1990+
});
1991+
} else {
19881992
root.render(<Test counter={1} />);
1989-
});
1993+
}
19901994
// Yield before committing
19911995
await waitFor(['Test']);
19921996

packages/react-reconciler/src/ReactFiber.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
enableProfilerTimer,
3434
enableScopeAPI,
3535
enableLegacyHidden,
36+
enableSyncDefaultUpdates,
3637
allowConcurrentByDefault,
3738
enableTransitionTracing,
3839
enableDebugTracing,
@@ -458,9 +459,11 @@ export function createHostRootFiber(
458459
mode |= StrictLegacyMode | StrictEffectsMode;
459460
}
460461
if (
462+
// We only use this flag for our repo tests to check both behaviors.
463+
// TODO: Flip this flag and rename it something like "forceConcurrentByDefaultForTesting"
464+
!enableSyncDefaultUpdates ||
461465
// Only for internal experiments.
462-
allowConcurrentByDefault &&
463-
concurrentUpdatesByDefaultOverride
466+
(allowConcurrentByDefault && concurrentUpdatesByDefaultOverride)
464467
) {
465468
mode |= ConcurrentUpdatesByDefaultMode;
466469
}

0 commit comments

Comments
 (0)