`);
- act(() => ReactDOM.render(
, container));
+ act(() => legacyRender(
, container));
expect(store).toMatchInlineSnapshot(`
[root]
▾
`);
- act(() => ReactDOM.render(, container));
+ act(() => legacyRender(, container));
expect(store).toMatchInlineSnapshot(`
[root]
▾
@@ -376,6 +377,14 @@ describe('Store component filters', () => {
console.warn('test-only: render warning');
return null;
}
+
+ // HACK This require() is needed (somewhere in the test) for this case to pass.
+ // Without it, the legacyRender() call below causes this test to fail
+ // because it requires "react-dom" for the first time,
+ // which causes the console error() and warn() methods to be overridden again,
+ // effectively disconnecting the DevTools override in 'react-devtools-shared/src/backend/console'.
+ require('react-dom');
+
const container = document.createElement('div');
utils.withErrorsOrWarningsIgnored(['test-only:'], () => {
act(
@@ -386,7 +395,7 @@ describe('Store component filters', () => {
]),
);
act(() =>
- ReactDOM.render(
+ legacyRender(
diff --git a/packages/react-devtools-shared/src/__tests__/storeOwners-test.js b/packages/react-devtools-shared/src/__tests__/storeOwners-test.js
index c380d8b91a..183245a04f 100644
--- a/packages/react-devtools-shared/src/__tests__/storeOwners-test.js
+++ b/packages/react-devtools-shared/src/__tests__/storeOwners-test.js
@@ -11,8 +11,8 @@ const {printOwnersList} = require('../devtools/utils');
describe('Store owners list', () => {
let React;
- let ReactDOM;
let act;
+ let legacyRender;
let store;
beforeEach(() => {
@@ -20,8 +20,10 @@ describe('Store owners list', () => {
store.collapseNodesByDefault = false;
React = require('react');
- ReactDOM = require('react-dom');
- act = require('./utils').act;
+
+ const utils = require('./utils');
+ act = utils.act;
+ legacyRender = utils.legacyRender;
});
it('should drill through intermediate components', () => {
@@ -36,7 +38,7 @@ describe('Store owners list', () => {
const Leaf = () => Leaf
;
const Intermediate = ({children}) => {children};
- act(() => ReactDOM.render(, document.createElement('div')));
+ act(() => legacyRender(, document.createElement('div')));
expect(store).toMatchSnapshot('1: mount');
const rootID = store.getElementIDAtIndex(0);
@@ -64,7 +66,7 @@ describe('Store owners list', () => {
{children},
];
- act(() => ReactDOM.render(, document.createElement('div')));
+ act(() => legacyRender(, document.createElement('div')));
expect(store).toMatchSnapshot('1: mount');
const rootID = store.getElementIDAtIndex(0);
@@ -96,7 +98,7 @@ describe('Store owners list', () => {
const container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
,
container,
),
@@ -109,7 +111,7 @@ describe('Store owners list', () => {
).toMatchSnapshot('2: components owned by ');
act(() =>
- ReactDOM.render(
+ legacyRender(
,
container,
),
@@ -121,7 +123,7 @@ describe('Store owners list', () => {
).toMatchSnapshot('4: components owned by ');
act(() =>
- ReactDOM.render(
+ legacyRender(
,
container,
),
@@ -133,7 +135,7 @@ describe('Store owners list', () => {
).toMatchSnapshot('6: components owned by ');
act(() =>
- ReactDOM.render(
+ legacyRender(
,
container,
),
@@ -153,7 +155,7 @@ describe('Store owners list', () => {
const Leaf = () => Leaf
;
const container = document.createElement('div');
- act(() => ReactDOM.render(, container));
+ act(() => legacyRender(, container));
expect(store).toMatchSnapshot('1: mount (ascending)');
const rootID = store.getElementIDAtIndex(0);
@@ -161,7 +163,7 @@ describe('Store owners list', () => {
printOwnersList(store.getOwnersListForElement(rootID)),
).toMatchSnapshot('2: components owned by ');
- act(() => ReactDOM.render(, container));
+ act(() => legacyRender(, container));
expect(store).toMatchSnapshot('3: update (descending)');
expect(
diff --git a/packages/react-devtools-shared/src/__tests__/storeStressSync-test.js b/packages/react-devtools-shared/src/__tests__/storeStressSync-test.js
index 587bef95af..f1684b87b7 100644
--- a/packages/react-devtools-shared/src/__tests__/storeStressSync-test.js
+++ b/packages/react-devtools-shared/src/__tests__/storeStressSync-test.js
@@ -14,6 +14,7 @@ describe('StoreStress (Legacy Mode)', () => {
let bridge;
let store;
let print;
+ let legacyRender;
beforeEach(() => {
bridge = global.bridge;
@@ -22,7 +23,10 @@ describe('StoreStress (Legacy Mode)', () => {
React = require('react');
ReactDOM = require('react-dom');
- act = require('./utils').act;
+
+ const utils = require('./utils');
+ act = utils.act;
+ legacyRender = utils.legacyRender;
print = require('./storeSerializer').print;
});
@@ -56,7 +60,7 @@ describe('StoreStress (Legacy Mode)', () => {
// 1. Render a normal version of [a, b, c, d, e].
let container = document.createElement('div');
- act(() => ReactDOM.render({[a, b, c, d, e]}, container));
+ act(() => legacyRender({[a, b, c, d, e]}, container));
expect(store).toMatchSnapshot('1: abcde');
expect(container.textContent).toMatch('abcde');
const snapshotForABCDE = print(store);
@@ -119,7 +123,7 @@ describe('StoreStress (Legacy Mode)', () => {
container = document.createElement('div');
// Verify mounting 'abcde'.
- act(() => ReactDOM.render({cases[i]}, container));
+ act(() => legacyRender({cases[i]}, container));
expect(container.textContent).toMatch('abcde');
expect(print(store)).toEqual(snapshotForABCDE);
@@ -147,7 +151,7 @@ describe('StoreStress (Legacy Mode)', () => {
container = document.createElement('div');
for (let i = 0; i < cases.length; i++) {
// Verify mounting 'abcde'.
- act(() => ReactDOM.render({cases[i]}, container));
+ act(() => legacyRender({cases[i]}, container));
expect(container.textContent).toMatch('abcde');
expect(print(store)).toEqual(snapshotForABCDE);
@@ -210,7 +214,7 @@ describe('StoreStress (Legacy Mode)', () => {
const snapshots = [];
let container = document.createElement('div');
for (let i = 0; i < steps.length; i++) {
- act(() => ReactDOM.render({steps[i]}, container));
+ act(() => legacyRender({steps[i]}, container));
// We snapshot each step once so it doesn't regress.
expect(store).toMatchSnapshot();
snapshots.push(print(store));
@@ -222,11 +226,11 @@ describe('StoreStress (Legacy Mode)', () => {
for (let i = 0; i < steps.length; i++) {
for (let j = 0; j < steps.length; j++) {
container = document.createElement('div');
- act(() => ReactDOM.render({steps[i]}, container));
+ act(() => legacyRender({steps[i]}, container));
expect(print(store)).toMatch(snapshots[i]);
- act(() => ReactDOM.render({steps[j]}, container));
+ act(() => legacyRender({steps[j]}, container));
expect(print(store)).toMatch(snapshots[j]);
- act(() => ReactDOM.render({steps[i]}, container));
+ act(() => legacyRender({steps[i]}, container));
expect(print(store)).toMatch(snapshots[i]);
act(() => ReactDOM.unmountComponentAtNode(container));
expect(print(store)).toBe('');
@@ -238,7 +242,7 @@ describe('StoreStress (Legacy Mode)', () => {
for (let j = 0; j < steps.length; j++) {
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
,
@@ -247,7 +251,7 @@ describe('StoreStress (Legacy Mode)', () => {
);
expect(print(store)).toMatch(snapshots[i]);
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[j]}
,
@@ -256,7 +260,7 @@ describe('StoreStress (Legacy Mode)', () => {
);
expect(print(store)).toMatch(snapshots[j]);
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
,
@@ -312,7 +316,7 @@ describe('StoreStress (Legacy Mode)', () => {
let container = document.createElement('div');
for (let i = 0; i < steps.length; i++) {
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -331,7 +335,7 @@ describe('StoreStress (Legacy Mode)', () => {
// 2. Verify check Suspense can render same steps as initial fallback content.
for (let i = 0; i < steps.length; i++) {
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -355,7 +359,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -367,7 +371,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[j]}
@@ -380,7 +384,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -402,7 +406,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -418,7 +422,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -435,7 +439,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -461,7 +465,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -473,7 +477,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -490,7 +494,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -512,7 +516,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -528,7 +532,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[j]}
@@ -541,7 +545,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -567,7 +571,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -605,7 +609,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Trigger actual fallback.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -633,7 +637,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Switch to primary mode.
act(() =>
- ReactDOM.render(
+ legacyRender(
{steps[i]}
@@ -723,7 +727,7 @@ describe('StoreStress (Legacy Mode)', () => {
let container = document.createElement('div');
for (let i = 0; i < steps.length; i++) {
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -747,7 +751,7 @@ describe('StoreStress (Legacy Mode)', () => {
const fallbackSnapshots = [];
for (let i = 0; i < steps.length; i++) {
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -773,7 +777,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -787,7 +791,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -802,7 +806,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -826,7 +830,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -845,7 +849,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(fallbackSnapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -865,7 +869,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(fallbackSnapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -894,7 +898,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -908,7 +912,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -923,7 +927,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(fallbackSnapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -947,7 +951,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -961,7 +965,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(fallbackSnapshots[i]);
// Re-render with steps[j].
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -976,7 +980,7 @@ describe('StoreStress (Legacy Mode)', () => {
expect(print(store)).toEqual(snapshots[j]);
// Check that we can transition back again.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1000,7 +1004,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Always start with a fresh container and steps[i].
container = document.createElement('div');
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1040,7 +1044,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Trigger actual fallback.
act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1066,7 +1070,7 @@ describe('StoreStress (Legacy Mode)', () => {
// Switch to primary mode.
act(() =>
- ReactDOM.render(
+ legacyRender(
diff --git a/packages/react-devtools-shared/src/__tests__/treeContext-test.js b/packages/react-devtools-shared/src/__tests__/treeContext-test.js
index 36f615c115..0db248c017 100644
--- a/packages/react-devtools-shared/src/__tests__/treeContext-test.js
+++ b/packages/react-devtools-shared/src/__tests__/treeContext-test.js
@@ -20,6 +20,7 @@ describe('TreeListContext', () => {
let ReactDOM;
let TestRenderer: ReactTestRenderer;
let bridge: FrontendBridge;
+ let legacyRender;
let store: Store;
let utils;
let withErrorsOrWarningsIgnored;
@@ -35,6 +36,7 @@ describe('TreeListContext', () => {
utils = require('./utils');
utils.beforeEachProfiling();
+ legacyRender = utils.legacyRender;
withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored;
bridge = global.bridge;
@@ -88,7 +90,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -214,7 +216,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -300,7 +302,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -391,7 +393,7 @@ describe('TreeListContext', () => {
const container = document.createElement('div');
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -425,7 +427,7 @@ describe('TreeListContext', () => {
// Remove the child (which should auto-select the parent)
await utils.actAsync(() =>
- ReactDOM.render(
+ legacyRender(
,
@@ -458,7 +460,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -619,7 +621,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -918,7 +920,7 @@ describe('TreeListContext', () => {
Qux.displayName = `withHOC(${Qux.name})`;
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -990,7 +992,7 @@ describe('TreeListContext', () => {
const Baz = () => null;
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1097,7 +1099,7 @@ describe('TreeListContext', () => {
const container = document.createElement('div');
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1123,7 +1125,7 @@ describe('TreeListContext', () => {
`);
await utils.actAsync(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1158,7 +1160,7 @@ describe('TreeListContext', () => {
const container = document.createElement('div');
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1196,7 +1198,7 @@ describe('TreeListContext', () => {
`);
await utils.actAsync(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1242,7 +1244,7 @@ describe('TreeListContext', () => {
const Child = () => null;
utils.act(() =>
- ReactDOM.render(, document.createElement('div')),
+ legacyRender(, document.createElement('div')),
);
let renderer;
@@ -1283,7 +1285,7 @@ describe('TreeListContext', () => {
const Child = () => null;
const container = document.createElement('div');
- utils.act(() => ReactDOM.render(, container));
+ utils.act(() => legacyRender(, container));
let renderer;
utils.act(() => (renderer = TestRenderer.create()));
@@ -1306,7 +1308,7 @@ describe('TreeListContext', () => {
`);
await utils.actAsync(() =>
- ReactDOM.render(, container),
+ legacyRender(, container),
);
expect(state).toMatchInlineSnapshot(`
[owners]
@@ -1315,7 +1317,7 @@ describe('TreeListContext', () => {
`);
await utils.actAsync(() =>
- ReactDOM.render(, container),
+ legacyRender(, container),
);
expect(state).toMatchInlineSnapshot(`
[owners]
@@ -1329,7 +1331,7 @@ describe('TreeListContext', () => {
const container = document.createElement('div');
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
,
@@ -1353,7 +1355,7 @@ describe('TreeListContext', () => {
→
`);
- await utils.actAsync(() => ReactDOM.render(, container));
+ await utils.actAsync(() => legacyRender(, container));
expect(state).toMatchInlineSnapshot(`
[root]
→
@@ -1386,7 +1388,7 @@ describe('TreeListContext', () => {
);
const container = document.createElement('div');
- utils.act(() => ReactDOM.render(, container));
+ utils.act(() => legacyRender(, container));
let renderer;
utils.act(() => (renderer = TestRenderer.create()));
@@ -1493,7 +1495,7 @@ describe('TreeListContext', () => {
it('should handle when there are no errors/warnings', () => {
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1556,7 +1558,7 @@ describe('TreeListContext', () => {
it('should cycle through the next errors/warnings and wrap around', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1617,7 +1619,7 @@ describe('TreeListContext', () => {
it('should cycle through the previous errors/warnings and wrap around', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1678,14 +1680,14 @@ describe('TreeListContext', () => {
it('should cycle through the next errors/warnings and wrap around with multiple roots', () => {
withErrorsOrWarningsIgnored(['test-only:'], () => {
utils.act(() => {
- ReactDOM.render(
+ legacyRender(
,
,
document.createElement('div'),
);
- ReactDOM.render(
+ legacyRender(
@@ -1748,14 +1750,14 @@ describe('TreeListContext', () => {
it('should cycle through the previous errors/warnings and wrap around with multiple roots', () => {
withErrorsOrWarningsIgnored(['test-only:'], () => {
utils.act(() => {
- ReactDOM.render(
+ legacyRender(
,
,
document.createElement('div'),
);
- ReactDOM.render(
+ legacyRender(
@@ -1818,7 +1820,7 @@ describe('TreeListContext', () => {
it('should select the next or previous element relative to the current selection', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1880,7 +1882,7 @@ describe('TreeListContext', () => {
it('should update correctly when errors/warnings are cleared for a fiber in the list', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1953,7 +1955,7 @@ describe('TreeListContext', () => {
it('should update correctly when errors/warnings are cleared for the currently selected fiber', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -1994,7 +1996,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2028,7 +2030,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2074,7 +2076,7 @@ describe('TreeListContext', () => {
it('should update correctly when all errors/warnings are cleared', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2124,7 +2126,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2174,7 +2176,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2260,7 +2262,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2318,7 +2320,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2354,7 +2356,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2373,7 +2375,7 @@ describe('TreeListContext', () => {
await Promise.resolve();
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
@@ -2404,7 +2406,7 @@ describe('TreeListContext', () => {
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
}>
,
@@ -2425,7 +2427,7 @@ describe('TreeListContext', () => {
await Promise.resolve();
withErrorsOrWarningsIgnored(['test-only:'], () =>
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
}>
,
@@ -2469,7 +2471,7 @@ describe('TreeListContext', () => {
['test-only:', 'React will try to recreate this component tree'],
() => {
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
,
@@ -2533,7 +2535,7 @@ describe('TreeListContext', () => {
['test-only:', 'React will try to recreate this component tree'],
() => {
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
,
@@ -2592,7 +2594,7 @@ describe('TreeListContext', () => {
['test-only:', 'React will try to recreate this component tree'],
() => {
utils.act(() =>
- ReactDOM.render(
+ legacyRender(
,
diff --git a/packages/react-devtools-shared/src/__tests__/useEditableValue-test.js b/packages/react-devtools-shared/src/__tests__/useEditableValue-test.js
index db22d2813e..018089c8fc 100644
--- a/packages/react-devtools-shared/src/__tests__/useEditableValue-test.js
+++ b/packages/react-devtools-shared/src/__tests__/useEditableValue-test.js
@@ -10,15 +10,15 @@
describe('useEditableValue', () => {
let act;
let React;
- let ReactDOM;
+ let legacyRender;
let useEditableValue;
beforeEach(() => {
const utils = require('./utils');
act = utils.act;
+ legacyRender = utils.legacyRender;
React = require('react');
- ReactDOM = require('react-dom');
useEditableValue = require('../devtools/views/hooks').useEditableValue;
});
@@ -33,7 +33,7 @@ describe('useEditableValue', () => {
}
const container = document.createElement('div');
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('NaN');
expect(state.externalValue).toEqual(NaN);
expect(state.parsedValue).toEqual(NaN);
@@ -51,7 +51,7 @@ describe('useEditableValue', () => {
}
const container = document.createElement('div');
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('1');
expect(state.externalValue).toEqual(1);
expect(state.parsedValue).toEqual(1);
@@ -60,7 +60,7 @@ describe('useEditableValue', () => {
// If there are NO pending changes,
// an update to the external prop value should override the local/pending value.
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('2');
expect(state.externalValue).toEqual(2);
expect(state.parsedValue).toEqual(2);
@@ -79,7 +79,7 @@ describe('useEditableValue', () => {
}
const container = document.createElement('div');
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('1');
expect(state.externalValue).toEqual(1);
expect(state.parsedValue).toEqual(1);
@@ -102,7 +102,7 @@ describe('useEditableValue', () => {
// If there ARE pending changes,
// an update to the external prop value should NOT override the local/pending value.
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('2');
expect(state.externalValue).toEqual(3);
expect(state.parsedValue).toEqual(2);
@@ -121,7 +121,7 @@ describe('useEditableValue', () => {
}
const container = document.createElement('div');
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('1');
expect(state.externalValue).toEqual(1);
expect(state.parsedValue).toEqual(1);
@@ -154,7 +154,7 @@ describe('useEditableValue', () => {
}
const container = document.createElement('div');
- ReactDOM.render(, container);
+ legacyRender(, container);
expect(state.editableValue).toEqual('1');
expect(state.externalValue).toEqual(1);
expect(state.parsedValue).toEqual(1);
diff --git a/packages/react-devtools-shared/src/__tests__/utils.js b/packages/react-devtools-shared/src/__tests__/utils.js
index 61a6acc604..74fcebc441 100644
--- a/packages/react-devtools-shared/src/__tests__/utils.js
+++ b/packages/react-devtools-shared/src/__tests__/utils.js
@@ -162,6 +162,16 @@ export function getRendererID(): number {
return parseInt(id, 10);
}
+export function legacyRender(elements, container) {
+ const ReactDOM = require('react-dom');
+ withErrorsOrWarningsIgnored(
+ ['ReactDOM.render is no longer supported in React 18'],
+ () => {
+ ReactDOM.render(elements, container);
+ },
+ );
+}
+
export function requireTestRenderer(): ReactTestRenderer {
let hook;
try {
@@ -228,9 +238,15 @@ export function withErrorsOrWarningsIgnored>(
errorOrWarningMessages: string[],
fn: () => T,
): T {
+ // withErrorsOrWarningsIgnored() may be nested.
+ const prev = global._ignoredErrorOrWarningMessages || [];
+
let resetIgnoredErrorOrWarningMessages = true;
try {
- global._ignoredErrorOrWarningMessages = errorOrWarningMessages;
+ global._ignoredErrorOrWarningMessages = [
+ ...prev,
+ ...errorOrWarningMessages,
+ ];
const maybeThenable = fn();
if (
maybeThenable !== undefined &&
@@ -239,16 +255,16 @@ export function withErrorsOrWarningsIgnored>(
resetIgnoredErrorOrWarningMessages = false;
return maybeThenable.then(
() => {
- global._ignoredErrorOrWarningMessages = [];
+ global._ignoredErrorOrWarningMessages = prev;
},
() => {
- global._ignoredErrorOrWarningMessages = [];
+ global._ignoredErrorOrWarningMessages = prev;
},
);
}
} finally {
if (resetIgnoredErrorOrWarningMessages) {
- global._ignoredErrorOrWarningMessages = [];
+ global._ignoredErrorOrWarningMessages = prev;
}
}
}