@samitouri / QOS-React / commits / 73ffce1b6f

DevTools: Update tests to fix warnings/errors (#21748)

Some new ones had slipped in (e.g. deprecated ReactDOM.render message from 18)

Brian Vaughn committed Jun 24, 2021 at 22:42 UTC 73ffce1b6fb7eff13414e35e40efe4269664e5ea
19 files changed +391 -363
packages/react-devtools-shared/src/__tests__/FastRefreshDevToolsIntegration-test.js
+4 -5
@@ -9,13 +9,13 @@
9
10 describe('Fast Refresh', () => {
11 let React;
12 - let ReactDOM;
12 let ReactFreshRuntime;
13 let act;
14 let babel;
15 let container;
16 let exportsObj;
17 let freshPlugin;
18 + let legacyRender;
19 let store;
20 let withErrorsOrWarningsIgnored;
21
@@ -37,10 +37,9 @@ describe('Fast Refresh', () => {
37 ReactFreshRuntime = require('react-refresh/runtime');
38 ReactFreshRuntime.injectIntoGlobalHook(global);
39
40 - ReactDOM = require('react-dom');
41 -
40 const utils = require('./utils');
41 act = utils.act;
42 + legacyRender = utils.legacyRender;
43 withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored;
44 });
45
@@ -74,7 +73,7 @@ describe('Fast Refresh', () => {
73 function render(source) {
74 const Component = execute(source);
75 act(() => {
77 - ReactDOM.render(<Component />, container);
76 + legacyRender(<Component />, container);
77 });
78 // Module initialization shouldn't be counted as a hot update.
79 expect(ReactFreshRuntime.performReactRefresh()).toBe(null);
@@ -99,7 +98,7 @@ describe('Fast Refresh', () => {
98 // Here, we'll just force a re-render using the newer type to emulate this.
99 const NextComponent = nextExports.default;
100 act(() => {
102 - ReactDOM.render(<NextComponent />, container);
101 + legacyRender(<NextComponent />, container);
102 });
103 }
104 act(() => {
packages/react-devtools-shared/src/__tests__/componentStacks-test.js
+4 -4
@@ -25,8 +25,8 @@ function normalizeCodeLocInfo(str) {
25
26 describe('component stack', () => {
27 let React;
28 - let ReactDOM;
28 let act;
29 + let legacyRender;
30 let mockError;
31 let mockWarn;
32
@@ -44,9 +44,9 @@ describe('component stack', () => {
44
45 const utils = require('./utils');
46 act = utils.act;
47 + legacyRender = utils.legacyRender;
48
49 React = require('react');
49 - ReactDOM = require('react-dom');
50 });
51
52 it('should log the current component stack along with an error or warning', () => {
@@ -60,7 +60,7 @@ describe('component stack', () => {
60
61 const container = document.createElement('div');
62
63 - act(() => ReactDOM.render(<Grandparent />, container));
63 + act(() => legacyRender(<Grandparent />, container));
64
65 expect(mockError).toHaveBeenCalledWith(
66 'Test error.',
@@ -93,7 +93,7 @@ describe('component stack', () => {
93 };
94
95 const container = document.createElement('div');
96 - act(() => ReactDOM.render(<Example test="abc" />, container));
96 + act(() => legacyRender(<Example test="abc" />, container));
97
98 expect(useEffectCount).toBe(1);
99
packages/react-devtools-shared/src/__tests__/console-test.js
+12 -12
@@ -9,9 +9,9 @@
9
10 describe('console', () => {
11 let React;
12 - let ReactDOM;
12 let act;
13 let fakeConsole;
14 + let legacyRender;
15 let mockError;
16 let mockInfo;
17 let mockLog;
@@ -58,10 +58,10 @@ describe('console', () => {
58 };
59
60 React = require('react');
61 - ReactDOM = require('react-dom');
61
62 const utils = require('./utils');
63 act = utils.act;
64 + legacyRender = utils.legacyRender;
65 });
66
67 function normalizeCodeLocInfo(str) {
@@ -176,7 +176,7 @@ describe('console', () => {
176 return null;
177 };
178
179 - act(() => ReactDOM.render(<Child />, document.createElement('div')));
179 + act(() => legacyRender(<Child />, document.createElement('div')));
180
181 expect(mockWarn).toHaveBeenCalledTimes(1);
182 expect(mockWarn.mock.calls[0]).toHaveLength(1);
@@ -203,7 +203,7 @@ describe('console', () => {
203 return null;
204 };
205
206 - act(() => ReactDOM.render(<Parent />, document.createElement('div')));
206 + act(() => legacyRender(<Parent />, document.createElement('div')));
207
208 expect(mockLog).toHaveBeenCalledTimes(1);
209 expect(mockLog.mock.calls[0]).toHaveLength(1);
@@ -243,7 +243,7 @@ describe('console', () => {
243 return null;
244 };
245
246 - act(() => ReactDOM.render(<Parent />, document.createElement('div')));
246 + act(() => legacyRender(<Parent />, document.createElement('div')));
247
248 expect(mockLog).toHaveBeenCalledTimes(2);
249 expect(mockLog.mock.calls[0]).toHaveLength(1);
@@ -298,8 +298,8 @@ describe('console', () => {
298 }
299
300 const container = document.createElement('div');
301 - act(() => ReactDOM.render(<Parent />, container));
302 - act(() => ReactDOM.render(<Parent />, container));
301 + act(() => legacyRender(<Parent />, container));
302 + act(() => legacyRender(<Parent />, container));
303
304 expect(mockLog).toHaveBeenCalledTimes(2);
305 expect(mockLog.mock.calls[0]).toHaveLength(1);
@@ -350,7 +350,7 @@ describe('console', () => {
350 }
351 }
352
353 - act(() => ReactDOM.render(<Parent />, document.createElement('div')));
353 + act(() => legacyRender(<Parent />, document.createElement('div')));
354
355 expect(mockLog).toHaveBeenCalledTimes(1);
356 expect(mockLog.mock.calls[0]).toHaveLength(1);
@@ -377,7 +377,7 @@ describe('console', () => {
377 };
378
379 unpatchConsole();
380 - act(() => ReactDOM.render(<Child />, document.createElement('div')));
380 + act(() => legacyRender(<Child />, document.createElement('div')));
381
382 expect(mockWarn).toHaveBeenCalledTimes(1);
383 expect(mockWarn.mock.calls[0]).toHaveLength(1);
@@ -391,7 +391,7 @@ describe('console', () => {
391 breakOnWarn: false,
392 showInlineWarningsAndErrors: false,
393 });
394 - act(() => ReactDOM.render(<Child />, document.createElement('div')));
394 + act(() => legacyRender(<Child />, document.createElement('div')));
395
396 expect(mockWarn).toHaveBeenCalledTimes(2);
397 expect(mockWarn.mock.calls[1]).toHaveLength(2);
@@ -435,7 +435,7 @@ describe('console', () => {
435 return null;
436 };
437
438 - act(() => ReactDOM.render(<Parent />, document.createElement('div')));
438 + act(() => legacyRender(<Parent />, document.createElement('div')));
439
440 expect(mockLog).toHaveBeenCalledTimes(1);
441 expect(mockLog.mock.calls[0]).toHaveLength(1);
@@ -460,7 +460,7 @@ describe('console', () => {
460 return null;
461 };
462
463 - act(() => ReactDOM.render(<Component />, document.createElement('div')));
463 + act(() => legacyRender(<Component />, document.createElement('div')));
464
465 expect(mockWarn).toHaveBeenCalledTimes(1);
466 expect(mockWarn.mock.calls[0][0]).toBe('Symbol:');
packages/react-devtools-shared/src/__tests__/editing-test.js
+7 -6
@@ -13,8 +13,8 @@ import type Store from 'react-devtools-shared/src/devtools/store';
13 describe('editing interface', () => {
14 let PropTypes;
15 let React;
16 - let ReactDOM;
16 let bridge: FrontendBridge;
17 + let legacyRender;
18 let store: Store;
19 let utils;
20
@@ -25,6 +25,8 @@ describe('editing interface', () => {
25 beforeEach(() => {
26 utils = require('./utils');
27
28 + legacyRender = utils.legacyRender;
29 +
30 bridge = global.bridge;
31 store = global.store;
32 store.collapseNodesByDefault = false;
@@ -32,7 +34,6 @@ describe('editing interface', () => {
34
35 PropTypes = require('prop-types');
36 React = require('react');
35 - ReactDOM = require('react-dom');
37 });
38
39 describe('props', () => {
@@ -67,7 +68,7 @@ describe('editing interface', () => {
68
69 const container = document.createElement('div');
70 await utils.actAsync(() =>
70 - ReactDOM.render(
71 + legacyRender(
72 <>
73 <ClassComponent
74 array={[1, 2, 3]}
@@ -435,7 +436,7 @@ describe('editing interface', () => {
436
437 const container = document.createElement('div');
438 await utils.actAsync(() =>
438 - ReactDOM.render(
439 + legacyRender(
440 <ClassComponent object={{nested: 'initial'}} shallow="initial" />,
441 container,
442 ),
@@ -652,7 +653,7 @@ describe('editing interface', () => {
653
654 const container = document.createElement('div');
655 await utils.actAsync(() =>
655 - ReactDOM.render(<FunctionComponent />, container),
656 + legacyRender(<FunctionComponent />, container),
657 );
658
659 hookID = 0; // index
@@ -902,7 +903,7 @@ describe('editing interface', () => {
903
904 const container = document.createElement('div');
905 await utils.actAsync(() =>
905 - ReactDOM.render(
906 + legacyRender(
907 <LegacyContextProvider>
908 <ClassComponent />
909 </LegacyContextProvider>,
packages/react-devtools-shared/src/__tests__/inspectedElement-test.js
+47 -42
@@ -31,12 +31,15 @@ describe('InspectedElement', () => {
31 let TestUtilsAct;
32 let TestRendererAct;
33
34 + let legacyRender;
35 let testRendererInstance;
36
37 beforeEach(() => {
38 utils = require('./utils');
39 utils.beforeEachProfiling();
40
41 + legacyRender = utils.legacyRender;
42 +
43 bridge = global.bridge;
44 store = global.store;
45 store.collapseNodesByDefault = false;
@@ -139,7 +142,7 @@ describe('InspectedElement', () => {
142
143 const container = document.createElement('div');
144 await utils.actAsync(() =>
142 - ReactDOM.render(<Example a={1} b="abc" />, container),
145 + legacyRender(<Example a={1} b="abc" />, container),
146 );
147
148 const inspectedElement = await inspectElementAtIndex(0);
@@ -209,7 +212,7 @@ describe('InspectedElement', () => {
212
213 const container = document.createElement('div');
214 await utils.actAsync(() =>
212 - ReactDOM.render(
215 + legacyRender(
216 <React.Fragment>
217 <LegacyContextProvider>
218 <LegacyContextConsumer />
@@ -270,7 +273,7 @@ describe('InspectedElement', () => {
273
274 const container = document.createElement('div');
275 await utils.actAsync(
273 - () => ReactDOM.render(<Example a={1} b="abc" />, container),
276 + () => legacyRender(<Example a={1} b="abc" />, container),
277 false,
278 );
279
@@ -283,7 +286,7 @@ describe('InspectedElement', () => {
286 `);
287
288 await utils.actAsync(
286 - () => ReactDOM.render(<Example a={2} b="def" />, container),
289 + () => legacyRender(<Example a={2} b="def" />, container),
290 false,
291 );
292
@@ -319,7 +322,7 @@ describe('InspectedElement', () => {
322
323 const container = document.createElement('div');
324 await utils.actAsync(() =>
322 - ReactDOM.render(
325 + legacyRender(
326 <Wrapper>
327 <Target a={1} b="abc" />
328 </Wrapper>,
@@ -349,7 +352,7 @@ describe('InspectedElement', () => {
352
353 await utils.actAsync(
354 () =>
352 - ReactDOM.render(
355 + legacyRender(
356 <Wrapper>
357 <Target a={2} b="def" />
358 </Wrapper>,
@@ -416,7 +419,7 @@ describe('InspectedElement', () => {
419
420 const container = document.createElement('div');
421 await utils.actAsync(() =>
419 - ReactDOM.render(
422 + legacyRender(
423 <Example
424 boolean_false={false}
425 boolean_true={true}
@@ -505,7 +508,7 @@ describe('InspectedElement', () => {
508
509 const container = document.createElement('div');
510 await utils.actAsync(() =>
508 - ReactDOM.render(
511 + legacyRender(
512 <Example
513 anonymous_fn={instance.anonymousFunction}
514 array_buffer={arrayBuffer}
@@ -669,7 +672,7 @@ describe('InspectedElement', () => {
672
673 const iterable = generator();
674 await utils.actAsync(() =>
672 - ReactDOM.render(<Example prop={iterable} />, container),
675 + legacyRender(<Example prop={iterable} />, container),
676 );
677
678 const inspectedElement = await inspectElementAtIndex(0);
@@ -693,7 +696,7 @@ describe('InspectedElement', () => {
696
697 const container = document.createElement('div');
698 await utils.actAsync(() =>
696 - ReactDOM.render(<Example object={object} />, container),
699 + legacyRender(<Example object={object} />, container),
700 );
701
702 const inspectedElement = await inspectElementAtIndex(0);
@@ -718,7 +721,7 @@ describe('InspectedElement', () => {
721
722 const container = document.createElement('div');
723 await utils.actAsync(() =>
721 - ReactDOM.render(<Example object={object} />, container),
724 + legacyRender(<Example object={object} />, container),
725 );
726
727 const inspectedElement = await inspectElementAtIndex(0);
@@ -755,7 +758,7 @@ describe('InspectedElement', () => {
758
759 const container = document.createElement('div');
760 await utils.actAsync(() =>
758 - ReactDOM.render(<Example data={new CustomData()} />, container),
761 + legacyRender(<Example data={new CustomData()} />, container),
762 );
763
764 const inspectedElement = await inspectElementAtIndex(0);
@@ -834,7 +837,7 @@ describe('InspectedElement', () => {
837
838 const container = document.createElement('div');
839 await utils.actAsync(() =>
837 - ReactDOM.render(<Example object={object} />, container),
840 + legacyRender(<Example object={object} />, container),
841 );
842
843 const inspectedElement = await inspectElementAtIndex(0);
@@ -889,7 +892,7 @@ describe('InspectedElement', () => {
892 const Example = ({data}) => null;
893 const container = document.createElement('div');
894 await utils.actAsync(() =>
892 - ReactDOM.render(<Example data={testData} />, container),
895 + legacyRender(<Example data={testData} />, container),
896 );
897
898 const inspectedElement = await inspectElementAtIndex(0);
@@ -920,7 +923,7 @@ describe('InspectedElement', () => {
923
924 const container = document.createElement('div');
925 await utils.actAsync(() =>
923 - ReactDOM.render(
926 + legacyRender(
927 <Example
928 nestedObject={{
929 a: {
@@ -1075,7 +1078,7 @@ describe('InspectedElement', () => {
1078
1079 const container = document.createElement('div');
1080 await utils.actAsync(() =>
1078 - ReactDOM.render(
1081 + legacyRender(
1082 <Example
1083 set_of_sets={new Set([new Set([1, 2, 3]), new Set(['a', 'b', 'c'])])}
1084 />,
@@ -1141,7 +1144,7 @@ describe('InspectedElement', () => {
1144
1145 const container = document.createElement('div');
1146 await utils.actAsync(() =>
1144 - ReactDOM.render(
1147 + legacyRender(
1148 <Example
1149 nestedObject={{
1150 a: {
@@ -1245,7 +1248,7 @@ describe('InspectedElement', () => {
1248
1249 TestRendererAct(() => {
1250 TestUtilsAct(() => {
1248 - ReactDOM.render(
1251 + legacyRender(
1252 <Example
1253 nestedObject={{
1254 a: {
@@ -1304,7 +1307,7 @@ describe('InspectedElement', () => {
1307
1308 const container = document.createElement('div');
1309 await utils.actAsync(() =>
1307 - ReactDOM.render(
1310 + legacyRender(
1311 <Example
1312 nestedObject={{
1313 a: {
@@ -1383,7 +1386,7 @@ describe('InspectedElement', () => {
1386
1387 TestRendererAct(() => {
1388 TestUtilsAct(() => {
1386 - ReactDOM.render(
1389 + legacyRender(
1390 <Example
1391 nestedObject={{
1392 a: {
@@ -1439,7 +1442,7 @@ describe('InspectedElement', () => {
1442
1443 const container = document.createElement('div');
1444 await utils.actAsync(() =>
1442 - ReactDOM.render(
1445 + legacyRender(
1446 <Example
1447 nestedObject={{
1448 value: 1,
@@ -1487,7 +1490,7 @@ describe('InspectedElement', () => {
1490 `);
1491
1492 TestUtilsAct(() => {
1490 - ReactDOM.render(
1493 + legacyRender(
1494 <Example
1495 nestedObject={{
1496 value: 2,
@@ -1529,7 +1532,7 @@ describe('InspectedElement', () => {
1532
1533 const container = document.createElement('div');
1534 await utils.actAsync(() =>
1532 - ReactDOM.render(<Example a={1} b="abc" />, container),
1535 + legacyRender(<Example a={1} b="abc" />, container),
1536 );
1537
1538 const inspectedElement = await inspectElementAtIndex(0);
@@ -1573,7 +1576,7 @@ describe('InspectedElement', () => {
1576 };
1577
1578 await utils.actAsync(() =>
1576 - ReactDOM.render(
1579 + legacyRender(
1580 <Example nestedObject={nestedObject} />,
1581 document.createElement('div'),
1582 ),
@@ -1632,7 +1635,7 @@ describe('InspectedElement', () => {
1635 };
1636
1637 await utils.actAsync(() =>
1635 - ReactDOM.render(
1638 + legacyRender(
1639 <Example nestedObject={nestedObject} />,
1640 document.createElement('div'),
1641 ),
@@ -1707,7 +1710,7 @@ describe('InspectedElement', () => {
1710 const bigInt = BigInt(123); // eslint-disable-line no-undef
1711
1712 await utils.actAsync(() =>
1710 - ReactDOM.render(
1713 + legacyRender(
1714 <Example
1715 arrayBuffer={arrayBuffer}
1716 dataView={dataView}
@@ -1784,7 +1787,7 @@ describe('InspectedElement', () => {
1787 }
1788
1789 await utils.actAsync(() =>
1787 - ReactDOM.render(<DisplayedComplexValue />, container),
1790 + legacyRender(<DisplayedComplexValue />, container),
1791 );
1792
1793 const {hooks} = await inspectElementAtIndex(0);
@@ -1826,7 +1829,7 @@ describe('InspectedElement', () => {
1829
1830 const container = document.createElement('div');
1831 await utils.actAsync(() =>
1829 - ReactDOM.render(<Example proxy={proxy} />, container),
1832 + legacyRender(<Example proxy={proxy} />, container),
1833 );
1834
1835 const inspectedElement = await inspectElementAtIndex(0);
@@ -1860,7 +1863,7 @@ describe('InspectedElement', () => {
1863
1864 const container = document.createElement('div');
1865 await utils.actAsync(() =>
1863 - ReactDOM.render(<Example a={1} b="abc" />, container),
1866 + legacyRender(<Example a={1} b="abc" />, container),
1867 );
1868
1869 await inspectElementAtIndex(0);
@@ -1893,7 +1896,7 @@ describe('InspectedElement', () => {
1896
1897 const container = document.createElement('div');
1898 await utils.actAsync(() =>
1896 - ReactDOM.render(<Example a={1} b="abc" />, container),
1899 + legacyRender(<Example a={1} b="abc" />, container),
1900 );
1901
1902 await inspectElementAtIndex(0);
@@ -1926,7 +1929,7 @@ describe('InspectedElement', () => {
1929
1930 const container = document.createElement('div');
1931 await utils.actAsync(() =>
1929 - ReactDOM.render(<Example a={1} b="abc" />, container),
1932 + legacyRender(<Example a={1} b="abc" />, container),
1933 );
1934
1935 await inspectElementAtIndex(0);
@@ -1963,7 +1966,7 @@ describe('InspectedElement', () => {
1966
1967 const container = document.createElement('div');
1968 await utils.actAsync(() =>
1966 - ReactDOM.render(<Example a={1} b="abc" />, container),
1969 + legacyRender(<Example a={1} b="abc" />, container),
1970 );
1971
1972 await inspectElementAtIndex(0);
@@ -2030,7 +2033,7 @@ describe('InspectedElement', () => {
2033
2034 await withErrorsOrWarningsIgnored(['test-only: '], async () => {
2035 await utils.actAsync(() =>
2033 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2036 + legacyRender(<Example repeatWarningCount={1} />, container),
2037 );
2038 });
2039
@@ -2066,7 +2069,7 @@ describe('InspectedElement', () => {
2069 const container = document.createElement('div');
2070 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2071 await utils.actAsync(() =>
2069 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2072 + legacyRender(<Example repeatWarningCount={1} />, container),
2073 );
2074 });
2075 const data = await getErrorsAndWarningsForElementAtIndex(0);
@@ -2102,7 +2105,7 @@ describe('InspectedElement', () => {
2105 const container = document.createElement('div');
2106 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2107 await utils.actAsync(() =>
2105 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2108 + legacyRender(<Example repeatWarningCount={1} />, container),
2109 );
2110 });
2111
@@ -2139,7 +2142,7 @@ describe('InspectedElement', () => {
2142 const container = document.createElement('div');
2143 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2144 await utils.actAsync(() =>
2142 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2145 + legacyRender(<Example repeatWarningCount={1} />, container),
2146 );
2147 });
2148
@@ -2172,7 +2175,7 @@ describe('InspectedElement', () => {
2175 ['Warning: Each child in a list should have a unique "key" prop.'],
2176 async () => {
2177 await utils.actAsync(() =>
2175 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2178 + legacyRender(<Example repeatWarningCount={1} />, container),
2179 );
2180 },
2181 );
@@ -2202,7 +2205,7 @@ describe('InspectedElement', () => {
2205 const container = document.createElement('div');
2206 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2207 await utils.actAsync(() =>
2205 - ReactDOM.render(<Example repeatWarningCount={1} />, container),
2208 + legacyRender(<Example repeatWarningCount={1} />, container),
2209 );
2210 });
2211
@@ -2233,7 +2236,7 @@ describe('InspectedElement', () => {
2236 const container = document.createElement('div');
2237 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2238 await utils.actAsync(() =>
2236 - ReactDOM.render(
2239 + legacyRender(
2240 <React.Fragment>
2241 <Example id={1} />
2242 <Example id={2} />
@@ -2330,7 +2333,7 @@ describe('InspectedElement', () => {
2333 const container = document.createElement('div');
2334 await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => {
2335 await utils.actAsync(() =>
2333 - ReactDOM.render(
2336 + legacyRender(
2337 <React.Fragment>
2338 <Example id={1} />
2339 <Example id={2} />
@@ -2433,7 +2436,7 @@ describe('InspectedElement', () => {
2436 const Example = () => 'example';
2437
2438 await utils.actAsync(() =>
2436 - ReactDOM.render(
2439 + legacyRender(
2440 <ErrorBoundary>
2441 <Example />
2442 </ErrorBoundary>,
@@ -2486,7 +2489,9 @@ describe('InspectedElement', () => {
2489 await toggleError(true);
2490
2491 // we are in error state now, <Example /> won't show up
2489 - expect(store.getElementIDAtIndex(1)).toBe(null);
2492 + withErrorsOrWarningsIgnored(['Invalid index'], () => {
2493 + expect(store.getElementIDAtIndex(1)).toBe(null);
2494 + });
2495
2496 // Inpsect <ErrorBoundary /> to toggle off the error state
2497 inspectedElement = await inspect(0);
packages/react-devtools-shared/src/__tests__/ownersListContext-test.js
+7 -6
@@ -14,9 +14,9 @@ import type Store from 'react-devtools-shared/src/devtools/store';
14
15 describe('OwnersListContext', () => {
16 let React;
17 - let ReactDOM;
17 let TestRenderer: ReactTestRenderer;
18 let bridge: FrontendBridge;
19 + let legacyRender;
20 let store: Store;
21 let utils;
22
@@ -30,12 +30,13 @@ describe('OwnersListContext', () => {
30 utils = require('./utils');
31 utils.beforeEachProfiling();
32
33 + legacyRender = utils.legacyRender;
34 +
35 bridge = global.bridge;
36 store = global.store;
37 store.collapseNodesByDefault = false;
38
39 React = require('react');
38 - ReactDOM = require('react-dom');
40 TestRenderer = utils.requireTestRenderer();
41
42 BridgeContext = require('react-devtools-shared/src/devtools/views/context')
@@ -73,7 +74,7 @@ describe('OwnersListContext', () => {
74 const Child = () => null;
75
76 utils.act(() =>
76 - ReactDOM.render(<Grandparent />, document.createElement('div')),
77 + legacyRender(<Grandparent />, document.createElement('div')),
78 );
79
80 expect(store).toMatchSnapshot('mount');
@@ -132,7 +133,7 @@ describe('OwnersListContext', () => {
133 const Child = () => null;
134
135 utils.act(() =>
135 - ReactDOM.render(<Grandparent />, document.createElement('div')),
136 + legacyRender(<Grandparent />, document.createElement('div')),
137 );
138
139 expect(store).toMatchSnapshot('mount');
@@ -170,7 +171,7 @@ describe('OwnersListContext', () => {
171 const Parent = () => null;
172
173 utils.act(() =>
173 - ReactDOM.render(<Grandparent />, document.createElement('div')),
174 + legacyRender(<Grandparent />, document.createElement('div')),
175 );
176
177 expect(store).toMatchSnapshot('mount');
@@ -211,7 +212,7 @@ describe('OwnersListContext', () => {
212 };
213
214 utils.act(() =>
214 - ReactDOM.render(<Grandparent />, document.createElement('div')),
215 + legacyRender(<Grandparent />, document.createElement('div')),
216 );
217
218 let didFinish = false;
packages/react-devtools-shared/src/__tests__/profilerContext-test.js
+22 -21
@@ -18,6 +18,7 @@ describe('ProfilerContext', () => {
18 let ReactDOM;
19 let TestRenderer: ReactTestRenderer;
20 let bridge: FrontendBridge;
21 + let legacyRender;
22 let store: Store;
23 let utils;
24
@@ -33,6 +34,8 @@ describe('ProfilerContext', () => {
34 utils = require('./utils');
35 utils.beforeEachProfiling();
36
37 + legacyRender = utils.legacyRender;
38 +
39 bridge = global.bridge;
40 store = global.store;
41 store.collapseNodesByDefault = false;
@@ -96,10 +99,10 @@ describe('ProfilerContext', () => {
99 const containerA = document.createElement('div');
100 const containerB = document.createElement('div');
101
99 - await utils.actAsync(() => ReactDOM.render(<Component />, containerA));
102 + await utils.actAsync(() => legacyRender(<Component />, containerA));
103 expect(context.supportsProfiling).toBe(true);
104
102 - await utils.actAsync(() => ReactDOM.render(<Component />, containerB));
105 + await utils.actAsync(() => legacyRender(<Component />, containerB));
106 await utils.actAsync(() => ReactDOM.unmountComponentAtNode(containerA));
107 expect(context.supportsProfiling).toBe(true);
108
@@ -110,9 +113,7 @@ describe('ProfilerContext', () => {
113 it('should gracefully handle an empty profiling session (with no recorded commits)', async () => {
114 const Example = () => null;
115
113 - utils.act(() =>
114 - ReactDOM.render(<Example />, document.createElement('div')),
115 - );
116 + utils.act(() => legacyRender(<Example />, document.createElement('div')));
117
118 let context: Context = ((null: any): Context);
119
@@ -150,14 +151,14 @@ describe('ProfilerContext', () => {
151
152 const containerOne = document.createElement('div');
153 const containerTwo = document.createElement('div');
153 - utils.act(() => ReactDOM.render(<Parent />, containerOne));
154 - utils.act(() => ReactDOM.render(<Parent />, containerTwo));
154 + utils.act(() => legacyRender(<Parent />, containerOne));
155 + utils.act(() => legacyRender(<Parent />, containerTwo));
156 expect(store).toMatchSnapshot('mounted');
157
158 // Profile and record updates to both roots.
159 await utils.actAsync(() => store.profilerStore.startProfiling());
159 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerOne));
160 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerTwo));
160 + await utils.actAsync(() => legacyRender(<Parent />, containerOne));
161 + await utils.actAsync(() => legacyRender(<Parent />, containerTwo));
162 await utils.actAsync(() => store.profilerStore.stopProfiling());
163
164 let context: Context = ((null: any): Context);
@@ -189,13 +190,13 @@ describe('ProfilerContext', () => {
190
191 const containerOne = document.createElement('div');
192 const containerTwo = document.createElement('div');
192 - utils.act(() => ReactDOM.render(<Parent />, containerOne));
193 - utils.act(() => ReactDOM.render(<Parent />, containerTwo));
193 + utils.act(() => legacyRender(<Parent />, containerOne));
194 + utils.act(() => legacyRender(<Parent />, containerTwo));
195 expect(store).toMatchSnapshot('mounted');
196
197 // Profile and record updates to only the first root.
198 await utils.actAsync(() => store.profilerStore.startProfiling());
198 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerOne));
199 + await utils.actAsync(() => legacyRender(<Parent />, containerOne));
200 await utils.actAsync(() => store.profilerStore.stopProfiling());
201
202 let context: Context = ((null: any): Context);
@@ -228,14 +229,14 @@ describe('ProfilerContext', () => {
229
230 const containerA = document.createElement('div');
231 const containerB = document.createElement('div');
231 - utils.act(() => ReactDOM.render(<Parent />, containerA));
232 - utils.act(() => ReactDOM.render(<Parent />, containerB));
232 + utils.act(() => legacyRender(<Parent />, containerA));
233 + utils.act(() => legacyRender(<Parent />, containerB));
234 expect(store).toMatchSnapshot('mounted');
235
236 // Profile and record updates.
237 await utils.actAsync(() => store.profilerStore.startProfiling());
237 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerA));
238 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerB));
238 + await utils.actAsync(() => legacyRender(<Parent />, containerA));
239 + await utils.actAsync(() => legacyRender(<Parent />, containerB));
240 await utils.actAsync(() => store.profilerStore.stopProfiling());
241
242 let context: Context = ((null: any): Context);
@@ -263,8 +264,8 @@ describe('ProfilerContext', () => {
264
265 // Profile and record more updates to both roots
266 await utils.actAsync(() => store.profilerStore.startProfiling());
266 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerA));
267 - await utils.actAsync(() => ReactDOM.render(<Parent />, containerB));
267 + await utils.actAsync(() => legacyRender(<Parent />, containerA));
268 + await utils.actAsync(() => legacyRender(<Parent />, containerB));
269 await utils.actAsync(() => store.profilerStore.stopProfiling());
270
271 const otherID = ((store.getElementIDAtIndex(0): any): number);
@@ -287,7 +288,7 @@ describe('ProfilerContext', () => {
288
289 const container = document.createElement('div');
290 utils.act(() =>
290 - ReactDOM.render(<GrandParent includeChild={true} />, container),
291 + legacyRender(<GrandParent includeChild={true} />, container),
292 );
293 expect(store).toMatchSnapshot('mounted');
294
@@ -297,10 +298,10 @@ describe('ProfilerContext', () => {
298 // Profile and record updates.
299 await utils.actAsync(() => store.profilerStore.startProfiling());
300 await utils.actAsync(() =>
300 - ReactDOM.render(<GrandParent includeChild={true} />, container),
301 + legacyRender(<GrandParent includeChild={true} />, container),
302 );
303 await utils.actAsync(() =>
303 - ReactDOM.render(<GrandParent includeChild={false} />, container),
304 + legacyRender(<GrandParent includeChild={false} />, container),
305 );
306 await utils.actAsync(() => store.profilerStore.stopProfiling());
307
packages/react-devtools-shared/src/__tests__/profilerStore-test.js
+9 -6
@@ -12,6 +12,7 @@ import type Store from 'react-devtools-shared/src/devtools/store';
12 describe('ProfilerStore', () => {
13 let React;
14 let ReactDOM;
15 + let legacyRender;
16 let store: Store;
17 let utils;
18
@@ -19,6 +20,8 @@ describe('ProfilerStore', () => {
20 utils = require('./utils');
21 utils.beforeEachProfiling();
22
23 + legacyRender = utils.legacyRender;
24 +
25 store = global.store;
26 store.collapseNodesByDefault = false;
27 store.recordChangeDescriptions = true;
@@ -38,15 +41,15 @@ describe('ProfilerStore', () => {
41 const containerB = document.createElement('div');
42
43 utils.act(() => {
41 - ReactDOM.render(<Parent key="A" count={3} />, containerA);
42 - ReactDOM.render(<Parent key="B" count={2} />, containerB);
44 + legacyRender(<Parent key="A" count={3} />, containerA);
45 + legacyRender(<Parent key="B" count={2} />, containerB);
46 });
47
48 utils.act(() => store.profilerStore.startProfiling());
49
50 utils.act(() => {
48 - ReactDOM.render(<Parent key="A" count={4} />, containerA);
49 - ReactDOM.render(<Parent key="B" count={1} />, containerB);
51 + legacyRender(<Parent key="A" count={4} />, containerA);
52 + legacyRender(<Parent key="B" count={1} />, containerB);
53 });
54
55 utils.act(() => store.profilerStore.stopProfiling());
@@ -96,7 +99,7 @@ describe('ProfilerStore', () => {
99
100 // It's important that this test uses legacy sync mode.
101 // The root API does not trigger this particular failing case.
99 - ReactDOM.render(<ControlledInput />, container);
102 + legacyRender(<ControlledInput />, container);
103
104 utils.act(() => store.profilerStore.startProfiling());
105
@@ -151,7 +154,7 @@ describe('ProfilerStore', () => {
154
155 // It's important that this test uses legacy sync mode.
156 // The root API does not trigger this particular failing case.
154 - ReactDOM.render(<ControlledInput />, container);
157 + legacyRender(<ControlledInput />, container);
158
159 utils.act(() => store.profilerStore.startProfiling());
160 utils.act(() =>
packages/react-devtools-shared/src/__tests__/profilingCache-test.js
+27 -24
@@ -18,6 +18,7 @@ describe('ProfilingCache', () => {
18 let Scheduler;
19 let TestRenderer: ReactTestRenderer;
20 let bridge: FrontendBridge;
21 + let legacyRender;
22 let store: Store;
23 let utils;
24
@@ -25,6 +26,8 @@ describe('ProfilingCache', () => {
26 utils = require('./utils');
27 utils.beforeEachProfiling();
28
29 + legacyRender = utils.legacyRender;
30 +
31 bridge = global.bridge;
32 store = global.store;
33 store.collapseNodesByDefault = false;
@@ -60,14 +63,14 @@ describe('ProfilingCache', () => {
63 const containerB = document.createElement('div');
64 const containerC = document.createElement('div');
65
63 - utils.act(() => ReactDOM.render(<Parent count={2} />, containerA));
64 - utils.act(() => ReactDOM.render(<Parent count={1} />, containerB));
66 + utils.act(() => legacyRender(<Parent count={2} />, containerA));
67 + utils.act(() => legacyRender(<Parent count={1} />, containerB));
68 utils.act(() => store.profilerStore.startProfiling());
66 - utils.act(() => ReactDOM.render(<Parent count={3} />, containerA));
67 - utils.act(() => ReactDOM.render(<Parent count={1} />, containerC));
68 - utils.act(() => ReactDOM.render(<Parent count={1} />, containerA));
69 + utils.act(() => legacyRender(<Parent count={3} />, containerA));
70 + utils.act(() => legacyRender(<Parent count={1} />, containerC));
71 + utils.act(() => legacyRender(<Parent count={1} />, containerA));
72 utils.act(() => ReactDOM.unmountComponentAtNode(containerB));
70 - utils.act(() => ReactDOM.render(<Parent count={0} />, containerA));
73 + utils.act(() => legacyRender(<Parent count={0} />, containerA));
74 utils.act(() => store.profilerStore.stopProfiling());
75
76 const allProfilingDataForRoots = [];
@@ -143,10 +146,10 @@ describe('ProfilingCache', () => {
146 const container = document.createElement('div');
147
148 utils.act(() => store.profilerStore.startProfiling());
146 - utils.act(() => ReactDOM.render(<Parent count={2} />, container));
147 - utils.act(() => ReactDOM.render(<Parent count={3} />, container));
148 - utils.act(() => ReactDOM.render(<Parent count={1} />, container));
149 - utils.act(() => ReactDOM.render(<Parent count={0} />, container));
149 + utils.act(() => legacyRender(<Parent count={2} />, container));
150 + utils.act(() => legacyRender(<Parent count={3} />, container));
151 + utils.act(() => legacyRender(<Parent count={1} />, container));
152 + utils.act(() => legacyRender(<Parent count={0} />, container));
153 utils.act(() => store.profilerStore.stopProfiling());
154
155 const allCommitData = [];
@@ -248,16 +251,16 @@ describe('ProfilingCache', () => {
251 const container = document.createElement('div');
252
253 utils.act(() => store.profilerStore.startProfiling());
251 - utils.act(() => ReactDOM.render(<LegacyContextProvider />, container));
254 + utils.act(() => legacyRender(<LegacyContextProvider />, container));
255 expect(instance).not.toBeNull();
256 utils.act(() => (instance: any).setState({count: 1}));
257 utils.act(() =>
255 - ReactDOM.render(<LegacyContextProvider foo={123} />, container),
258 + legacyRender(<LegacyContextProvider foo={123} />, container),
259 );
260 utils.act(() =>
258 - ReactDOM.render(<LegacyContextProvider bar="abc" />, container),
261 + legacyRender(<LegacyContextProvider bar="abc" />, container),
262 );
260 - utils.act(() => ReactDOM.render(<LegacyContextProvider />, container));
263 + utils.act(() => legacyRender(<LegacyContextProvider />, container));
264 utils.act(() => store.profilerStore.stopProfiling());
265
266 const allCommitData = [];
@@ -346,7 +349,7 @@ describe('ProfilingCache', () => {
349
350 utils.act(() => store.profilerStore.startProfiling());
351 utils.act(() =>
349 - ReactDOM.render(
352 + legacyRender(
353 <Context.Provider value={true}>
354 <Component count={1} />
355 </Context.Provider>,
@@ -356,7 +359,7 @@ describe('ProfilingCache', () => {
359
360 // Second render has no changed hooks, only changed props.
361 utils.act(() =>
359 - ReactDOM.render(
362 + legacyRender(
363 <Context.Provider value={true}>
364 <Component count={2} />
365 </Context.Provider>,
@@ -373,7 +376,7 @@ describe('ProfilingCache', () => {
376 // Fifth render has a changed context value, but no changed hook.
377 // Technically, DevTools will miss this "context" change since it only tracks legacy context.
378 utils.act(() =>
376 - ReactDOM.render(
379 + legacyRender(
380 <Context.Provider value={false}>
381 <Component count={2} />
382 </Context.Provider>,
@@ -453,7 +456,7 @@ describe('ProfilingCache', () => {
456
457 utils.act(() => store.profilerStore.startProfiling());
458 utils.act(() =>
456 - ReactDOM.render(<Grandparent />, document.createElement('div')),
459 + legacyRender(<Grandparent />, document.createElement('div')),
460 );
461 utils.act(() => store.profilerStore.stopProfiling());
462
@@ -508,7 +511,7 @@ describe('ProfilingCache', () => {
511
512 utils.act(() => store.profilerStore.startProfiling());
513 await utils.actAsync(() =>
511 - ReactDOM.render(<Parent />, document.createElement('div')),
514 + legacyRender(<Parent />, document.createElement('div')),
515 );
516 utils.act(() => store.profilerStore.stopProfiling());
517
@@ -558,9 +561,9 @@ describe('ProfilingCache', () => {
561 const container = document.createElement('div');
562
563 utils.act(() => store.profilerStore.startProfiling());
561 - utils.act(() => ReactDOM.render(<Parent count={1} />, container));
562 - utils.act(() => ReactDOM.render(<Parent count={2} />, container));
563 - utils.act(() => ReactDOM.render(<Parent count={3} />, container));
564 + utils.act(() => legacyRender(<Parent count={1} />, container));
565 + utils.act(() => legacyRender(<Parent count={2} />, container));
566 + utils.act(() => legacyRender(<Parent count={3} />, container));
567 utils.act(() => store.profilerStore.stopProfiling());
568
569 const allFiberCommits = [];
@@ -624,7 +627,7 @@ describe('ProfilingCache', () => {
627 const container = document.createElement('div');
628
629 utils.act(() => store.profilerStore.startProfiling());
627 - utils.act(() => ReactDOM.render(<React.Suspense />, container));
630 + utils.act(() => legacyRender(<React.Suspense />, container));
631 utils.act(() => store.profilerStore.stopProfiling());
632
633 function Validator({commitIndex, rootID}) {
@@ -721,7 +724,7 @@ describe('ProfilingCache', () => {
724 const {Simulate} = require('react-dom/test-utils');
725
726 const container = document.createElement('div');
724 - utils.act(() => ReactDOM.render(<App />, container));
727 + utils.act(() => legacyRender(<App />, container));
728 expect(container.textContent).toBe('Home');
729 utils.act(() => store.profilerStore.startProfiling());
730 utils.act(() => Simulate.click(linkRef.current));
packages/react-devtools-shared/src/__tests__/profilingCharts-test.js
+7 -6
@@ -12,9 +12,9 @@ import type Store from 'react-devtools-shared/src/devtools/store';
12
13 describe('profiling charts', () => {
14 let React;
15 - let ReactDOM;
15 let Scheduler;
16 let TestRenderer: TestRendererType;
17 + let legacyRender;
18 let store: Store;
19 let utils;
20
@@ -22,12 +22,13 @@ describe('profiling charts', () => {
22 utils = require('./utils');
23 utils.beforeEachProfiling();
24
25 + legacyRender = utils.legacyRender;
26 +
27 store = global.store;
28 store.collapseNodesByDefault = false;
29 store.recordChangeDescriptions = true;
30
31 React = require('react');
30 - ReactDOM = require('react-dom');
32 Scheduler = require('scheduler');
33 TestRenderer = utils.requireTestRenderer();
34 });
@@ -54,8 +55,8 @@ describe('profiling charts', () => {
55 const container = document.createElement('div');
56
57 utils.act(() => store.profilerStore.startProfiling());
57 - utils.act(() => ReactDOM.render(<Parent />, container));
58 - utils.act(() => ReactDOM.render(<Parent />, container));
58 + utils.act(() => legacyRender(<Parent />, container));
59 + utils.act(() => legacyRender(<Parent />, container));
60 utils.act(() => store.profilerStore.stopProfiling());
61
62 let renderFinished = false;
@@ -120,8 +121,8 @@ describe('profiling charts', () => {
121 const container = document.createElement('div');
122
123 utils.act(() => store.profilerStore.startProfiling());
123 - utils.act(() => ReactDOM.render(<Parent />, container));
124 - utils.act(() => ReactDOM.render(<Parent />, container));
124 + utils.act(() => legacyRender(<Parent />, container));
125 + utils.act(() => legacyRender(<Parent />, container));
126 utils.act(() => store.profilerStore.stopProfiling());
127
128 let renderFinished = false;
packages/react-devtools-shared/src/__tests__/profilingCommitTreeBuilder-test.js
+12 -19
@@ -15,6 +15,7 @@ describe('commit tree', () => {
15 let ReactDOM;
16 let Scheduler;
17 let TestRenderer: TestRendererType;
18 + let legacyRender;
19 let store: Store;
20 let utils;
21
@@ -22,6 +23,8 @@ describe('commit tree', () => {
23 utils = require('./utils');
24 utils.beforeEachProfiling();
25
26 + legacyRender = utils.legacyRender;
27 +
28 store = global.store;
29 store.collapseNodesByDefault = false;
30 store.recordChangeDescriptions = true;
@@ -47,10 +50,10 @@ describe('commit tree', () => {
50 const container = document.createElement('div');
51
52 utils.act(() => store.profilerStore.startProfiling());
50 - utils.act(() => ReactDOM.render(<Parent count={1} />, container));
51 - utils.act(() => ReactDOM.render(<Parent count={3} />, container));
52 - utils.act(() => ReactDOM.render(<Parent count={2} />, container));
53 - utils.act(() => ReactDOM.render(<Parent count={0} />, container));
53 + utils.act(() => legacyRender(<Parent count={1} />, container));
54 + utils.act(() => legacyRender(<Parent count={3} />, container));
55 + utils.act(() => legacyRender(<Parent count={2} />, container));
56 + utils.act(() => legacyRender(<Parent count={0} />, container));
57 utils.act(() => store.profilerStore.stopProfiling());
58
59 let renderFinished = false;
@@ -108,16 +111,10 @@ describe('commit tree', () => {
111 const container = document.createElement('div');
112
113 utils.act(() => store.profilerStore.startProfiling());
111 - utils.act(() =>
112 - ReactDOM.render(<App renderChildren={true} />, container),
113 - );
114 + utils.act(() => legacyRender(<App renderChildren={true} />, container));
115 await Promise.resolve();
115 - utils.act(() =>
116 - ReactDOM.render(<App renderChildren={true} />, container),
117 - );
118 - utils.act(() =>
119 - ReactDOM.render(<App renderChildren={false} />, container),
120 - );
116 + utils.act(() => legacyRender(<App renderChildren={true} />, container));
117 + utils.act(() => legacyRender(<App renderChildren={false} />, container));
118 utils.act(() => store.profilerStore.stopProfiling());
119
120 let renderFinished = false;
@@ -189,12 +186,8 @@ describe('commit tree', () => {
186 const container = document.createElement('div');
187
188 utils.act(() => store.profilerStore.startProfiling());
192 - utils.act(() =>
193 - ReactDOM.render(<App renderChildren={true} />, container),
194 - );
195 - utils.act(() =>
196 - ReactDOM.render(<App renderChildren={false} />, container),
197 - );
189 + utils.act(() => legacyRender(<App renderChildren={true} />, container));
190 + utils.act(() => legacyRender(<App renderChildren={false} />, container));
191 utils.act(() => store.profilerStore.stopProfiling());
192
193 let renderFinished = false;
packages/react-devtools-shared/src/__tests__/profilingHostRoot-test.js
+4 -2
@@ -11,10 +11,10 @@ describe('profiling HostRoot', () => {
11 let React;
12 let ReactDOM;
13 let Scheduler;
14 + let legacyRender;
15 let store: Store;
16 let utils;
17 let getEffectDurations;
17 -
18 let effectDurations;
19 let passiveEffectDurations;
20
@@ -22,6 +22,8 @@ describe('profiling HostRoot', () => {
22 utils = require('./utils');
23 utils.beforeEachProfiling();
24
25 + legacyRender = utils.legacyRender;
26 +
27 getEffectDurations = require('../backend/utils').getEffectDurations;
28
29 store = global.store;
@@ -61,7 +63,7 @@ describe('profiling HostRoot', () => {
63 utils.act(() => store.profilerStore.startProfiling());
64 utils.act(() => {
65 const container = document.createElement('div');
64 - ReactDOM.render(<App />, container);
66 + legacyRender(<App />, container);
67 });
68 utils.act(() => store.profilerStore.stopProfiling());
69
packages/react-devtools-shared/src/__tests__/store-test.js
+72 -86
@@ -14,6 +14,7 @@ describe('Store', () => {
14 let act;
15 let bridge;
16 let getRendererID;
17 + let legacyRender;
18 let store;
19 let withErrorsOrWarningsIgnored;
20
@@ -28,6 +29,7 @@ describe('Store', () => {
29 const utils = require('./utils');
30 act = utils.act;
31 getRendererID = utils.getRendererID;
32 + legacyRender = utils.legacyRender;
33 withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored;
34 });
35
@@ -35,7 +37,7 @@ describe('Store', () => {
37 const Component = () => <div>Hi</div>;
38
39 act(() =>
38 - ReactDOM.render(<Component count={4} />, document.createElement('div')),
40 + legacyRender(<Component count={4} />, document.createElement('div')),
41 );
42 expect(store).toMatchSnapshot('1: mount');
43
@@ -53,10 +55,10 @@ describe('Store', () => {
55
56 const container = document.createElement('div');
57
56 - act(() => ReactDOM.render(<Root>{null}</Root>, container));
58 + act(() => legacyRender(<Root>{null}</Root>, container));
59 expect(store).toMatchSnapshot('1: mount');
60
59 - act(() => ReactDOM.render(<div />, container));
61 + act(() => legacyRender(<div />, container));
62 expect(store).toMatchSnapshot('2: add host nodes');
63 });
64
@@ -81,7 +83,7 @@ describe('Store', () => {
83 const container = document.createElement('div');
84
85 act(() =>
84 - ReactDOM.render(
86 + legacyRender(
87 <>
88 <React.Suspense fallback="Loading...">
89 <Owner />
@@ -117,10 +119,10 @@ describe('Store', () => {
119
120 const container = document.createElement('div');
121
120 - act(() => ReactDOM.render(<Grandparent count={4} />, container));
122 + act(() => legacyRender(<Grandparent count={4} />, container));
123 expect(store).toMatchSnapshot('1: mount');
124
123 - act(() => ReactDOM.render(<Grandparent count={2} />, container));
125 + act(() => legacyRender(<Grandparent count={2} />, container));
126 expect(store).toMatchSnapshot('2: update');
127
128 act(() => ReactDOM.unmountComponentAtNode(container));
@@ -136,14 +138,14 @@ describe('Store', () => {
138 const containerB = document.createElement('div');
139
140 act(() => {
139 - ReactDOM.render(<Parent key="A" count={3} />, containerA);
140 - ReactDOM.render(<Parent key="B" count={2} />, containerB);
141 + legacyRender(<Parent key="A" count={3} />, containerA);
142 + legacyRender(<Parent key="B" count={2} />, containerB);
143 });
144 expect(store).toMatchSnapshot('1: mount');
145
146 act(() => {
145 - ReactDOM.render(<Parent key="A" count={4} />, containerA);
146 - ReactDOM.render(<Parent key="B" count={1} />, containerB);
147 + legacyRender(<Parent key="A" count={4} />, containerA);
148 + legacyRender(<Parent key="B" count={1} />, containerB);
149 });
150 expect(store).toMatchSnapshot('2: update');
151
@@ -171,10 +173,7 @@ describe('Store', () => {
173 const Child = () => <div>Hi!</div>;
174
175 act(() =>
174 - ReactDOM.render(
175 - <Grandparent count={4} />,
176 - document.createElement('div'),
177 - ),
176 + legacyRender(<Grandparent count={4} />, document.createElement('div')),
177 );
178 expect(store).toMatchSnapshot('1: mount');
179 });
@@ -201,11 +200,11 @@ describe('Store', () => {
200 );
201
202 const container = document.createElement('div');
204 - act(() => ReactDOM.render(<Wrapper shouldSuspense={true} />, container));
203 + act(() => legacyRender(<Wrapper shouldSuspense={true} />, container));
204 expect(store).toMatchSnapshot('1: loading');
205
206 act(() => {
208 - ReactDOM.render(<Wrapper shouldSuspense={false} />, container);
207 + legacyRender(<Wrapper shouldSuspense={false} />, container);
208 });
209 expect(store).toMatchSnapshot('2: resolved');
210 });
@@ -251,7 +250,7 @@ describe('Store', () => {
250
251 const container = document.createElement('div');
252 act(() =>
254 - ReactDOM.render(
253 + legacyRender(
254 <Wrapper
255 suspendParent={false}
256 suspendFirst={false}
@@ -262,7 +261,7 @@ describe('Store', () => {
261 );
262 expect(store).toMatchSnapshot('1: third child is suspended');
263 act(() =>
265 - ReactDOM.render(
264 + legacyRender(
265 <Wrapper
266 suspendParent={false}
267 suspendFirst={true}
@@ -273,7 +272,7 @@ describe('Store', () => {
272 );
273 expect(store).toMatchSnapshot('2: first and third child are suspended');
274 act(() =>
276 - ReactDOM.render(
275 + legacyRender(
276 <Wrapper
277 suspendParent={false}
278 suspendFirst={false}
@@ -284,7 +283,7 @@ describe('Store', () => {
283 );
284 expect(store).toMatchSnapshot('3: second and third child are suspended');
285 act(() =>
287 - ReactDOM.render(
286 + legacyRender(
287 <Wrapper
288 suspendParent={false}
289 suspendFirst={true}
@@ -295,7 +294,7 @@ describe('Store', () => {
294 );
295 expect(store).toMatchSnapshot('4: first and third child are suspended');
296 act(() =>
298 - ReactDOM.render(
297 + legacyRender(
298 <Wrapper
299 suspendParent={true}
300 suspendFirst={true}
@@ -306,7 +305,7 @@ describe('Store', () => {
305 );
306 expect(store).toMatchSnapshot('5: parent is suspended');
307 act(() =>
309 - ReactDOM.render(
308 + legacyRender(
309 <Wrapper
310 suspendParent={false}
311 suspendFirst={true}
@@ -317,7 +316,7 @@ describe('Store', () => {
316 );
317 expect(store).toMatchSnapshot('6: all children are suspended');
318 act(() =>
320 - ReactDOM.render(
319 + legacyRender(
320 <Wrapper
321 suspendParent={false}
322 suspendFirst={false}
@@ -346,7 +345,7 @@ describe('Store', () => {
345 );
346 expect(store).toMatchSnapshot('9: parent is suspended');
347 act(() =>
349 - ReactDOM.render(
348 + legacyRender(
349 <Wrapper
350 suspendParent={false}
351 suspendFirst={true}
@@ -373,7 +372,7 @@ describe('Store', () => {
372 );
373 expect(store).toMatchSnapshot('12: all children are suspended');
374 act(() =>
376 - ReactDOM.render(
375 + legacyRender(
376 <Wrapper
377 suspendParent={false}
378 suspendFirst={false}
@@ -430,10 +429,7 @@ describe('Store', () => {
429 const Child = () => <div>Hi!</div>;
430
431 act(() =>
433 - ReactDOM.render(
434 - <Grandparent count={2} />,
435 - document.createElement('div'),
436 - ),
432 + legacyRender(<Grandparent count={2} />, document.createElement('div')),
433 );
434 expect(store).toMatchSnapshot('1: mount');
435
@@ -468,10 +464,10 @@ describe('Store', () => {
464
465 const container = document.createElement('div');
466
471 - act(() => ReactDOM.render(<Root>{[foo, bar]}</Root>, container));
467 + act(() => legacyRender(<Root>{[foo, bar]}</Root>, container));
468 expect(store).toMatchSnapshot('1: mount');
469
474 - act(() => ReactDOM.render(<Root>{[bar, foo]}</Root>, container));
470 + act(() => legacyRender(<Root>{[bar, foo]}</Root>, container));
471 expect(store).toMatchSnapshot('3: reorder children');
472
473 act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), true));
@@ -495,7 +491,7 @@ describe('Store', () => {
491 const container = document.createElement('div');
492
493 act(() =>
498 - ReactDOM.render(
494 + legacyRender(
495 <React.Fragment>
496 <Parent count={1} />
497 <Parent count={3} />
@@ -506,7 +502,7 @@ describe('Store', () => {
502 expect(store).toMatchSnapshot('1: mount');
503
504 act(() =>
509 - ReactDOM.render(
505 + legacyRender(
506 <React.Fragment>
507 <Parent count={2} />
508 <Parent count={1} />
@@ -529,14 +525,14 @@ describe('Store', () => {
525 const containerB = document.createElement('div');
526
527 act(() => {
532 - ReactDOM.render(<Parent key="A" count={3} />, containerA);
533 - ReactDOM.render(<Parent key="B" count={2} />, containerB);
528 + legacyRender(<Parent key="A" count={3} />, containerA);
529 + legacyRender(<Parent key="B" count={2} />, containerB);
530 });
531 expect(store).toMatchSnapshot('1: mount');
532
533 act(() => {
538 - ReactDOM.render(<Parent key="A" count={4} />, containerA);
539 - ReactDOM.render(<Parent key="B" count={1} />, containerB);
534 + legacyRender(<Parent key="A" count={4} />, containerA);
535 + legacyRender(<Parent key="B" count={1} />, containerB);
536 });
537 expect(store).toMatchSnapshot('2: update');
538
@@ -564,10 +560,7 @@ describe('Store', () => {
560 const Child = () => <div>Hi!</div>;
561
562 act(() =>
567 - ReactDOM.render(
568 - <Grandparent count={4} />,
569 - document.createElement('div'),
570 - ),
563 + legacyRender(<Grandparent count={4} />, document.createElement('div')),
564 );
565 expect(store).toMatchSnapshot('1: mount');
566
@@ -600,7 +593,7 @@ describe('Store', () => {
593 );
594
595 const container = document.createElement('div');
603 - act(() => ReactDOM.render(<Wrapper shouldSuspense={true} />, container));
596 + act(() => legacyRender(<Wrapper shouldSuspense={true} />, container));
597 expect(store).toMatchSnapshot('1: loading');
598
599 // This test isn't meaningful unless we expand the suspended tree
@@ -609,7 +602,7 @@ describe('Store', () => {
602 expect(store).toMatchSnapshot('2: expand Wrapper and Suspense');
603
604 act(() => {
612 - ReactDOM.render(<Wrapper shouldSuspense={false} />, container);
605 + legacyRender(<Wrapper shouldSuspense={false} />, container);
606 });
607 expect(store).toMatchSnapshot('2: resolved');
608 });
@@ -626,10 +619,7 @@ describe('Store', () => {
619 const Child = () => <div>Hi!</div>;
620
621 act(() =>
629 - ReactDOM.render(
630 - <Grandparent count={2} />,
631 - document.createElement('div'),
632 - ),
622 + legacyRender(<Grandparent count={2} />, document.createElement('div')),
623 );
624 expect(store).toMatchSnapshot('1: mount');
625
@@ -671,7 +661,7 @@ describe('Store', () => {
661 const ref = React.createRef();
662
663 act(() =>
674 - ReactDOM.render(
664 + legacyRender(
665 <Wrapper forwardedRef={ref} />,
666 document.createElement('div'),
667 ),
@@ -711,10 +701,10 @@ describe('Store', () => {
701
702 const container = document.createElement('div');
703
714 - act(() => ReactDOM.render(<Root>{[foo, bar]}</Root>, container));
704 + act(() => legacyRender(<Root>{[foo, bar]}</Root>, container));
705 expect(store).toMatchSnapshot('1: mount');
706
717 - act(() => ReactDOM.render(<Root>{[bar, foo]}</Root>, container));
707 + act(() => legacyRender(<Root>{[bar, foo]}</Root>, container));
708 expect(store).toMatchSnapshot('3: reorder children');
709
710 act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), false));
@@ -743,9 +733,7 @@ describe('Store', () => {
733 const Parent = () => <Child />;
734 const Child = () => null;
735
746 - act(() =>
747 - ReactDOM.render(<SuspenseTree />, document.createElement('div')),
748 - );
736 + act(() => legacyRender(<SuspenseTree />, document.createElement('div')));
737 expect(store).toMatchSnapshot('1: mount');
738
739 act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), false));
@@ -790,9 +778,7 @@ describe('Store', () => {
778 const Parent = () => <Child />;
779 const Child = () => null;
780
793 - act(() =>
794 - ReactDOM.render(<Grandparent />, document.createElement('div')),
795 - );
781 + act(() => legacyRender(<Grandparent />, document.createElement('div')));
782
783 for (let i = 0; i < store.numElements; i++) {
784 expect(store.getIndexOfElementID(store.getElementIDAtIndex(i))).toBe(i);
@@ -805,8 +791,8 @@ describe('Store', () => {
791 const Child = () => null;
792
793 act(() => {
808 - ReactDOM.render(<Grandparent />, document.createElement('div'));
809 - ReactDOM.render(<Grandparent />, document.createElement('div'));
794 + legacyRender(<Grandparent />, document.createElement('div'));
795 + legacyRender(<Grandparent />, document.createElement('div'));
796 });
797
798 for (let i = 0; i < store.numElements; i++) {
@@ -820,7 +806,7 @@ describe('Store', () => {
806 const Child = () => null;
807
808 act(() =>
823 - ReactDOM.render(
809 + legacyRender(
810 <React.Fragment>
811 <Grandparent />
812 <Grandparent />
@@ -840,14 +826,14 @@ describe('Store', () => {
826 const Child = () => null;
827
828 act(() => {
843 - ReactDOM.render(
829 + legacyRender(
830 <React.Fragment>
831 <Grandparent />
832 <Grandparent />
833 </React.Fragment>,
834 document.createElement('div'),
835 );
850 - ReactDOM.render(
836 + legacyRender(
837 <React.Fragment>
838 <Grandparent />
839 <Grandparent />
@@ -870,10 +856,10 @@ describe('Store', () => {
856
857 expect(store.supportsProfiling).toBe(false);
858
873 - act(() => ReactDOM.render(<Component />, containerA));
859 + act(() => legacyRender(<Component />, containerA));
860 expect(store.supportsProfiling).toBe(true);
861
876 - act(() => ReactDOM.render(<Component />, containerB));
862 + act(() => legacyRender(<Component />, containerB));
863 act(() => ReactDOM.unmountComponentAtNode(containerA));
864 expect(store.supportsProfiling).toBe(true);
865
@@ -888,7 +874,7 @@ describe('Store', () => {
874 // This is pretty hacky.
875 const fauxElement = Object.assign({}, <Child />, {key: 123});
876
891 - act(() => ReactDOM.render([fauxElement], document.createElement('div')));
877 + act(() => legacyRender([fauxElement], document.createElement('div')));
878 expect(store).toMatchSnapshot('1: mount');
879 });
880
@@ -949,12 +935,12 @@ describe('Store', () => {
935 const container = document.createElement('div');
936
937 // Render once to start fetching the lazy component
952 - act(() => ReactDOM.render(<App />, container));
938 + act(() => legacyRender(<App />, container));
939
940 await Promise.resolve();
941
942 // Render again after it resolves
957 - act(() => ReactDOM.render(<App />, container));
943 + act(() => legacyRender(<App />, container));
944
945 expect(store).toMatchInlineSnapshot(`
946 [root]
@@ -1004,19 +990,19 @@ describe('Store', () => {
990 const container = document.createElement('div');
991
992 // Render once to start fetching the lazy component
1007 - act(() => ReactDOM.render(<App renderChildren={true} />, container));
993 + act(() => legacyRender(<App renderChildren={true} />, container));
994
995 expect(store).toMatchSnapshot('1: mounted + loading');
996
997 await Promise.resolve();
998
999 // Render again after it resolves
1014 - act(() => ReactDOM.render(<App renderChildren={true} />, container));
1000 + act(() => legacyRender(<App renderChildren={true} />, container));
1001
1002 expect(store).toMatchSnapshot('2: mounted + loaded');
1003
1004 // Render again to unmount it
1019 - act(() => ReactDOM.render(<App renderChildren={false} />, container));
1005 + act(() => legacyRender(<App renderChildren={false} />, container));
1006
1007 expect(store).toMatchSnapshot('3: unmounted');
1008 });
@@ -1047,12 +1033,12 @@ describe('Store', () => {
1033 const container = document.createElement('div');
1034
1035 // Render once to start fetching the lazy component
1050 - act(() => ReactDOM.render(<App renderChildren={true} />, container));
1036 + act(() => legacyRender(<App renderChildren={true} />, container));
1037
1038 expect(store).toMatchSnapshot('1: mounted + loading');
1039
1040 // Render again to unmount it before it finishes loading
1055 - act(() => ReactDOM.render(<App renderChildren={false} />, container));
1041 + act(() => legacyRender(<App renderChildren={false} />, container));
1042
1043 expect(store).toMatchSnapshot('2: unmounted');
1044 });
@@ -1083,7 +1069,7 @@ describe('Store', () => {
1069 const container = document.createElement('div');
1070
1071 withErrorsOrWarningsIgnored(['test-only:'], () => {
1086 - act(() => ReactDOM.render(<Example />, container));
1072 + act(() => legacyRender(<Example />, container));
1073 });
1074
1075 expect(store).toMatchInlineSnapshot(`
@@ -1093,7 +1079,7 @@ describe('Store', () => {
1079 `);
1080
1081 withErrorsOrWarningsIgnored(['test-only:'], () => {
1096 - act(() => ReactDOM.render(<Example rerender={1} />, container));
1082 + act(() => legacyRender(<Example rerender={1} />, container));
1083 });
1084
1085 expect(store).toMatchInlineSnapshot(`
@@ -1114,7 +1100,7 @@ describe('Store', () => {
1100 const container = document.createElement('div');
1101
1102 withErrorsOrWarningsIgnored(['test-only:'], () => {
1117 - act(() => ReactDOM.render(<Example />, container));
1103 + act(() => legacyRender(<Example />, container));
1104 });
1105
1106 expect(store).toMatchInlineSnapshot(`
@@ -1124,7 +1110,7 @@ describe('Store', () => {
1110 `);
1111
1112 withErrorsOrWarningsIgnored(['test-only:'], () => {
1127 - act(() => ReactDOM.render(<Example rerender={1} />, container));
1113 + act(() => legacyRender(<Example rerender={1} />, container));
1114 });
1115
1116 expect(store).toMatchInlineSnapshot(`
@@ -1156,7 +1142,7 @@ describe('Store', () => {
1142
1143 withErrorsOrWarningsIgnored(['test-only:'], () => {
1144 act(() => {
1159 - ReactDOM.render(<Example />, container);
1145 + legacyRender(<Example />, container);
1146 }, false);
1147 });
1148 flushPendingBridgeOperations();
@@ -1194,7 +1180,7 @@ describe('Store', () => {
1180
1181 withErrorsOrWarningsIgnored(['test-only:'], () => {
1182 act(() => {
1197 - ReactDOM.render(
1183 + legacyRender(
1184 <>
1185 <Example />
1186 </>,
@@ -1209,7 +1195,7 @@ describe('Store', () => {
1195
1196 // Before warnings and errors have flushed, flush another commit.
1197 act(() => {
1212 - ReactDOM.render(
1198 + legacyRender(
1199 <>
1200 <Example />
1201 <Noop />
@@ -1252,7 +1238,7 @@ describe('Store', () => {
1238 withErrorsOrWarningsIgnored(
1239 ['Warning: Each child in a list should have a unique "key" prop'],
1240 () => {
1255 - act(() => ReactDOM.render(<Example />, container));
1241 + act(() => legacyRender(<Example />, container));
1242 },
1243 );
1244
@@ -1273,7 +1259,7 @@ describe('Store', () => {
1259 const container = document.createElement('div');
1260 withErrorsOrWarningsIgnored(['test-only:'], () => {
1261 act(() =>
1276 - ReactDOM.render(
1262 + legacyRender(
1263 <React.Fragment>
1264 <Example />
1265 <Example />
@@ -1314,7 +1300,7 @@ describe('Store', () => {
1300 const container = document.createElement('div');
1301 withErrorsOrWarningsIgnored(['test-only:'], () => {
1302 act(() =>
1317 - ReactDOM.render(
1303 + legacyRender(
1304 <React.Fragment>
1305 <Example />
1306 <Example />
@@ -1359,7 +1345,7 @@ describe('Store', () => {
1345 const container = document.createElement('div');
1346 withErrorsOrWarningsIgnored(['test-only:'], () => {
1347 act(() =>
1362 - ReactDOM.render(
1348 + legacyRender(
1349 <React.Fragment>
1350 <Example />
1351 <Example />
@@ -1412,7 +1398,7 @@ describe('Store', () => {
1398 const container = document.createElement('div');
1399 withErrorsOrWarningsIgnored(['test-only:'], () => {
1400 act(() =>
1415 - ReactDOM.render(
1401 + legacyRender(
1402 <React.Fragment>
1403 <ComponentWithError />
1404 <ComponentWithWarning />
@@ -1432,7 +1418,7 @@ describe('Store', () => {
1418
1419 withErrorsOrWarningsIgnored(['test-only:'], () => {
1420 act(() =>
1435 - ReactDOM.render(
1421 + legacyRender(
1422 <React.Fragment>
1423 <ComponentWithWarning />
1424 <ComponentWithWarningAndError />
@@ -1450,7 +1436,7 @@ describe('Store', () => {
1436
1437 withErrorsOrWarningsIgnored(['test-only:'], () => {
1438 act(() =>
1453 - ReactDOM.render(
1439 + legacyRender(
1440 <React.Fragment>
1441 <ComponentWithWarning />
1442 </React.Fragment>,
@@ -1465,7 +1451,7 @@ describe('Store', () => {
1451 `);
1452
1453 withErrorsOrWarningsIgnored(['test-only:'], () => {
1468 - act(() => ReactDOM.render(<React.Fragment />, container));
1454 + act(() => legacyRender(<React.Fragment />, container));
1455 });
1456 expect(store).toMatchInlineSnapshot(`[root]`);
1457 expect(store.errorCount).toBe(0);
packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js
+20 -11
@@ -12,9 +12,9 @@ import type Store from 'react-devtools-shared/src/devtools/store';
12
13 describe('Store component filters', () => {
14 let React;
15 - let ReactDOM;
15 let Types;
16 let bridge: FrontendBridge;
17 + let legacyRender;
18 let store: Store;
19 let utils;
20 let internalAct;
@@ -34,10 +34,11 @@ describe('Store component filters', () => {
34 store.recordChangeDescriptions = true;
35
36 React = require('react');
37 - ReactDOM = require('react-dom');
37 Types = require('react-devtools-shared/src/types');
38 utils = require('./utils');
39 internalAct = require('jest-react').act;
40 +
41 + legacyRender = utils.legacyRender;
42 });
43
44 it('should throw if filters are updated while profiling', () => {
@@ -56,7 +57,7 @@ describe('Store component filters', () => {
57 const FunctionComponent = () => <div>Hi</div>;
58
59 act(() =>
59 - ReactDOM.render(
60 + legacyRender(
61 <ClassComponent>
62 <FunctionComponent />
63 </ClassComponent>,
@@ -137,7 +138,7 @@ describe('Store component filters', () => {
138 it('should ignore invalid ElementTypeRoot filter', () => {
139 const Component = () => <div>Hi</div>;
140
140 - act(() => ReactDOM.render(<Component />, document.createElement('div')));
141 + act(() => legacyRender(<Component />, document.createElement('div')));
142 expect(store).toMatchInlineSnapshot(`
143 [root]
144 ▾ <Component>
@@ -165,7 +166,7 @@ describe('Store component filters', () => {
166 const Baz = () => <Text label="baz" />;
167
168 act(() =>
168 - ReactDOM.render(
169 + legacyRender(
170 <React.Fragment>
171 <Foo />
172 <Bar />
@@ -221,7 +222,7 @@ describe('Store component filters', () => {
222 it('should filter by path', () => {
223 const Component = () => <div>Hi</div>;
224
224 - act(() => ReactDOM.render(<Component />, document.createElement('div')));
225 + act(() => legacyRender(<Component />, document.createElement('div')));
226 expect(store).toMatchInlineSnapshot(`
227 [root]
228 ▾ <Component>
@@ -258,7 +259,7 @@ describe('Store component filters', () => {
259 const Bar = () => <Foo />;
260 Bar.displayName = 'Bar(Foo(Component))';
261
261 - act(() => ReactDOM.render(<Bar />, document.createElement('div')));
262 + act(() => legacyRender(<Bar />, document.createElement('div')));
263 expect(store).toMatchInlineSnapshot(`
264 [root]
265 ▾ <Component> [Bar][Foo]
@@ -337,7 +338,7 @@ describe('Store component filters', () => {
338 ];
339
340 const container = document.createElement('div');
340 - act(() => ReactDOM.render(<Wrapper shouldSuspend={true} />, container));
341 + act(() => legacyRender(<Wrapper shouldSuspend={true} />, container));
342 expect(store).toMatchInlineSnapshot(`
343 [root]
344 ▾ <Wrapper>
@@ -345,14 +346,14 @@ describe('Store component filters', () => {
346 <div>
347 `);
348
348 - act(() => ReactDOM.render(<Wrapper shouldSuspend={false} />, container));
349 + act(() => legacyRender(<Wrapper shouldSuspend={false} />, container));
350 expect(store).toMatchInlineSnapshot(`
351 [root]
352 ▾ <Wrapper>
353 <Component>
354 `);
355
355 - act(() => ReactDOM.render(<Wrapper shouldSuspend={true} />, container));
356 + act(() => legacyRender(<Wrapper shouldSuspend={true} />, container));
357 expect(store).toMatchInlineSnapshot(`
358 [root]
359 ▾ <Wrapper>
@@ -376,6 +377,14 @@ describe('Store component filters', () => {
377 console.warn('test-only: render warning');
378 return null;
379 }
380 +
381 + // HACK This require() is needed (somewhere in the test) for this case to pass.
382 + // Without it, the legacyRender() call below causes this test to fail
383 + // because it requires "react-dom" for the first time,
384 + // which causes the console error() and warn() methods to be overridden again,
385 + // effectively disconnecting the DevTools override in 'react-devtools-shared/src/backend/console'.
386 + require('react-dom');
387 +
388 const container = document.createElement('div');
389 utils.withErrorsOrWarningsIgnored(['test-only:'], () => {
390 act(
@@ -386,7 +395,7 @@ describe('Store component filters', () => {
395 ]),
396 );
397 act(() =>
389 - ReactDOM.render(
398 + legacyRender(
399 <React.Fragment>
400 <ComponentWithError />
401 <ComponentWithWarning />
packages/react-devtools-shared/src/__tests__/storeOwners-test.js
+13 -11
@@ -11,8 +11,8 @@ const {printOwnersList} = require('../devtools/utils');
11
12 describe('Store owners list', () => {
13 let React;
14 - let ReactDOM;
14 let act;
15 + let legacyRender;
16 let store;
17
18 beforeEach(() => {
@@ -20,8 +20,10 @@ describe('Store owners list', () => {
20 store.collapseNodesByDefault = false;
21
22 React = require('react');
23 - ReactDOM = require('react-dom');
24 - act = require('./utils').act;
23 +
24 + const utils = require('./utils');
25 + act = utils.act;
26 + legacyRender = utils.legacyRender;
27 });
28
29 it('should drill through intermediate components', () => {
@@ -36,7 +38,7 @@ describe('Store owners list', () => {
38 const Leaf = () => <div>Leaf</div>;
39 const Intermediate = ({children}) => <Wrapper>{children}</Wrapper>;
40
39 - act(() => ReactDOM.render(<Root />, document.createElement('div')));
41 + act(() => legacyRender(<Root />, document.createElement('div')));
42 expect(store).toMatchSnapshot('1: mount');
43
44 const rootID = store.getElementIDAtIndex(0);
@@ -64,7 +66,7 @@ describe('Store owners list', () => {
66 <Wrapper key="wrapper">{children}</Wrapper>,
67 ];
68
67 - act(() => ReactDOM.render(<Root />, document.createElement('div')));
69 + act(() => legacyRender(<Root />, document.createElement('div')));
70 expect(store).toMatchSnapshot('1: mount');
71
72 const rootID = store.getElementIDAtIndex(0);
@@ -96,7 +98,7 @@ describe('Store owners list', () => {
98 const container = document.createElement('div');
99
100 act(() =>
99 - ReactDOM.render(
101 + legacyRender(
102 <Root includeDirect={false} includeIndirect={true} />,
103 container,
104 ),
@@ -109,7 +111,7 @@ describe('Store owners list', () => {
111 ).toMatchSnapshot('2: components owned by <Root>');
112
113 act(() =>
112 - ReactDOM.render(
114 + legacyRender(
115 <Root includeDirect={true} includeIndirect={true} />,
116 container,
117 ),
@@ -121,7 +123,7 @@ describe('Store owners list', () => {
123 ).toMatchSnapshot('4: components owned by <Root>');
124
125 act(() =>
124 - ReactDOM.render(
126 + legacyRender(
127 <Root includeDirect={true} includeIndirect={false} />,
128 container,
129 ),
@@ -133,7 +135,7 @@ describe('Store owners list', () => {
135 ).toMatchSnapshot('6: components owned by <Root>');
136
137 act(() =>
136 - ReactDOM.render(
138 + legacyRender(
139 <Root includeDirect={false} includeIndirect={false} />,
140 container,
141 ),
@@ -153,7 +155,7 @@ describe('Store owners list', () => {
155 const Leaf = () => <div>Leaf</div>;
156
157 const container = document.createElement('div');
156 - act(() => ReactDOM.render(<Root ascending={true} />, container));
158 + act(() => legacyRender(<Root ascending={true} />, container));
159 expect(store).toMatchSnapshot('1: mount (ascending)');
160
161 const rootID = store.getElementIDAtIndex(0);
@@ -161,7 +163,7 @@ describe('Store owners list', () => {
163 printOwnersList(store.getOwnersListForElement(rootID)),
164 ).toMatchSnapshot('2: components owned by <Root>');
165
164 - act(() => ReactDOM.render(<Root ascending={false} />, container));
166 + act(() => legacyRender(<Root ascending={false} />, container));
167 expect(store).toMatchSnapshot('3: update (descending)');
168
169 expect(
packages/react-devtools-shared/src/__tests__/storeStressSync-test.js
+49 -45
@@ -14,6 +14,7 @@ describe('StoreStress (Legacy Mode)', () => {
14 let bridge;
15 let store;
16 let print;
17 + let legacyRender;
18
19 beforeEach(() => {
20 bridge = global.bridge;
@@ -22,7 +23,10 @@ describe('StoreStress (Legacy Mode)', () => {
23
24 React = require('react');
25 ReactDOM = require('react-dom');
25 - act = require('./utils').act;
26 +
27 + const utils = require('./utils');
28 + act = utils.act;
29 + legacyRender = utils.legacyRender;
30
31 print = require('./storeSerializer').print;
32 });
@@ -56,7 +60,7 @@ describe('StoreStress (Legacy Mode)', () => {
60
61 // 1. Render a normal version of [a, b, c, d, e].
62 let container = document.createElement('div');
59 - act(() => ReactDOM.render(<Parent>{[a, b, c, d, e]}</Parent>, container));
63 + act(() => legacyRender(<Parent>{[a, b, c, d, e]}</Parent>, container));
64 expect(store).toMatchSnapshot('1: abcde');
65 expect(container.textContent).toMatch('abcde');
66 const snapshotForABCDE = print(store);
@@ -119,7 +123,7 @@ describe('StoreStress (Legacy Mode)', () => {
123 container = document.createElement('div');
124
125 // Verify mounting 'abcde'.
122 - act(() => ReactDOM.render(<Parent>{cases[i]}</Parent>, container));
126 + act(() => legacyRender(<Parent>{cases[i]}</Parent>, container));
127 expect(container.textContent).toMatch('abcde');
128 expect(print(store)).toEqual(snapshotForABCDE);
129
@@ -147,7 +151,7 @@ describe('StoreStress (Legacy Mode)', () => {
151 container = document.createElement('div');
152 for (let i = 0; i < cases.length; i++) {
153 // Verify mounting 'abcde'.
150 - act(() => ReactDOM.render(<Parent>{cases[i]}</Parent>, container));
154 + act(() => legacyRender(<Parent>{cases[i]}</Parent>, container));
155 expect(container.textContent).toMatch('abcde');
156 expect(print(store)).toEqual(snapshotForABCDE);
157
@@ -210,7 +214,7 @@ describe('StoreStress (Legacy Mode)', () => {
214 const snapshots = [];
215 let container = document.createElement('div');
216 for (let i = 0; i < steps.length; i++) {
213 - act(() => ReactDOM.render(<Root>{steps[i]}</Root>, container));
217 + act(() => legacyRender(<Root>{steps[i]}</Root>, container));
218 // We snapshot each step once so it doesn't regress.
219 expect(store).toMatchSnapshot();
220 snapshots.push(print(store));
@@ -222,11 +226,11 @@ describe('StoreStress (Legacy Mode)', () => {
226 for (let i = 0; i < steps.length; i++) {
227 for (let j = 0; j < steps.length; j++) {
228 container = document.createElement('div');
225 - act(() => ReactDOM.render(<Root>{steps[i]}</Root>, container));
229 + act(() => legacyRender(<Root>{steps[i]}</Root>, container));
230 expect(print(store)).toMatch(snapshots[i]);
227 - act(() => ReactDOM.render(<Root>{steps[j]}</Root>, container));
231 + act(() => legacyRender(<Root>{steps[j]}</Root>, container));
232 expect(print(store)).toMatch(snapshots[j]);
229 - act(() => ReactDOM.render(<Root>{steps[i]}</Root>, container));
233 + act(() => legacyRender(<Root>{steps[i]}</Root>, container));
234 expect(print(store)).toMatch(snapshots[i]);
235 act(() => ReactDOM.unmountComponentAtNode(container));
236 expect(print(store)).toBe('');
@@ -238,7 +242,7 @@ describe('StoreStress (Legacy Mode)', () => {
242 for (let j = 0; j < steps.length; j++) {
243 container = document.createElement('div');
244 act(() =>
241 - ReactDOM.render(
245 + legacyRender(
246 <Root>
247 <div>{steps[i]}</div>
248 </Root>,
@@ -247,7 +251,7 @@ describe('StoreStress (Legacy Mode)', () => {
251 );
252 expect(print(store)).toMatch(snapshots[i]);
253 act(() =>
250 - ReactDOM.render(
254 + legacyRender(
255 <Root>
256 <div>{steps[j]}</div>
257 </Root>,
@@ -256,7 +260,7 @@ describe('StoreStress (Legacy Mode)', () => {
260 );
261 expect(print(store)).toMatch(snapshots[j]);
262 act(() =>
259 - ReactDOM.render(
263 + legacyRender(
264 <Root>
265 <div>{steps[i]}</div>
266 </Root>,
@@ -312,7 +316,7 @@ describe('StoreStress (Legacy Mode)', () => {
316 let container = document.createElement('div');
317 for (let i = 0; i < steps.length; i++) {
318 act(() =>
315 - ReactDOM.render(
319 + legacyRender(
320 <Root>
321 <X />
322 <React.Suspense fallback={z}>{steps[i]}</React.Suspense>
@@ -331,7 +335,7 @@ describe('StoreStress (Legacy Mode)', () => {
335 // 2. Verify check Suspense can render same steps as initial fallback content.
336 for (let i = 0; i < steps.length; i++) {
337 act(() =>
334 - ReactDOM.render(
338 + legacyRender(
339 <Root>
340 <X />
341 <React.Suspense fallback={steps[i]}>
@@ -355,7 +359,7 @@ describe('StoreStress (Legacy Mode)', () => {
359 // Always start with a fresh container and steps[i].
360 container = document.createElement('div');
361 act(() =>
358 - ReactDOM.render(
362 + legacyRender(
363 <Root>
364 <X />
365 <React.Suspense fallback={z}>{steps[i]}</React.Suspense>
@@ -367,7 +371,7 @@ describe('StoreStress (Legacy Mode)', () => {
371 expect(print(store)).toEqual(snapshots[i]);
372 // Re-render with steps[j].
373 act(() =>
370 - ReactDOM.render(
374 + legacyRender(
375 <Root>
376 <X />
377 <React.Suspense fallback={z}>{steps[j]}</React.Suspense>
@@ -380,7 +384,7 @@ describe('StoreStress (Legacy Mode)', () => {
384 expect(print(store)).toEqual(snapshots[j]);
385 // Check that we can transition back again.
386 act(() =>
383 - ReactDOM.render(
387 + legacyRender(
388 <Root>
389 <X />
390 <React.Suspense fallback={z}>{steps[i]}</React.Suspense>
@@ -402,7 +406,7 @@ describe('StoreStress (Legacy Mode)', () => {
406 // Always start with a fresh container and steps[i].
407 container = document.createElement('div');
408 act(() =>
405 - ReactDOM.render(
409 + legacyRender(
410 <Root>
411 <X />
412 <React.Suspense fallback={steps[i]}>
@@ -418,7 +422,7 @@ describe('StoreStress (Legacy Mode)', () => {
422 expect(print(store)).toEqual(snapshots[i]);
423 // Re-render with steps[j].
424 act(() =>
421 - ReactDOM.render(
425 + legacyRender(
426 <Root>
427 <X />
428 <React.Suspense fallback={steps[j]}>
@@ -435,7 +439,7 @@ describe('StoreStress (Legacy Mode)', () => {
439 expect(print(store)).toEqual(snapshots[j]);
440 // Check that we can transition back again.
441 act(() =>
438 - ReactDOM.render(
442 + legacyRender(
443 <Root>
444 <X />
445 <React.Suspense fallback={steps[i]}>
@@ -461,7 +465,7 @@ describe('StoreStress (Legacy Mode)', () => {
465 // Always start with a fresh container and steps[i].
466 container = document.createElement('div');
467 act(() =>
464 - ReactDOM.render(
468 + legacyRender(
469 <Root>
470 <X />
471 <React.Suspense fallback={z}>{steps[i]}</React.Suspense>
@@ -473,7 +477,7 @@ describe('StoreStress (Legacy Mode)', () => {
477 expect(print(store)).toEqual(snapshots[i]);
478 // Re-render with steps[j].
479 act(() =>
476 - ReactDOM.render(
480 + legacyRender(
481 <Root>
482 <X />
483 <React.Suspense fallback={steps[j]}>
@@ -490,7 +494,7 @@ describe('StoreStress (Legacy Mode)', () => {
494 expect(print(store)).toEqual(snapshots[j]);
495 // Check that we can transition back again.
496 act(() =>
493 - ReactDOM.render(
497 + legacyRender(
498 <Root>
499 <X />
500 <React.Suspense fallback={z}>{steps[i]}</React.Suspense>
@@ -512,7 +516,7 @@ describe('StoreStress (Legacy Mode)', () => {
516 // Always start with a fresh container and steps[i].
517 container = document.createElement('div');
518 act(() =>
515 - ReactDOM.render(
519 + legacyRender(
520 <Root>
521 <X />
522 <React.Suspense fallback={steps[i]}>
@@ -528,7 +532,7 @@ describe('StoreStress (Legacy Mode)', () => {
532 expect(print(store)).toEqual(snapshots[i]);
533 // Re-render with steps[j].
534 act(() =>
531 - ReactDOM.render(
535 + legacyRender(
536 <Root>
537 <X />
538 <React.Suspense fallback={z}>{steps[j]}</React.Suspense>
@@ -541,7 +545,7 @@ describe('StoreStress (Legacy Mode)', () => {
545 expect(print(store)).toEqual(snapshots[j]);
546 // Check that we can transition back again.
547 act(() =>
544 - ReactDOM.render(
548 + legacyRender(
549 <Root>
550 <X />
551 <React.Suspense fallback={steps[i]}>
@@ -567,7 +571,7 @@ describe('StoreStress (Legacy Mode)', () => {
571 // Always start with a fresh container and steps[i].
572 container = document.createElement('div');
573 act(() =>
570 - ReactDOM.render(
574 + legacyRender(
575 <Root>
576 <X />
577 <React.Suspense fallback={steps[j]}>{steps[i]}</React.Suspense>
@@ -605,7 +609,7 @@ describe('StoreStress (Legacy Mode)', () => {
609
610 // Trigger actual fallback.
611 act(() =>
608 - ReactDOM.render(
612 + legacyRender(
613 <Root>
614 <X />
615 <React.Suspense fallback={steps[j]}>
@@ -633,7 +637,7 @@ describe('StoreStress (Legacy Mode)', () => {
637
638 // Switch to primary mode.
639 act(() =>
636 - ReactDOM.render(
640 + legacyRender(
641 <Root>
642 <X />
643 <React.Suspense fallback={steps[j]}>{steps[i]}</React.Suspense>
@@ -723,7 +727,7 @@ describe('StoreStress (Legacy Mode)', () => {
727 let container = document.createElement('div');
728 for (let i = 0; i < steps.length; i++) {
729 act(() =>
726 - ReactDOM.render(
730 + legacyRender(
731 <Root>
732 <X />
733 <React.Suspense fallback={z}>
@@ -747,7 +751,7 @@ describe('StoreStress (Legacy Mode)', () => {
751 const fallbackSnapshots = [];
752 for (let i = 0; i < steps.length; i++) {
753 act(() =>
750 - ReactDOM.render(
754 + legacyRender(
755 <Root>
756 <X />
757 <React.Suspense fallback={steps[i]}>
@@ -773,7 +777,7 @@ describe('StoreStress (Legacy Mode)', () => {
777 // Always start with a fresh container and steps[i].
778 container = document.createElement('div');
779 act(() =>
776 - ReactDOM.render(
780 + legacyRender(
781 <Root>
782 <X />
783 <React.Suspense fallback={z}>
@@ -787,7 +791,7 @@ describe('StoreStress (Legacy Mode)', () => {
791 expect(print(store)).toEqual(snapshots[i]);
792 // Re-render with steps[j].
793 act(() =>
790 - ReactDOM.render(
794 + legacyRender(
795 <Root>
796 <X />
797 <React.Suspense fallback={z}>
@@ -802,7 +806,7 @@ describe('StoreStress (Legacy Mode)', () => {
806 expect(print(store)).toEqual(snapshots[j]);
807 // Check that we can transition back again.
808 act(() =>
805 - ReactDOM.render(
809 + legacyRender(
810 <Root>
811 <X />
812 <React.Suspense fallback={z}>
@@ -826,7 +830,7 @@ describe('StoreStress (Legacy Mode)', () => {
830 // Always start with a fresh container and steps[i].
831 container = document.createElement('div');
832 act(() =>
829 - ReactDOM.render(
833 + legacyRender(
834 <Root>
835 <X />
836 <React.Suspense fallback={steps[i]}>
@@ -845,7 +849,7 @@ describe('StoreStress (Legacy Mode)', () => {
849 expect(print(store)).toEqual(fallbackSnapshots[i]);
850 // Re-render with steps[j].
851 act(() =>
848 - ReactDOM.render(
852 + legacyRender(
853 <Root>
854 <X />
855 <React.Suspense fallback={steps[j]}>
@@ -865,7 +869,7 @@ describe('StoreStress (Legacy Mode)', () => {
869 expect(print(store)).toEqual(fallbackSnapshots[j]);
870 // Check that we can transition back again.
871 act(() =>
868 - ReactDOM.render(
872 + legacyRender(
873 <Root>
874 <X />
875 <React.Suspense fallback={steps[i]}>
@@ -894,7 +898,7 @@ describe('StoreStress (Legacy Mode)', () => {
898 // Always start with a fresh container and steps[i].
899 container = document.createElement('div');
900 act(() =>
897 - ReactDOM.render(
901 + legacyRender(
902 <Root>
903 <X />
904 <React.Suspense fallback={z}>
@@ -908,7 +912,7 @@ describe('StoreStress (Legacy Mode)', () => {
912 expect(print(store)).toEqual(snapshots[i]);
913 // Re-render with steps[j].
914 act(() =>
911 - ReactDOM.render(
915 + legacyRender(
916 <Root>
917 <X />
918 <React.Suspense fallback={steps[j]}>
@@ -923,7 +927,7 @@ describe('StoreStress (Legacy Mode)', () => {
927 expect(print(store)).toEqual(fallbackSnapshots[j]);
928 // Check that we can transition back again.
929 act(() =>
926 - ReactDOM.render(
930 + legacyRender(
931 <Root>
932 <X />
933 <React.Suspense fallback={z}>
@@ -947,7 +951,7 @@ describe('StoreStress (Legacy Mode)', () => {
951 // Always start with a fresh container and steps[i].
952 container = document.createElement('div');
953 act(() =>
950 - ReactDOM.render(
954 + legacyRender(
955 <Root>
956 <X />
957 <React.Suspense fallback={steps[i]}>
@@ -961,7 +965,7 @@ describe('StoreStress (Legacy Mode)', () => {
965 expect(print(store)).toEqual(fallbackSnapshots[i]);
966 // Re-render with steps[j].
967 act(() =>
964 - ReactDOM.render(
968 + legacyRender(
969 <Root>
970 <X />
971 <React.Suspense fallback={steps[i]}>
@@ -976,7 +980,7 @@ describe('StoreStress (Legacy Mode)', () => {
980 expect(print(store)).toEqual(snapshots[j]);
981 // Check that we can transition back again.
982 act(() =>
979 - ReactDOM.render(
983 + legacyRender(
984 <Root>
985 <X />
986 <React.Suspense fallback={steps[i]}>
@@ -1000,7 +1004,7 @@ describe('StoreStress (Legacy Mode)', () => {
1004 // Always start with a fresh container and steps[i].
1005 container = document.createElement('div');
1006 act(() =>
1003 - ReactDOM.render(
1007 + legacyRender(
1008 <Root>
1009 <X />
1010 <React.Suspense fallback={steps[j]}>
@@ -1040,7 +1044,7 @@ describe('StoreStress (Legacy Mode)', () => {
1044
1045 // Trigger actual fallback.
1046 act(() =>
1043 - ReactDOM.render(
1047 + legacyRender(
1048 <Root>
1049 <X />
1050 <React.Suspense fallback={steps[j]}>
@@ -1066,7 +1070,7 @@ describe('StoreStress (Legacy Mode)', () => {
1070
1071 // Switch to primary mode.
1072 act(() =>
1069 - ReactDOM.render(
1073 + legacyRender(
1074 <Root>
1075 <X />
1076 <React.Suspense fallback={steps[j]}>
packages/react-devtools-shared/src/__tests__/treeContext-test.js
+46 -44
@@ -20,6 +20,7 @@ describe('TreeListContext', () => {
20 let ReactDOM;
21 let TestRenderer: ReactTestRenderer;
22 let bridge: FrontendBridge;
23 + let legacyRender;
24 let store: Store;
25 let utils;
26 let withErrorsOrWarningsIgnored;
@@ -35,6 +36,7 @@ describe('TreeListContext', () => {
36 utils = require('./utils');
37 utils.beforeEachProfiling();
38
39 + legacyRender = utils.legacyRender;
40 withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored;
41
42 bridge = global.bridge;
@@ -88,7 +90,7 @@ describe('TreeListContext', () => {
90 const Child = () => null;
91
92 utils.act(() =>
91 - ReactDOM.render(<Grandparent />, document.createElement('div')),
93 + legacyRender(<Grandparent />, document.createElement('div')),
94 );
95
96 let renderer;
@@ -214,7 +216,7 @@ describe('TreeListContext', () => {
216 const Child = () => null;
217
218 utils.act(() =>
217 - ReactDOM.render(<Grandparent />, document.createElement('div')),
219 + legacyRender(<Grandparent />, document.createElement('div')),
220 );
221
222 let renderer;
@@ -300,7 +302,7 @@ describe('TreeListContext', () => {
302 const Child = () => null;
303
304 utils.act(() =>
303 - ReactDOM.render(<Grandparent />, document.createElement('div')),
305 + legacyRender(<Grandparent />, document.createElement('div')),
306 );
307
308 let renderer;
@@ -391,7 +393,7 @@ describe('TreeListContext', () => {
393
394 const container = document.createElement('div');
395 utils.act(() =>
394 - ReactDOM.render(
396 + legacyRender(
397 <Grandparent>
398 <Parent>
399 <Child />
@@ -425,7 +427,7 @@ describe('TreeListContext', () => {
427
428 // Remove the child (which should auto-select the parent)
429 await utils.actAsync(() =>
428 - ReactDOM.render(
430 + legacyRender(
431 <Grandparent>
432 <Parent />
433 </Grandparent>,
@@ -458,7 +460,7 @@ describe('TreeListContext', () => {
460 const Child = () => null;
461
462 utils.act(() =>
461 - ReactDOM.render(<Grandparent />, document.createElement('div')),
463 + legacyRender(<Grandparent />, document.createElement('div')),
464 );
465
466 let renderer;
@@ -619,7 +621,7 @@ describe('TreeListContext', () => {
621 const Child = () => null;
622
623 utils.act(() =>
622 - ReactDOM.render(<Grandparent />, document.createElement('div')),
624 + legacyRender(<Grandparent />, document.createElement('div')),
625 );
626
627 let renderer;
@@ -918,7 +920,7 @@ describe('TreeListContext', () => {
920 Qux.displayName = `withHOC(${Qux.name})`;
921
922 utils.act(() =>
921 - ReactDOM.render(
923 + legacyRender(
924 <React.Fragment>
925 <Foo />
926 <Bar />
@@ -990,7 +992,7 @@ describe('TreeListContext', () => {
992 const Baz = () => null;
993
994 utils.act(() =>
993 - ReactDOM.render(
995 + legacyRender(
996 <React.Fragment>
997 <Foo />
998 <Baz />
@@ -1097,7 +1099,7 @@ describe('TreeListContext', () => {
1099 const container = document.createElement('div');
1100
1101 utils.act(() =>
1100 - ReactDOM.render(
1102 + legacyRender(
1103 <React.Fragment>
1104 <Foo />
1105 <Bar />
@@ -1123,7 +1125,7 @@ describe('TreeListContext', () => {
1125 `);
1126
1127 await utils.actAsync(() =>
1126 - ReactDOM.render(
1128 + legacyRender(
1129 <React.Fragment>
1130 <Foo />
1131 <Bar />
@@ -1158,7 +1160,7 @@ describe('TreeListContext', () => {
1160 const container = document.createElement('div');
1161
1162 utils.act(() =>
1161 - ReactDOM.render(
1163 + legacyRender(
1164 <React.Fragment>
1165 <Foo />
1166 <Bar />
@@ -1196,7 +1198,7 @@ describe('TreeListContext', () => {
1198 `);
1199
1200 await utils.actAsync(() =>
1199 - ReactDOM.render(
1201 + legacyRender(
1202 <React.Fragment>
1203 <Foo />
1204 <Bar />
@@ -1242,7 +1244,7 @@ describe('TreeListContext', () => {
1244 const Child = () => null;
1245
1246 utils.act(() =>
1245 - ReactDOM.render(<Grandparent />, document.createElement('div')),
1247 + legacyRender(<Grandparent />, document.createElement('div')),
1248 );
1249
1250 let renderer;
@@ -1283,7 +1285,7 @@ describe('TreeListContext', () => {
1285 const Child = () => null;
1286
1287 const container = document.createElement('div');
1286 - utils.act(() => ReactDOM.render(<Grandparent count={2} />, container));
1288 + utils.act(() => legacyRender(<Grandparent count={2} />, container));
1289
1290 let renderer;
1291 utils.act(() => (renderer = TestRenderer.create(<Contexts />)));
@@ -1306,7 +1308,7 @@ describe('TreeListContext', () => {
1308 `);
1309
1310 await utils.actAsync(() =>
1309 - ReactDOM.render(<Grandparent count={1} />, container),
1311 + legacyRender(<Grandparent count={1} />, container),
1312 );
1313 expect(state).toMatchInlineSnapshot(`
1314 [owners]
@@ -1315,7 +1317,7 @@ describe('TreeListContext', () => {
1317 `);
1318
1319 await utils.actAsync(() =>
1318 - ReactDOM.render(<Grandparent count={0} />, container),
1320 + legacyRender(<Grandparent count={0} />, container),
1321 );
1322 expect(state).toMatchInlineSnapshot(`
1323 [owners]
@@ -1329,7 +1331,7 @@ describe('TreeListContext', () => {
1331
1332 const container = document.createElement('div');
1333 utils.act(() =>
1332 - ReactDOM.render(
1334 + legacyRender(
1335 <Parent>
1336 <Child />
1337 </Parent>,
@@ -1353,7 +1355,7 @@ describe('TreeListContext', () => {
1355 → <Child>
1356 `);
1357
1356 - await utils.actAsync(() => ReactDOM.render(<Parent />, container));
1358 + await utils.actAsync(() => legacyRender(<Parent />, container));
1359 expect(state).toMatchInlineSnapshot(`
1360 [root]
1361 → <Parent>
@@ -1386,7 +1388,7 @@ describe('TreeListContext', () => {
1388 );
1389
1390 const container = document.createElement('div');
1389 - utils.act(() => ReactDOM.render(<Parent />, container));
1391 + utils.act(() => legacyRender(<Parent />, container));
1392
1393 let renderer;
1394 utils.act(() => (renderer = TestRenderer.create(<Contexts />)));
@@ -1493,7 +1495,7 @@ describe('TreeListContext', () => {
1495
1496 it('should handle when there are no errors/warnings', () => {
1497 utils.act(() =>
1496 - ReactDOM.render(
1498 + legacyRender(
1499 <React.Fragment>
1500 <Child />
1501 <Child />
@@ -1556,7 +1558,7 @@ describe('TreeListContext', () => {
1558 it('should cycle through the next errors/warnings and wrap around', () => {
1559 withErrorsOrWarningsIgnored(['test-only:'], () =>
1560 utils.act(() =>
1559 - ReactDOM.render(
1561 + legacyRender(
1562 <React.Fragment>
1563 <Child />
1564 <Child logWarning={true} />
@@ -1617,7 +1619,7 @@ describe('TreeListContext', () => {
1619 it('should cycle through the previous errors/warnings and wrap around', () => {
1620 withErrorsOrWarningsIgnored(['test-only:'], () =>
1621 utils.act(() =>
1620 - ReactDOM.render(
1622 + legacyRender(
1623 <React.Fragment>
1624 <Child />
1625 <Child logWarning={true} />
@@ -1678,14 +1680,14 @@ describe('TreeListContext', () => {
1680 it('should cycle through the next errors/warnings and wrap around with multiple roots', () => {
1681 withErrorsOrWarningsIgnored(['test-only:'], () => {
1682 utils.act(() => {
1681 - ReactDOM.render(
1683 + legacyRender(
1684 <React.Fragment>
1685 <Child />
1686 <Child logWarning={true} />,
1687 </React.Fragment>,
1688 document.createElement('div'),
1689 );
1688 - ReactDOM.render(
1690 + legacyRender(
1691 <React.Fragment>
1692 <Child />
1693 <Child logError={true} />
@@ -1748,14 +1750,14 @@ describe('TreeListContext', () => {
1750 it('should cycle through the previous errors/warnings and wrap around with multiple roots', () => {
1751 withErrorsOrWarningsIgnored(['test-only:'], () => {
1752 utils.act(() => {
1751 - ReactDOM.render(
1753 + legacyRender(
1754 <React.Fragment>
1755 <Child />
1756 <Child logWarning={true} />,
1757 </React.Fragment>,
1758 document.createElement('div'),
1759 );
1758 - ReactDOM.render(
1760 + legacyRender(
1761 <React.Fragment>
1762 <Child />
1763 <Child logError={true} />
@@ -1818,7 +1820,7 @@ describe('TreeListContext', () => {
1820 it('should select the next or previous element relative to the current selection', () => {
1821 withErrorsOrWarningsIgnored(['test-only:'], () =>
1822 utils.act(() =>
1821 - ReactDOM.render(
1823 + legacyRender(
1824 <React.Fragment>
1825 <Child />
1826 <Child logWarning={true} />
@@ -1880,7 +1882,7 @@ describe('TreeListContext', () => {
1882 it('should update correctly when errors/warnings are cleared for a fiber in the list', () => {
1883 withErrorsOrWarningsIgnored(['test-only:'], () =>
1884 utils.act(() =>
1883 - ReactDOM.render(
1885 + legacyRender(
1886 <React.Fragment>
1887 <Child logWarning={true} />
1888 <Child logError={true} />
@@ -1953,7 +1955,7 @@ describe('TreeListContext', () => {
1955 it('should update correctly when errors/warnings are cleared for the currently selected fiber', () => {
1956 withErrorsOrWarningsIgnored(['test-only:'], () =>
1957 utils.act(() =>
1956 - ReactDOM.render(
1958 + legacyRender(
1959 <React.Fragment>
1960 <Child logWarning={true} />
1961 <Child logError={true} />
@@ -1994,7 +1996,7 @@ describe('TreeListContext', () => {
1996
1997 withErrorsOrWarningsIgnored(['test-only:'], () =>
1998 utils.act(() =>
1997 - ReactDOM.render(
1999 + legacyRender(
2000 <React.Fragment>
2001 <Child logWarning={true} />
2002 <Child />
@@ -2028,7 +2030,7 @@ describe('TreeListContext', () => {
2030
2031 withErrorsOrWarningsIgnored(['test-only:'], () =>
2032 utils.act(() =>
2031 - ReactDOM.render(
2033 + legacyRender(
2034 <React.Fragment>
2035 <Child />
2036 <Child logWarning={true} />
@@ -2074,7 +2076,7 @@ describe('TreeListContext', () => {
2076 it('should update correctly when all errors/warnings are cleared', () => {
2077 withErrorsOrWarningsIgnored(['test-only:'], () =>
2078 utils.act(() =>
2077 - ReactDOM.render(
2079 + legacyRender(
2080 <React.Fragment>
2081 <Child logWarning={true} />
2082 <Child logError={true} />
@@ -2124,7 +2126,7 @@ describe('TreeListContext', () => {
2126
2127 withErrorsOrWarningsIgnored(['test-only:'], () =>
2128 utils.act(() =>
2127 - ReactDOM.render(
2129 + legacyRender(
2130 <React.Fragment>
2131 <Wrapper>
2132 <Child logWarning={true} />
@@ -2174,7 +2176,7 @@ describe('TreeListContext', () => {
2176
2177 withErrorsOrWarningsIgnored(['test-only:'], () =>
2178 utils.act(() =>
2177 - ReactDOM.render(
2179 + legacyRender(
2180 <React.Fragment>
2181 <Wrapper>
2182 <Child logWarning={true} />
@@ -2260,7 +2262,7 @@ describe('TreeListContext', () => {
2262
2263 withErrorsOrWarningsIgnored(['test-only:'], () =>
2264 utils.act(() =>
2263 - ReactDOM.render(
2265 + legacyRender(
2266 <React.Fragment>
2267 <Wrapper>
2268 <Child logWarning={true} />
@@ -2318,7 +2320,7 @@ describe('TreeListContext', () => {
2320
2321 withErrorsOrWarningsIgnored(['test-only:'], () =>
2322 utils.act(() =>
2321 - ReactDOM.render(
2323 + legacyRender(
2324 <React.Suspense fallback={null}>
2325 <Child logWarning={true} />
2326 <NeverResolves />
@@ -2354,7 +2356,7 @@ describe('TreeListContext', () => {
2356
2357 withErrorsOrWarningsIgnored(['test-only:'], () =>
2358 utils.act(() =>
2357 - ReactDOM.render(
2359 + legacyRender(
2360 <React.Suspense fallback={null}>
2361 <Child logWarning={true} />
2362 <LazyComponent />
@@ -2373,7 +2375,7 @@ describe('TreeListContext', () => {
2375 await Promise.resolve();
2376 withErrorsOrWarningsIgnored(['test-only:'], () =>
2377 utils.act(() =>
2376 - ReactDOM.render(
2378 + legacyRender(
2379 <React.Suspense fallback={null}>
2380 <Child logWarning={true} />
2381 <LazyComponent />
@@ -2404,7 +2406,7 @@ describe('TreeListContext', () => {
2406
2407 withErrorsOrWarningsIgnored(['test-only:'], () =>
2408 utils.act(() =>
2407 - ReactDOM.render(
2409 + legacyRender(
2410 <React.Suspense fallback={<Fallback />}>
2411 <LazyComponent />
2412 </React.Suspense>,
@@ -2425,7 +2427,7 @@ describe('TreeListContext', () => {
2427 await Promise.resolve();
2428 withErrorsOrWarningsIgnored(['test-only:'], () =>
2429 utils.act(() =>
2428 - ReactDOM.render(
2430 + legacyRender(
2431 <React.Suspense fallback={<Fallback />}>
2432 <LazyComponent />
2433 </React.Suspense>,
@@ -2469,7 +2471,7 @@ describe('TreeListContext', () => {
2471 ['test-only:', 'React will try to recreate this component tree'],
2472 () => {
2473 utils.act(() =>
2472 - ReactDOM.render(
2474 + legacyRender(
2475 <ErrorBoundary>
2476 <BadRender />
2477 </ErrorBoundary>,
@@ -2533,7 +2535,7 @@ describe('TreeListContext', () => {
2535 ['test-only:', 'React will try to recreate this component tree'],
2536 () => {
2537 utils.act(() =>
2536 - ReactDOM.render(
2538 + legacyRender(
2539 <ErrorBoundary>
2540 <LogsWarning />
2541 </ErrorBoundary>,
@@ -2592,7 +2594,7 @@ describe('TreeListContext', () => {
2594 ['test-only:', 'React will try to recreate this component tree'],
2595 () => {
2596 utils.act(() =>
2595 - ReactDOM.render(
2597 + legacyRender(
2598 <ErrorBoundary>
2599 <BadRender />
2600 </ErrorBoundary>,
packages/react-devtools-shared/src/__tests__/useEditableValue-test.js
+9 -9
@@ -10,15 +10,15 @@
10 describe('useEditableValue', () => {
11 let act;
12 let React;
13 - let ReactDOM;
13 + let legacyRender;
14 let useEditableValue;
15
16 beforeEach(() => {
17 const utils = require('./utils');
18 act = utils.act;
19 + legacyRender = utils.legacyRender;
20
21 React = require('react');
21 - ReactDOM = require('react-dom');
22
23 useEditableValue = require('../devtools/views/hooks').useEditableValue;
24 });
@@ -33,7 +33,7 @@ describe('useEditableValue', () => {
33 }
34
35 const container = document.createElement('div');
36 - ReactDOM.render(<Example />, container);
36 + legacyRender(<Example />, container);
37 expect(state.editableValue).toEqual('NaN');
38 expect(state.externalValue).toEqual(NaN);
39 expect(state.parsedValue).toEqual(NaN);
@@ -51,7 +51,7 @@ describe('useEditableValue', () => {
51 }
52
53 const container = document.createElement('div');
54 - ReactDOM.render(<Example value={1} />, container);
54 + legacyRender(<Example value={1} />, container);
55 expect(state.editableValue).toEqual('1');
56 expect(state.externalValue).toEqual(1);
57 expect(state.parsedValue).toEqual(1);
@@ -60,7 +60,7 @@ describe('useEditableValue', () => {
60
61 // If there are NO pending changes,
62 // an update to the external prop value should override the local/pending value.
63 - ReactDOM.render(<Example value={2} />, container);
63 + legacyRender(<Example value={2} />, container);
64 expect(state.editableValue).toEqual('2');
65 expect(state.externalValue).toEqual(2);
66 expect(state.parsedValue).toEqual(2);
@@ -79,7 +79,7 @@ describe('useEditableValue', () => {
79 }
80
81 const container = document.createElement('div');
82 - ReactDOM.render(<Example value={1} />, container);
82 + legacyRender(<Example value={1} />, container);
83 expect(state.editableValue).toEqual('1');
84 expect(state.externalValue).toEqual(1);
85 expect(state.parsedValue).toEqual(1);
@@ -102,7 +102,7 @@ describe('useEditableValue', () => {
102
103 // If there ARE pending changes,
104 // an update to the external prop value should NOT override the local/pending value.
105 - ReactDOM.render(<Example value={3} />, container);
105 + legacyRender(<Example value={3} />, container);
106 expect(state.editableValue).toEqual('2');
107 expect(state.externalValue).toEqual(3);
108 expect(state.parsedValue).toEqual(2);
@@ -121,7 +121,7 @@ describe('useEditableValue', () => {
121 }
122
123 const container = document.createElement('div');
124 - ReactDOM.render(<Example value={1} />, container);
124 + legacyRender(<Example value={1} />, container);
125 expect(state.editableValue).toEqual('1');
126 expect(state.externalValue).toEqual(1);
127 expect(state.parsedValue).toEqual(1);
@@ -154,7 +154,7 @@ describe('useEditableValue', () => {
154 }
155
156 const container = document.createElement('div');
157 - ReactDOM.render(<Example value={1} />, container);
157 + legacyRender(<Example value={1} />, container);
158 expect(state.editableValue).toEqual('1');
159 expect(state.externalValue).toEqual(1);
160 expect(state.parsedValue).toEqual(1);
packages/react-devtools-shared/src/__tests__/utils.js
+20 -4
@@ -162,6 +162,16 @@ export function getRendererID(): number {
162 return parseInt(id, 10);
163 }
164
165 +export function legacyRender(elements, container) {
166 + const ReactDOM = require('react-dom');
167 + withErrorsOrWarningsIgnored(
168 + ['ReactDOM.render is no longer supported in React 18'],
169 + () => {
170 + ReactDOM.render(elements, container);
171 + },
172 + );
173 +}
174 +
175 export function requireTestRenderer(): ReactTestRenderer {
176 let hook;
177 try {
@@ -228,9 +238,15 @@ export function withErrorsOrWarningsIgnored<T: void | Promise<void>>(
238 errorOrWarningMessages: string[],
239 fn: () => T,
240 ): T {
241 + // withErrorsOrWarningsIgnored() may be nested.
242 + const prev = global._ignoredErrorOrWarningMessages || [];
243 +
244 let resetIgnoredErrorOrWarningMessages = true;
245 try {
233 - global._ignoredErrorOrWarningMessages = errorOrWarningMessages;
246 + global._ignoredErrorOrWarningMessages = [
247 + ...prev,
248 + ...errorOrWarningMessages,
249 + ];
250 const maybeThenable = fn();
251 if (
252 maybeThenable !== undefined &&
@@ -239,16 +255,16 @@ export function withErrorsOrWarningsIgnored<T: void | Promise<void>>(
255 resetIgnoredErrorOrWarningMessages = false;
256 return maybeThenable.then(
257 () => {
242 - global._ignoredErrorOrWarningMessages = [];
258 + global._ignoredErrorOrWarningMessages = prev;
259 },
260 () => {
245 - global._ignoredErrorOrWarningMessages = [];
261 + global._ignoredErrorOrWarningMessages = prev;
262 },
263 );
264 }
265 } finally {
266 if (resetIgnoredErrorOrWarningMessages) {
251 - global._ignoredErrorOrWarningMessages = [];
267 + global._ignoredErrorOrWarningMessages = prev;
268 }
269 }
270 }