Skip to content

Commit d7dce57

Browse files
authored
Remove internal act builds from public modules (#21721)
* Move internal version of act to shared module No reason to have three different copies of this anymore. I've left the the renderer-specific `act` entry points because legacy mode tests need to also be wrapped in `batchedUpdates`. Next, I'll update the tests to use `batchedUpdates` manually when needed. * Migrates tests to use internal module directly Instead of the `unstable_concurrentAct` exports. Now we can drop those from the public builds. I put it in the jest-react package since that's where we put our other testing utilities (like `toFlushAndYield`). Not so much so it can be consumed publicly (nobody uses that package except us), but so it works with our build tests. * Remove unused internal fields These were used by the old act implementation. No longer needed.
1 parent 06f7b4f commit d7dce57

File tree

81 files changed

+574
-842
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+574
-842
lines changed

packages/jest-react/src/JestReact.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import {REACT_ELEMENT_TYPE, REACT_FRAGMENT_TYPE} from 'shared/ReactSymbols';
1010
import invariant from 'shared/invariant';
1111
import isArray from 'shared/isArray';
1212

13+
export {act} from './internalAct';
14+
1315
function captureAssertion(fn) {
1416
// Trick to use a Jest matcher inside another Jest matcher. `fn` contains an
1517
// assertion; if it throws, we capture the error and return it, so the stack

packages/react-dom/src/test-utils/ReactTestUtilsInternalAct.js renamed to packages/jest-react/src/internalAct.js

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,27 @@
44
* This source code is licensed under the MIT license found in the
55
* LICENSE file in the root directory of this source tree.
66
*
7-
* @flow
7+
* @flow strict
88
*/
99

10-
import type {Thenable} from 'shared/ReactTypes';
11-
12-
import * as ReactDOM from 'react-dom';
13-
import ReactSharedInternals from 'shared/ReactSharedInternals';
14-
import enqueueTask from 'shared/enqueueTask';
15-
import * as Scheduler from 'scheduler';
16-
17-
const SecretInternals =
18-
ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
19-
const IsThisRendererActing = SecretInternals.IsThisRendererActing;
20-
21-
const batchedUpdates = ReactDOM.unstable_batchedUpdates;
22-
23-
const {IsSomeRendererActing, ReactCurrentActQueue} = ReactSharedInternals;
24-
2510
// This version of `act` is only used by our tests. Unlike the public version
2611
// of `act`, it's designed to work identically in both production and
2712
// development. It may have slightly different behavior from the public
2813
// version, too, since our constraints in our test suite are not the same as
2914
// those of developers using React — we're testing React itself, as opposed to
3015
// building an app with React.
31-
// TODO: Replace the internal "concurrent" implementations of `act` with a
32-
// single shared module.
16+
17+
import type {Thenable} from 'shared/ReactTypes';
18+
19+
import * as Scheduler from 'scheduler/unstable_mock';
20+
21+
import ReactSharedInternals from 'shared/ReactSharedInternals';
22+
import enqueueTask from 'shared/enqueueTask';
23+
const {ReactCurrentActQueue} = ReactSharedInternals;
3324

3425
let actingUpdatesScopeDepth = 0;
3526

36-
export function unstable_concurrentAct(scope: () => Thenable<mixed> | void) {
27+
export function act(scope: () => Thenable<mixed> | void) {
3728
if (Scheduler.unstable_flushAllWithoutAsserting === undefined) {
3829
throw Error(
3930
'This version of `act` requires a special mock build of Scheduler.',
@@ -47,10 +38,6 @@ export function unstable_concurrentAct(scope: () => Thenable<mixed> | void) {
4738
}
4839

4940
const previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
50-
const previousIsSomeRendererActing = IsSomeRendererActing.current;
51-
const previousIsThisRendererActing = IsThisRendererActing.current;
52-
IsSomeRendererActing.current = true;
53-
IsThisRendererActing.current = true;
5441
actingUpdatesScopeDepth++;
5542
if (__DEV__ && actingUpdatesScopeDepth === 1) {
5643
ReactCurrentActQueue.disableActWarning = true;
@@ -61,8 +48,6 @@ export function unstable_concurrentAct(scope: () => Thenable<mixed> | void) {
6148
ReactCurrentActQueue.disableActWarning = false;
6249
}
6350
actingUpdatesScopeDepth--;
64-
IsSomeRendererActing.current = previousIsSomeRendererActing;
65-
IsThisRendererActing.current = previousIsThisRendererActing;
6651

6752
if (__DEV__) {
6853
if (actingUpdatesScopeDepth > previousActingUpdatesScopeDepth) {
@@ -80,7 +65,7 @@ export function unstable_concurrentAct(scope: () => Thenable<mixed> | void) {
8065
// returned and 2) we could use async/await. Since it's only our used in
8166
// our test suite, we should be able to.
8267
try {
83-
const thenable = batchedUpdates(scope);
68+
const thenable = scope();
8469
if (
8570
typeof thenable === 'object' &&
8671
thenable !== null &&

packages/react-client/src/__tests__/ReactFlight-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('ReactFlight', () => {
2626
ReactNoop = require('react-noop-renderer');
2727
ReactNoopFlightServer = require('react-noop-renderer/flight-server');
2828
ReactNoopFlightClient = require('react-noop-renderer/flight-client');
29-
act = ReactNoop.act;
29+
act = require('jest-react').act;
3030

3131
ErrorBoundary = class extends React.Component {
3232
state = {hasError: false, error: null};

packages/react-debug-tools/src/__tests__/ReactHooksInspectionIntegration-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('ReactHooksInspectionIntegration', () => {
2222
React = require('react');
2323
ReactTestRenderer = require('react-test-renderer');
2424
Scheduler = require('scheduler');
25-
act = ReactTestRenderer.unstable_concurrentAct;
25+
act = require('jest-react').act;
2626
ReactDebugTools = require('react-debug-tools');
2727
});
2828

packages/react-devtools-shared/src/__tests__/inspectedElement-test.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ describe('InspectedElement', () => {
2626
let InspectedElementContext;
2727
let InspectedElementContextController;
2828
let StoreContext;
29-
let TestUtils;
3029
let TreeContextController;
3130

3231
let TestUtilsAct;
@@ -45,10 +44,9 @@ describe('InspectedElement', () => {
4544
React = require('react');
4645
ReactDOM = require('react-dom');
4746
PropTypes = require('prop-types');
48-
TestUtils = require('react-dom/test-utils');
49-
TestUtilsAct = TestUtils.unstable_concurrentAct;
47+
TestUtilsAct = require('jest-react').act;
5048
TestRenderer = utils.requireTestRenderer();
51-
TestRendererAct = TestUtils.unstable_concurrentAct;
49+
TestRendererAct = require('jest-react').act;
5250

5351
BridgeContext = require('react-devtools-shared/src/devtools/views/context')
5452
.BridgeContext;

packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import type Store from 'react-devtools-shared/src/devtools/store';
1313
describe('Store component filters', () => {
1414
let React;
1515
let ReactDOM;
16-
let TestUtils;
1716
let Types;
1817
let bridge: FrontendBridge;
1918
let store: Store;
2019
let utils;
20+
let internalAct;
2121

2222
const act = (callback: Function) => {
23-
TestUtils.unstable_concurrentAct(() => {
23+
internalAct(() => {
2424
callback();
2525
});
2626
jest.runAllTimers(); // Flush Bridge operations
@@ -35,9 +35,9 @@ describe('Store component filters', () => {
3535

3636
React = require('react');
3737
ReactDOM = require('react-dom');
38-
TestUtils = require('react-dom/test-utils');
3938
Types = require('react-devtools-shared/src/types');
4039
utils = require('./utils');
40+
internalAct = require('jest-react').act;
4141
});
4242

4343
it('should throw if filters are updated while profiling', () => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('ReactDOMFiberAsync', () => {
2828
container = document.createElement('div');
2929
React = require('react');
3030
ReactDOM = require('react-dom');
31-
act = require('react-dom/test-utils').unstable_concurrentAct;
31+
act = require('jest-react').act;
3232
Scheduler = require('scheduler');
3333

3434
document.body.appendChild(container);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ describe('ReactDOMHooks', () => {
2323
React = require('react');
2424
ReactDOM = require('react-dom');
2525
Scheduler = require('scheduler');
26-
act = require('react-dom/test-utils').unstable_concurrentAct;
26+
act = require('jest-react').act;
2727

2828
container = document.createElement('div');
2929
document.body.appendChild(container);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('ReactDOMNativeEventHeuristic-test', () => {
2424
React = require('react');
2525
ReactDOM = require('react-dom');
2626
Scheduler = require('scheduler');
27-
act = require('react-dom/test-utils').unstable_concurrentAct;
27+
act = require('jest-react').act;
2828

2929
document.body.appendChild(container);
3030
});

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ describe('ReactDOMNestedEvents', () => {
1313
let React;
1414
let ReactDOM;
1515
let Scheduler;
16-
let TestUtils;
1716
let act;
1817
let useState;
1918

@@ -22,8 +21,7 @@ describe('ReactDOMNestedEvents', () => {
2221
React = require('react');
2322
ReactDOM = require('react-dom');
2423
Scheduler = require('scheduler');
25-
TestUtils = require('react-dom/test-utils');
26-
act = TestUtils.unstable_concurrentAct;
24+
act = require('jest-react').act;
2725
useState = React.useState;
2826
});
2927

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('ReactDOMRoot', () => {
2525
ReactDOM = require('react-dom');
2626
ReactDOMServer = require('react-dom/server');
2727
Scheduler = require('scheduler');
28-
act = require('react-dom/test-utils').unstable_concurrentAct;
28+
act = require('jest-react').act;
2929
});
3030

3131
it('renders children', () => {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ function initModules() {
4444
ReactDOMServer = require('react-dom/server');
4545
ReactTestUtils = require('react-dom/test-utils');
4646
Scheduler = require('scheduler');
47-
act = ReactTestUtils.unstable_concurrentAct;
47+
act = require('jest-react').act;
4848
useState = React.useState;
4949
useReducer = React.useReducer;
5050
useEffect = React.useEffect;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('ReactDOMServerPartialHydration', () => {
8080

8181
React = require('react');
8282
ReactDOM = require('react-dom');
83-
act = require('react-dom/test-utils').unstable_concurrentAct;
83+
act = require('jest-react').act;
8484
ReactDOMServer = require('react-dom/server');
8585
Scheduler = require('scheduler');
8686
Suspense = React.Suspense;

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {createEventTarget} from 'dom-event-testing-library';
1414
let React;
1515
let ReactDOM;
1616
let ReactDOMServer;
17-
let ReactTestUtils;
1817
let Scheduler;
1918
let Suspense;
2019
let act;
@@ -118,8 +117,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
118117
React = require('react');
119118
ReactDOM = require('react-dom');
120119
ReactDOMServer = require('react-dom/server');
121-
ReactTestUtils = require('react-dom/test-utils');
122-
act = ReactTestUtils.unstable_concurrentAct;
120+
act = require('jest-react').act;
123121
Scheduler = require('scheduler');
124122
Suspense = React.Suspense;
125123

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function initModules() {
2525
ReactDOM = require('react-dom');
2626
ReactDOMServer = require('react-dom/server');
2727
ReactTestUtils = require('react-dom/test-utils');
28-
act = ReactTestUtils.unstable_concurrentAct;
28+
act = require('jest-react').act;
2929

3030
// Make them available to the helpers.
3131
return {

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ let React;
1313
let ReactDOM;
1414
let Suspense;
1515
let ReactCache;
16-
let ReactTestUtils;
1716
let Scheduler;
1817
let TextResource;
1918
let act;
@@ -26,9 +25,8 @@ describe('ReactDOMSuspensePlaceholder', () => {
2625
React = require('react');
2726
ReactDOM = require('react-dom');
2827
ReactCache = require('react-cache');
29-
ReactTestUtils = require('react-dom/test-utils');
3028
Scheduler = require('scheduler');
31-
act = ReactTestUtils.unstable_concurrentAct;
29+
act = require('jest-react').act;
3230
Suspense = React.Suspense;
3331
container = document.createElement('div');
3432
document.body.appendChild(container);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ describe('ReactErrorBoundaries', () => {
4545
ReactFeatureFlags.skipUnmountedBoundaries = true;
4646
ReactDOM = require('react-dom');
4747
React = require('react');
48-
act = require('react-dom/test-utils').unstable_concurrentAct;
48+
act = require('jest-react').act;
4949
Scheduler = require('scheduler');
5050

5151
BrokenConstructor = class extends React.Component {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('ReactUpdates', () => {
2121
React = require('react');
2222
ReactDOM = require('react-dom');
2323
ReactTestUtils = require('react-dom/test-utils');
24-
act = ReactTestUtils.unstable_concurrentAct;
24+
act = require('jest-react').act;
2525
Scheduler = require('scheduler');
2626
});
2727

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
let React;
1111
let ReactNoop;
1212
let Scheduler;
13+
let act;
1314
let Suspense;
1415
let SuspenseList;
1516
let getCacheForType;
@@ -20,6 +21,7 @@ beforeEach(() => {
2021
React = require('react');
2122
ReactNoop = require('react-noop-renderer');
2223
Scheduler = require('scheduler');
24+
act = require('jest-react').act;
2325

2426
Suspense = React.Suspense;
2527
SuspenseList = React.SuspenseList;
@@ -180,12 +182,12 @@ test('warns in DEV if return pointer is inconsistent', async () => {
180182
}
181183

182184
const root = ReactNoop.createRoot();
183-
await ReactNoop.act(async () => {
185+
await act(async () => {
184186
root.render(<App text="A" />);
185187
});
186188

187189
spyOnDev(console, 'error');
188-
await ReactNoop.act(async () => {
190+
await act(async () => {
189191
root.render(<App text="B" />);
190192
});
191193
expect(console.error.calls.count()).toBe(1);
@@ -225,19 +227,19 @@ test('regression (#20932): return pointer is correct before entering deleted tre
225227
}
226228

227229
const root = ReactNoop.createRoot();
228-
await ReactNoop.act(async () => {
230+
await act(async () => {
229231
root.render(<App />);
230232
});
231233
expect(Scheduler).toHaveYielded([
232234
'Suspend! [0]',
233235
'Loading Async...',
234236
'Loading Tail...',
235237
]);
236-
await ReactNoop.act(async () => {
238+
await act(async () => {
237239
resolveText(0);
238240
});
239241
expect(Scheduler).toHaveYielded([0, 'Tail']);
240-
await ReactNoop.act(async () => {
242+
await act(async () => {
241243
setAsyncText(x => x + 1);
242244
});
243245
expect(Scheduler).toHaveYielded([

packages/react-dom/src/__tests__/utils/ReactDOMServerIntegrationTestUtils.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ const shouldIgnoreConsoleError = require('../../../../../scripts/jest/shouldIgno
1515
module.exports = function(initModules) {
1616
let ReactDOM;
1717
let ReactDOMServer;
18-
let ReactTestUtils;
18+
let act;
1919

2020
function resetModules() {
21-
({ReactDOM, ReactDOMServer, ReactTestUtils} = initModules());
21+
({ReactDOM, ReactDOMServer} = initModules());
22+
act = require('jest-react').act;
2223
}
2324

2425
function shouldUseDocument(reactElement) {
@@ -50,11 +51,11 @@ module.exports = function(initModules) {
5051
function asyncReactDOMRender(reactElement, domElement, forceHydrate) {
5152
return new Promise(resolve => {
5253
if (forceHydrate) {
53-
ReactTestUtils.unstable_concurrentAct(() => {
54+
act(() => {
5455
ReactDOM.hydrate(reactElement, domElement);
5556
});
5657
} else {
57-
ReactTestUtils.unstable_concurrentAct(() => {
58+
act(() => {
5859
ReactDOM.render(reactElement, domElement);
5960
});
6061
}

packages/react-dom/src/client/ReactDOM.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import {
2828
flushSync,
2929
flushControlled,
3030
injectIntoDevTools,
31-
IsThisRendererActing,
3231
attemptSynchronousHydration,
3332
attemptDiscreteHydration,
3433
attemptContinuousHydration,
@@ -164,8 +163,6 @@ const Internals = {
164163
restoreStateIfNeeded,
165164
batchedUpdates,
166165
],
167-
// TODO: Temporary. Only used by our internal version of `act. Will remove.
168-
IsThisRendererActing,
169166
};
170167

171168
export {

0 commit comments

Comments
 (0)