diff --git a/packages/react-devtools-shared/src/__tests__/FastRefreshDevToolsIntegration-test.js b/packages/react-devtools-shared/src/__tests__/FastRefreshDevToolsIntegration-test.js index 6b94016148..b2b4fe9fc9 100644 --- a/packages/react-devtools-shared/src/__tests__/FastRefreshDevToolsIntegration-test.js +++ b/packages/react-devtools-shared/src/__tests__/FastRefreshDevToolsIntegration-test.js @@ -9,13 +9,13 @@ describe('Fast Refresh', () => { let React; - let ReactDOM; let ReactFreshRuntime; let act; let babel; let container; let exportsObj; let freshPlugin; + let legacyRender; let store; let withErrorsOrWarningsIgnored; @@ -37,10 +37,9 @@ describe('Fast Refresh', () => { ReactFreshRuntime = require('react-refresh/runtime'); ReactFreshRuntime.injectIntoGlobalHook(global); - ReactDOM = require('react-dom'); - const utils = require('./utils'); act = utils.act; + legacyRender = utils.legacyRender; withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored; }); @@ -74,7 +73,7 @@ describe('Fast Refresh', () => { function render(source) { const Component = execute(source); act(() => { - ReactDOM.render(, container); + legacyRender(, container); }); // Module initialization shouldn't be counted as a hot update. expect(ReactFreshRuntime.performReactRefresh()).toBe(null); @@ -99,7 +98,7 @@ describe('Fast Refresh', () => { // Here, we'll just force a re-render using the newer type to emulate this. const NextComponent = nextExports.default; act(() => { - ReactDOM.render(, container); + legacyRender(, container); }); } act(() => { diff --git a/packages/react-devtools-shared/src/__tests__/componentStacks-test.js b/packages/react-devtools-shared/src/__tests__/componentStacks-test.js index 3028fc182d..48dbd400a9 100644 --- a/packages/react-devtools-shared/src/__tests__/componentStacks-test.js +++ b/packages/react-devtools-shared/src/__tests__/componentStacks-test.js @@ -25,8 +25,8 @@ function normalizeCodeLocInfo(str) { describe('component stack', () => { let React; - let ReactDOM; let act; + let legacyRender; let mockError; let mockWarn; @@ -44,9 +44,9 @@ describe('component stack', () => { const utils = require('./utils'); act = utils.act; + legacyRender = utils.legacyRender; React = require('react'); - ReactDOM = require('react-dom'); }); it('should log the current component stack along with an error or warning', () => { @@ -60,7 +60,7 @@ describe('component stack', () => { const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(mockError).toHaveBeenCalledWith( 'Test error.', @@ -93,7 +93,7 @@ describe('component stack', () => { }; const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(useEffectCount).toBe(1); diff --git a/packages/react-devtools-shared/src/__tests__/console-test.js b/packages/react-devtools-shared/src/__tests__/console-test.js index 64597597ba..3d539f286a 100644 --- a/packages/react-devtools-shared/src/__tests__/console-test.js +++ b/packages/react-devtools-shared/src/__tests__/console-test.js @@ -9,9 +9,9 @@ describe('console', () => { let React; - let ReactDOM; let act; let fakeConsole; + let legacyRender; let mockError; let mockInfo; let mockLog; @@ -58,10 +58,10 @@ describe('console', () => { }; React = require('react'); - ReactDOM = require('react-dom'); const utils = require('./utils'); act = utils.act; + legacyRender = utils.legacyRender; }); function normalizeCodeLocInfo(str) { @@ -176,7 +176,7 @@ describe('console', () => { return null; }; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockWarn).toHaveBeenCalledTimes(1); expect(mockWarn.mock.calls[0]).toHaveLength(1); @@ -203,7 +203,7 @@ describe('console', () => { return null; }; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockLog).toHaveBeenCalledTimes(1); expect(mockLog.mock.calls[0]).toHaveLength(1); @@ -243,7 +243,7 @@ describe('console', () => { return null; }; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockLog).toHaveBeenCalledTimes(2); expect(mockLog.mock.calls[0]).toHaveLength(1); @@ -298,8 +298,8 @@ describe('console', () => { } const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); + act(() => legacyRender(, container)); expect(mockLog).toHaveBeenCalledTimes(2); expect(mockLog.mock.calls[0]).toHaveLength(1); @@ -350,7 +350,7 @@ describe('console', () => { } } - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockLog).toHaveBeenCalledTimes(1); expect(mockLog.mock.calls[0]).toHaveLength(1); @@ -377,7 +377,7 @@ describe('console', () => { }; unpatchConsole(); - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockWarn).toHaveBeenCalledTimes(1); expect(mockWarn.mock.calls[0]).toHaveLength(1); @@ -391,7 +391,7 @@ describe('console', () => { breakOnWarn: false, showInlineWarningsAndErrors: false, }); - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockWarn).toHaveBeenCalledTimes(2); expect(mockWarn.mock.calls[1]).toHaveLength(2); @@ -435,7 +435,7 @@ describe('console', () => { return null; }; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockLog).toHaveBeenCalledTimes(1); expect(mockLog.mock.calls[0]).toHaveLength(1); @@ -460,7 +460,7 @@ describe('console', () => { return null; }; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(mockWarn).toHaveBeenCalledTimes(1); expect(mockWarn.mock.calls[0][0]).toBe('Symbol:'); diff --git a/packages/react-devtools-shared/src/__tests__/editing-test.js b/packages/react-devtools-shared/src/__tests__/editing-test.js index 1a57927f51..78ab08b786 100644 --- a/packages/react-devtools-shared/src/__tests__/editing-test.js +++ b/packages/react-devtools-shared/src/__tests__/editing-test.js @@ -13,8 +13,8 @@ import type Store from 'react-devtools-shared/src/devtools/store'; describe('editing interface', () => { let PropTypes; let React; - let ReactDOM; let bridge: FrontendBridge; + let legacyRender; let store: Store; let utils; @@ -25,6 +25,8 @@ describe('editing interface', () => { beforeEach(() => { utils = require('./utils'); + legacyRender = utils.legacyRender; + bridge = global.bridge; store = global.store; store.collapseNodesByDefault = false; @@ -32,7 +34,6 @@ describe('editing interface', () => { PropTypes = require('prop-types'); React = require('react'); - ReactDOM = require('react-dom'); }); describe('props', () => { @@ -67,7 +68,7 @@ describe('editing interface', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( <> { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( , container, ), @@ -652,7 +653,7 @@ describe('editing interface', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); hookID = 0; // index @@ -902,7 +903,7 @@ describe('editing interface', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( , diff --git a/packages/react-devtools-shared/src/__tests__/inspectedElement-test.js b/packages/react-devtools-shared/src/__tests__/inspectedElement-test.js index be6a3d7b86..5bec9a74f6 100644 --- a/packages/react-devtools-shared/src/__tests__/inspectedElement-test.js +++ b/packages/react-devtools-shared/src/__tests__/inspectedElement-test.js @@ -31,12 +31,15 @@ describe('InspectedElement', () => { let TestUtilsAct; let TestRendererAct; + let legacyRender; let testRendererInstance; beforeEach(() => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + bridge = global.bridge; store = global.store; store.collapseNodesByDefault = false; @@ -139,7 +142,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -209,7 +212,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( @@ -270,7 +273,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync( - () => ReactDOM.render(, container), + () => legacyRender(, container), false, ); @@ -283,7 +286,7 @@ describe('InspectedElement', () => { `); await utils.actAsync( - () => ReactDOM.render(, container), + () => legacyRender(, container), false, ); @@ -319,7 +322,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( , @@ -349,7 +352,7 @@ describe('InspectedElement', () => { await utils.actAsync( () => - ReactDOM.render( + legacyRender( , @@ -416,7 +419,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { const iterable = generator(); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -693,7 +696,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -718,7 +721,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -755,7 +758,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -834,7 +837,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -889,7 +892,7 @@ describe('InspectedElement', () => { const Example = ({data}) => null; const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -920,7 +923,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( , @@ -1141,7 +1144,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { TestRendererAct(() => { TestUtilsAct(() => { - ReactDOM.render( + legacyRender( { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { TestRendererAct(() => { TestUtilsAct(() => { - ReactDOM.render( + legacyRender( { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render( + legacyRender( { `); TestUtilsAct(() => { - ReactDOM.render( + legacyRender( { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -1573,7 +1576,7 @@ describe('InspectedElement', () => { }; await utils.actAsync(() => - ReactDOM.render( + legacyRender( , document.createElement('div'), ), @@ -1632,7 +1635,7 @@ describe('InspectedElement', () => { }; await utils.actAsync(() => - ReactDOM.render( + legacyRender( , document.createElement('div'), ), @@ -1707,7 +1710,7 @@ describe('InspectedElement', () => { const bigInt = BigInt(123); // eslint-disable-line no-undef await utils.actAsync(() => - ReactDOM.render( + legacyRender( { } await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const {hooks} = await inspectElementAtIndex(0); @@ -1826,7 +1829,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); const inspectedElement = await inspectElementAtIndex(0); @@ -1860,7 +1863,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await inspectElementAtIndex(0); @@ -1893,7 +1896,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await inspectElementAtIndex(0); @@ -1926,7 +1929,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await inspectElementAtIndex(0); @@ -1963,7 +1966,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await inspectElementAtIndex(0); @@ -2030,7 +2033,7 @@ describe('InspectedElement', () => { await withErrorsOrWarningsIgnored(['test-only: '], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }); @@ -2066,7 +2069,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }); const data = await getErrorsAndWarningsForElementAtIndex(0); @@ -2102,7 +2105,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }); @@ -2139,7 +2142,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }); @@ -2172,7 +2175,7 @@ describe('InspectedElement', () => { ['Warning: Each child in a list should have a unique "key" prop.'], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }, ); @@ -2202,7 +2205,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); }); @@ -2233,7 +2236,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render( + legacyRender( @@ -2330,7 +2333,7 @@ describe('InspectedElement', () => { const container = document.createElement('div'); await utils.withErrorsOrWarningsIgnored(['test-only:'], async () => { await utils.actAsync(() => - ReactDOM.render( + legacyRender( @@ -2433,7 +2436,7 @@ describe('InspectedElement', () => { const Example = () => 'example'; await utils.actAsync(() => - ReactDOM.render( + legacyRender( , @@ -2486,7 +2489,9 @@ describe('InspectedElement', () => { await toggleError(true); // we are in error state now, won't show up - expect(store.getElementIDAtIndex(1)).toBe(null); + withErrorsOrWarningsIgnored(['Invalid index'], () => { + expect(store.getElementIDAtIndex(1)).toBe(null); + }); // Inpsect to toggle off the error state inspectedElement = await inspect(0); diff --git a/packages/react-devtools-shared/src/__tests__/ownersListContext-test.js b/packages/react-devtools-shared/src/__tests__/ownersListContext-test.js index 27b75afdd3..774b8ee663 100644 --- a/packages/react-devtools-shared/src/__tests__/ownersListContext-test.js +++ b/packages/react-devtools-shared/src/__tests__/ownersListContext-test.js @@ -14,9 +14,9 @@ import type Store from 'react-devtools-shared/src/devtools/store'; describe('OwnersListContext', () => { let React; - let ReactDOM; let TestRenderer: ReactTestRenderer; let bridge: FrontendBridge; + let legacyRender; let store: Store; let utils; @@ -30,12 +30,13 @@ describe('OwnersListContext', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + bridge = global.bridge; store = global.store; store.collapseNodesByDefault = false; React = require('react'); - ReactDOM = require('react-dom'); TestRenderer = utils.requireTestRenderer(); BridgeContext = require('react-devtools-shared/src/devtools/views/context') @@ -73,7 +74,7 @@ describe('OwnersListContext', () => { const Child = () => null; utils.act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('mount'); @@ -132,7 +133,7 @@ describe('OwnersListContext', () => { const Child = () => null; utils.act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('mount'); @@ -170,7 +171,7 @@ describe('OwnersListContext', () => { const Parent = () => null; utils.act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('mount'); @@ -211,7 +212,7 @@ describe('OwnersListContext', () => { }; utils.act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); let didFinish = false; diff --git a/packages/react-devtools-shared/src/__tests__/profilerContext-test.js b/packages/react-devtools-shared/src/__tests__/profilerContext-test.js index 21c2b2427b..7a62f415ce 100644 --- a/packages/react-devtools-shared/src/__tests__/profilerContext-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilerContext-test.js @@ -18,6 +18,7 @@ describe('ProfilerContext', () => { let ReactDOM; let TestRenderer: ReactTestRenderer; let bridge: FrontendBridge; + let legacyRender; let store: Store; let utils; @@ -33,6 +34,8 @@ describe('ProfilerContext', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + bridge = global.bridge; store = global.store; store.collapseNodesByDefault = false; @@ -96,10 +99,10 @@ describe('ProfilerContext', () => { const containerA = document.createElement('div'); const containerB = document.createElement('div'); - await utils.actAsync(() => ReactDOM.render(, containerA)); + await utils.actAsync(() => legacyRender(, containerA)); expect(context.supportsProfiling).toBe(true); - await utils.actAsync(() => ReactDOM.render(, containerB)); + await utils.actAsync(() => legacyRender(, containerB)); await utils.actAsync(() => ReactDOM.unmountComponentAtNode(containerA)); expect(context.supportsProfiling).toBe(true); @@ -110,9 +113,7 @@ describe('ProfilerContext', () => { it('should gracefully handle an empty profiling session (with no recorded commits)', async () => { const Example = () => null; - utils.act(() => - ReactDOM.render(, document.createElement('div')), - ); + utils.act(() => legacyRender(, document.createElement('div'))); let context: Context = ((null: any): Context); @@ -150,14 +151,14 @@ describe('ProfilerContext', () => { const containerOne = document.createElement('div'); const containerTwo = document.createElement('div'); - utils.act(() => ReactDOM.render(, containerOne)); - utils.act(() => ReactDOM.render(, containerTwo)); + utils.act(() => legacyRender(, containerOne)); + utils.act(() => legacyRender(, containerTwo)); expect(store).toMatchSnapshot('mounted'); // Profile and record updates to both roots. await utils.actAsync(() => store.profilerStore.startProfiling()); - await utils.actAsync(() => ReactDOM.render(, containerOne)); - await utils.actAsync(() => ReactDOM.render(, containerTwo)); + await utils.actAsync(() => legacyRender(, containerOne)); + await utils.actAsync(() => legacyRender(, containerTwo)); await utils.actAsync(() => store.profilerStore.stopProfiling()); let context: Context = ((null: any): Context); @@ -189,13 +190,13 @@ describe('ProfilerContext', () => { const containerOne = document.createElement('div'); const containerTwo = document.createElement('div'); - utils.act(() => ReactDOM.render(, containerOne)); - utils.act(() => ReactDOM.render(, containerTwo)); + utils.act(() => legacyRender(, containerOne)); + utils.act(() => legacyRender(, containerTwo)); expect(store).toMatchSnapshot('mounted'); // Profile and record updates to only the first root. await utils.actAsync(() => store.profilerStore.startProfiling()); - await utils.actAsync(() => ReactDOM.render(, containerOne)); + await utils.actAsync(() => legacyRender(, containerOne)); await utils.actAsync(() => store.profilerStore.stopProfiling()); let context: Context = ((null: any): Context); @@ -228,14 +229,14 @@ describe('ProfilerContext', () => { const containerA = document.createElement('div'); const containerB = document.createElement('div'); - utils.act(() => ReactDOM.render(, containerA)); - utils.act(() => ReactDOM.render(, containerB)); + utils.act(() => legacyRender(, containerA)); + utils.act(() => legacyRender(, containerB)); expect(store).toMatchSnapshot('mounted'); // Profile and record updates. await utils.actAsync(() => store.profilerStore.startProfiling()); - await utils.actAsync(() => ReactDOM.render(, containerA)); - await utils.actAsync(() => ReactDOM.render(, containerB)); + await utils.actAsync(() => legacyRender(, containerA)); + await utils.actAsync(() => legacyRender(, containerB)); await utils.actAsync(() => store.profilerStore.stopProfiling()); let context: Context = ((null: any): Context); @@ -263,8 +264,8 @@ describe('ProfilerContext', () => { // Profile and record more updates to both roots await utils.actAsync(() => store.profilerStore.startProfiling()); - await utils.actAsync(() => ReactDOM.render(, containerA)); - await utils.actAsync(() => ReactDOM.render(, containerB)); + await utils.actAsync(() => legacyRender(, containerA)); + await utils.actAsync(() => legacyRender(, containerB)); await utils.actAsync(() => store.profilerStore.stopProfiling()); const otherID = ((store.getElementIDAtIndex(0): any): number); @@ -287,7 +288,7 @@ describe('ProfilerContext', () => { const container = document.createElement('div'); utils.act(() => - ReactDOM.render(, container), + legacyRender(, container), ); expect(store).toMatchSnapshot('mounted'); @@ -297,10 +298,10 @@ describe('ProfilerContext', () => { // Profile and record updates. await utils.actAsync(() => store.profilerStore.startProfiling()); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await utils.actAsync(() => - ReactDOM.render(, container), + legacyRender(, container), ); await utils.actAsync(() => store.profilerStore.stopProfiling()); diff --git a/packages/react-devtools-shared/src/__tests__/profilerStore-test.js b/packages/react-devtools-shared/src/__tests__/profilerStore-test.js index 7799756aed..ea81b1dcee 100644 --- a/packages/react-devtools-shared/src/__tests__/profilerStore-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilerStore-test.js @@ -12,6 +12,7 @@ import type Store from 'react-devtools-shared/src/devtools/store'; describe('ProfilerStore', () => { let React; let ReactDOM; + let legacyRender; let store: Store; let utils; @@ -19,6 +20,8 @@ describe('ProfilerStore', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + store = global.store; store.collapseNodesByDefault = false; store.recordChangeDescriptions = true; @@ -38,15 +41,15 @@ describe('ProfilerStore', () => { const containerB = document.createElement('div'); utils.act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); utils.act(() => store.profilerStore.startProfiling()); utils.act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); utils.act(() => store.profilerStore.stopProfiling()); @@ -96,7 +99,7 @@ describe('ProfilerStore', () => { // It's important that this test uses legacy sync mode. // The root API does not trigger this particular failing case. - ReactDOM.render(, container); + legacyRender(, container); utils.act(() => store.profilerStore.startProfiling()); @@ -151,7 +154,7 @@ describe('ProfilerStore', () => { // It's important that this test uses legacy sync mode. // The root API does not trigger this particular failing case. - ReactDOM.render(, container); + legacyRender(, container); utils.act(() => store.profilerStore.startProfiling()); utils.act(() => diff --git a/packages/react-devtools-shared/src/__tests__/profilingCache-test.js b/packages/react-devtools-shared/src/__tests__/profilingCache-test.js index 0b7273054c..ace43294e9 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingCache-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingCache-test.js @@ -18,6 +18,7 @@ describe('ProfilingCache', () => { let Scheduler; let TestRenderer: ReactTestRenderer; let bridge: FrontendBridge; + let legacyRender; let store: Store; let utils; @@ -25,6 +26,8 @@ describe('ProfilingCache', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + bridge = global.bridge; store = global.store; store.collapseNodesByDefault = false; @@ -60,14 +63,14 @@ describe('ProfilingCache', () => { const containerB = document.createElement('div'); const containerC = document.createElement('div'); - utils.act(() => ReactDOM.render(, containerA)); - utils.act(() => ReactDOM.render(, containerB)); + utils.act(() => legacyRender(, containerA)); + utils.act(() => legacyRender(, containerB)); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, containerA)); - utils.act(() => ReactDOM.render(, containerC)); - utils.act(() => ReactDOM.render(, containerA)); + utils.act(() => legacyRender(, containerA)); + utils.act(() => legacyRender(, containerC)); + utils.act(() => legacyRender(, containerA)); utils.act(() => ReactDOM.unmountComponentAtNode(containerB)); - utils.act(() => ReactDOM.render(, containerA)); + utils.act(() => legacyRender(, containerA)); utils.act(() => store.profilerStore.stopProfiling()); const allProfilingDataForRoots = []; @@ -143,10 +146,10 @@ describe('ProfilingCache', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); const allCommitData = []; @@ -248,16 +251,16 @@ describe('ProfilingCache', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); expect(instance).not.toBeNull(); utils.act(() => (instance: any).setState({count: 1})); utils.act(() => - ReactDOM.render(, container), + legacyRender(, container), ); utils.act(() => - ReactDOM.render(, container), + legacyRender(, container), ); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); const allCommitData = []; @@ -346,7 +349,7 @@ describe('ProfilingCache', () => { utils.act(() => store.profilerStore.startProfiling()); utils.act(() => - ReactDOM.render( + legacyRender( , @@ -356,7 +359,7 @@ describe('ProfilingCache', () => { // Second render has no changed hooks, only changed props. utils.act(() => - ReactDOM.render( + legacyRender( , @@ -373,7 +376,7 @@ describe('ProfilingCache', () => { // Fifth render has a changed context value, but no changed hook. // Technically, DevTools will miss this "context" change since it only tracks legacy context. utils.act(() => - ReactDOM.render( + legacyRender( , @@ -453,7 +456,7 @@ describe('ProfilingCache', () => { utils.act(() => store.profilerStore.startProfiling()); utils.act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); utils.act(() => store.profilerStore.stopProfiling()); @@ -508,7 +511,7 @@ describe('ProfilingCache', () => { utils.act(() => store.profilerStore.startProfiling()); await utils.actAsync(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); utils.act(() => store.profilerStore.stopProfiling()); @@ -558,9 +561,9 @@ describe('ProfilingCache', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); const allFiberCommits = []; @@ -624,7 +627,7 @@ describe('ProfilingCache', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); function Validator({commitIndex, rootID}) { @@ -721,7 +724,7 @@ describe('ProfilingCache', () => { const {Simulate} = require('react-dom/test-utils'); const container = document.createElement('div'); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); expect(container.textContent).toBe('Home'); utils.act(() => store.profilerStore.startProfiling()); utils.act(() => Simulate.click(linkRef.current)); diff --git a/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js b/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js index b16e38f88c..16b42f3908 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingCharts-test.js @@ -12,9 +12,9 @@ import type Store from 'react-devtools-shared/src/devtools/store'; describe('profiling charts', () => { let React; - let ReactDOM; let Scheduler; let TestRenderer: TestRendererType; + let legacyRender; let store: Store; let utils; @@ -22,12 +22,13 @@ describe('profiling charts', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + store = global.store; store.collapseNodesByDefault = false; store.recordChangeDescriptions = true; React = require('react'); - ReactDOM = require('react-dom'); Scheduler = require('scheduler'); TestRenderer = utils.requireTestRenderer(); }); @@ -54,8 +55,8 @@ describe('profiling charts', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); let renderFinished = false; @@ -120,8 +121,8 @@ describe('profiling charts', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); let renderFinished = false; diff --git a/packages/react-devtools-shared/src/__tests__/profilingCommitTreeBuilder-test.js b/packages/react-devtools-shared/src/__tests__/profilingCommitTreeBuilder-test.js index 1f9c97d0df..9923fb33aa 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingCommitTreeBuilder-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingCommitTreeBuilder-test.js @@ -15,6 +15,7 @@ describe('commit tree', () => { let ReactDOM; let Scheduler; let TestRenderer: TestRendererType; + let legacyRender; let store: Store; let utils; @@ -22,6 +23,8 @@ describe('commit tree', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + store = global.store; store.collapseNodesByDefault = false; store.recordChangeDescriptions = true; @@ -47,10 +50,10 @@ describe('commit tree', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); - utils.act(() => ReactDOM.render(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); let renderFinished = false; @@ -108,16 +111,10 @@ describe('commit tree', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => - ReactDOM.render(, container), - ); + utils.act(() => legacyRender(, container)); await Promise.resolve(); - utils.act(() => - ReactDOM.render(, container), - ); - utils.act(() => - ReactDOM.render(, container), - ); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); let renderFinished = false; @@ -189,12 +186,8 @@ describe('commit tree', () => { const container = document.createElement('div'); utils.act(() => store.profilerStore.startProfiling()); - utils.act(() => - ReactDOM.render(, container), - ); - utils.act(() => - ReactDOM.render(, container), - ); + utils.act(() => legacyRender(, container)); + utils.act(() => legacyRender(, container)); utils.act(() => store.profilerStore.stopProfiling()); let renderFinished = false; diff --git a/packages/react-devtools-shared/src/__tests__/profilingHostRoot-test.js b/packages/react-devtools-shared/src/__tests__/profilingHostRoot-test.js index cfcff6bad4..61dc9f6bfd 100644 --- a/packages/react-devtools-shared/src/__tests__/profilingHostRoot-test.js +++ b/packages/react-devtools-shared/src/__tests__/profilingHostRoot-test.js @@ -11,10 +11,10 @@ describe('profiling HostRoot', () => { let React; let ReactDOM; let Scheduler; + let legacyRender; let store: Store; let utils; let getEffectDurations; - let effectDurations; let passiveEffectDurations; @@ -22,6 +22,8 @@ describe('profiling HostRoot', () => { utils = require('./utils'); utils.beforeEachProfiling(); + legacyRender = utils.legacyRender; + getEffectDurations = require('../backend/utils').getEffectDurations; store = global.store; @@ -61,7 +63,7 @@ describe('profiling HostRoot', () => { utils.act(() => store.profilerStore.startProfiling()); utils.act(() => { const container = document.createElement('div'); - ReactDOM.render(, container); + legacyRender(, container); }); utils.act(() => store.profilerStore.stopProfiling()); diff --git a/packages/react-devtools-shared/src/__tests__/store-test.js b/packages/react-devtools-shared/src/__tests__/store-test.js index 04f14a41a9..02cea3d925 100644 --- a/packages/react-devtools-shared/src/__tests__/store-test.js +++ b/packages/react-devtools-shared/src/__tests__/store-test.js @@ -14,6 +14,7 @@ describe('Store', () => { let act; let bridge; let getRendererID; + let legacyRender; let store; let withErrorsOrWarningsIgnored; @@ -28,6 +29,7 @@ describe('Store', () => { const utils = require('./utils'); act = utils.act; getRendererID = utils.getRendererID; + legacyRender = utils.legacyRender; withErrorsOrWarningsIgnored = utils.withErrorsOrWarningsIgnored; }); @@ -35,7 +37,7 @@ describe('Store', () => { const Component = () =>
Hi
; act(() => - ReactDOM.render(, document.createElement('div')), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('1: mount'); @@ -53,10 +55,10 @@ describe('Store', () => { const container = document.createElement('div'); - act(() => ReactDOM.render({null}, container)); + act(() => legacyRender({null}, container)); expect(store).toMatchSnapshot('1: mount'); - act(() => ReactDOM.render(
, container)); + act(() => legacyRender(
, container)); expect(store).toMatchSnapshot('2: add host nodes'); }); @@ -81,7 +83,7 @@ describe('Store', () => { const container = document.createElement('div'); act(() => - ReactDOM.render( + legacyRender( <> @@ -117,10 +119,10 @@ describe('Store', () => { const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('1: mount'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('2: update'); act(() => ReactDOM.unmountComponentAtNode(container)); @@ -136,14 +138,14 @@ describe('Store', () => { const containerB = document.createElement('div'); act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); expect(store).toMatchSnapshot('1: mount'); act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); expect(store).toMatchSnapshot('2: update'); @@ -171,10 +173,7 @@ describe('Store', () => { const Child = () =>
Hi!
; act(() => - ReactDOM.render( - , - document.createElement('div'), - ), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('1: mount'); }); @@ -201,11 +200,11 @@ describe('Store', () => { ); const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('1: loading'); act(() => { - ReactDOM.render(, container); + legacyRender(, container); }); expect(store).toMatchSnapshot('2: resolved'); }); @@ -251,7 +250,7 @@ describe('Store', () => { const container = document.createElement('div'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('1: third child is suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('2: first and third child are suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('3: second and third child are suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('4: first and third child are suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('5: parent is suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('6: all children are suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('9: parent is suspended'); act(() => - ReactDOM.render( + legacyRender( { ); expect(store).toMatchSnapshot('12: all children are suspended'); act(() => - ReactDOM.render( + legacyRender( { const Child = () =>
Hi!
; act(() => - ReactDOM.render( - , - document.createElement('div'), - ), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('1: mount'); @@ -468,10 +464,10 @@ describe('Store', () => { const container = document.createElement('div'); - act(() => ReactDOM.render({[foo, bar]}, container)); + act(() => legacyRender({[foo, bar]}, container)); expect(store).toMatchSnapshot('1: mount'); - act(() => ReactDOM.render({[bar, foo]}, container)); + act(() => legacyRender({[bar, foo]}, container)); expect(store).toMatchSnapshot('3: reorder children'); act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), true)); @@ -495,7 +491,7 @@ describe('Store', () => { const container = document.createElement('div'); act(() => - ReactDOM.render( + legacyRender( @@ -506,7 +502,7 @@ describe('Store', () => { expect(store).toMatchSnapshot('1: mount'); act(() => - ReactDOM.render( + legacyRender( @@ -529,14 +525,14 @@ describe('Store', () => { const containerB = document.createElement('div'); act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); expect(store).toMatchSnapshot('1: mount'); act(() => { - ReactDOM.render(, containerA); - ReactDOM.render(, containerB); + legacyRender(, containerA); + legacyRender(, containerB); }); expect(store).toMatchSnapshot('2: update'); @@ -564,10 +560,7 @@ describe('Store', () => { const Child = () =>
Hi!
; act(() => - ReactDOM.render( - , - document.createElement('div'), - ), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('1: mount'); @@ -600,7 +593,7 @@ describe('Store', () => { ); const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('1: loading'); // This test isn't meaningful unless we expand the suspended tree @@ -609,7 +602,7 @@ describe('Store', () => { expect(store).toMatchSnapshot('2: expand Wrapper and Suspense'); act(() => { - ReactDOM.render(, container); + legacyRender(, container); }); expect(store).toMatchSnapshot('2: resolved'); }); @@ -626,10 +619,7 @@ describe('Store', () => { const Child = () =>
Hi!
; act(() => - ReactDOM.render( - , - document.createElement('div'), - ), + legacyRender(, document.createElement('div')), ); expect(store).toMatchSnapshot('1: mount'); @@ -671,7 +661,7 @@ describe('Store', () => { const ref = React.createRef(); act(() => - ReactDOM.render( + legacyRender( , document.createElement('div'), ), @@ -711,10 +701,10 @@ describe('Store', () => { const container = document.createElement('div'); - act(() => ReactDOM.render({[foo, bar]}, container)); + act(() => legacyRender({[foo, bar]}, container)); expect(store).toMatchSnapshot('1: mount'); - act(() => ReactDOM.render({[bar, foo]}, container)); + act(() => legacyRender({[bar, foo]}, container)); expect(store).toMatchSnapshot('3: reorder children'); act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), false)); @@ -743,9 +733,7 @@ describe('Store', () => { const Parent = () => ; const Child = () => null; - act(() => - ReactDOM.render(, document.createElement('div')), - ); + act(() => legacyRender(, document.createElement('div'))); expect(store).toMatchSnapshot('1: mount'); act(() => store.toggleIsCollapsed(store.getElementIDAtIndex(0), false)); @@ -790,9 +778,7 @@ describe('Store', () => { const Parent = () => ; const Child = () => null; - act(() => - ReactDOM.render(, document.createElement('div')), - ); + act(() => legacyRender(, document.createElement('div'))); for (let i = 0; i < store.numElements; i++) { expect(store.getIndexOfElementID(store.getElementIDAtIndex(i))).toBe(i); @@ -805,8 +791,8 @@ describe('Store', () => { const Child = () => null; act(() => { - ReactDOM.render(, document.createElement('div')); - ReactDOM.render(, document.createElement('div')); + legacyRender(, document.createElement('div')); + legacyRender(, document.createElement('div')); }); for (let i = 0; i < store.numElements; i++) { @@ -820,7 +806,7 @@ describe('Store', () => { const Child = () => null; act(() => - ReactDOM.render( + legacyRender( @@ -840,14 +826,14 @@ describe('Store', () => { const Child = () => null; act(() => { - ReactDOM.render( + legacyRender( , document.createElement('div'), ); - ReactDOM.render( + legacyRender( @@ -870,10 +856,10 @@ describe('Store', () => { expect(store.supportsProfiling).toBe(false); - act(() => ReactDOM.render(, containerA)); + act(() => legacyRender(, containerA)); expect(store.supportsProfiling).toBe(true); - act(() => ReactDOM.render(, containerB)); + act(() => legacyRender(, containerB)); act(() => ReactDOM.unmountComponentAtNode(containerA)); expect(store.supportsProfiling).toBe(true); @@ -888,7 +874,7 @@ describe('Store', () => { // This is pretty hacky. const fauxElement = Object.assign({}, , {key: 123}); - act(() => ReactDOM.render([fauxElement], document.createElement('div'))); + act(() => legacyRender([fauxElement], document.createElement('div'))); expect(store).toMatchSnapshot('1: mount'); }); @@ -949,12 +935,12 @@ describe('Store', () => { const container = document.createElement('div'); // Render once to start fetching the lazy component - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); await Promise.resolve(); // Render again after it resolves - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchInlineSnapshot(` [root] @@ -1004,19 +990,19 @@ describe('Store', () => { const container = document.createElement('div'); // Render once to start fetching the lazy component - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('1: mounted + loading'); await Promise.resolve(); // Render again after it resolves - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('2: mounted + loaded'); // Render again to unmount it - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('3: unmounted'); }); @@ -1047,12 +1033,12 @@ describe('Store', () => { const container = document.createElement('div'); // Render once to start fetching the lazy component - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('1: mounted + loading'); // Render again to unmount it before it finishes loading - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchSnapshot('2: unmounted'); }); @@ -1083,7 +1069,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }); expect(store).toMatchInlineSnapshot(` @@ -1093,7 +1079,7 @@ describe('Store', () => { `); withErrorsOrWarningsIgnored(['test-only:'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }); expect(store).toMatchInlineSnapshot(` @@ -1114,7 +1100,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }); expect(store).toMatchInlineSnapshot(` @@ -1124,7 +1110,7 @@ describe('Store', () => { `); withErrorsOrWarningsIgnored(['test-only:'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }); expect(store).toMatchInlineSnapshot(` @@ -1156,7 +1142,7 @@ describe('Store', () => { withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => { - ReactDOM.render(, container); + legacyRender(, container); }, false); }); flushPendingBridgeOperations(); @@ -1194,7 +1180,7 @@ describe('Store', () => { withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => { - ReactDOM.render( + legacyRender( <> , @@ -1209,7 +1195,7 @@ describe('Store', () => { // Before warnings and errors have flushed, flush another commit. act(() => { - ReactDOM.render( + legacyRender( <> @@ -1252,7 +1238,7 @@ describe('Store', () => { withErrorsOrWarningsIgnored( ['Warning: Each child in a list should have a unique "key" prop'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }, ); @@ -1273,7 +1259,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( @@ -1314,7 +1300,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( @@ -1359,7 +1345,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( @@ -1412,7 +1398,7 @@ describe('Store', () => { const container = document.createElement('div'); withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( @@ -1432,7 +1418,7 @@ describe('Store', () => { withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( @@ -1450,7 +1436,7 @@ describe('Store', () => { withErrorsOrWarningsIgnored(['test-only:'], () => { act(() => - ReactDOM.render( + legacyRender( , @@ -1465,7 +1451,7 @@ describe('Store', () => { `); withErrorsOrWarningsIgnored(['test-only:'], () => { - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); }); expect(store).toMatchInlineSnapshot(`[root]`); expect(store.errorCount).toBe(0); diff --git a/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js b/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js index 7468eb48d1..baa19e0787 100644 --- a/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js +++ b/packages/react-devtools-shared/src/__tests__/storeComponentFilters-test.js @@ -12,9 +12,9 @@ import type Store from 'react-devtools-shared/src/devtools/store'; describe('Store component filters', () => { let React; - let ReactDOM; let Types; let bridge: FrontendBridge; + let legacyRender; let store: Store; let utils; let internalAct; @@ -34,10 +34,11 @@ describe('Store component filters', () => { store.recordChangeDescriptions = true; React = require('react'); - ReactDOM = require('react-dom'); Types = require('react-devtools-shared/src/types'); utils = require('./utils'); internalAct = require('jest-react').act; + + legacyRender = utils.legacyRender; }); it('should throw if filters are updated while profiling', () => { @@ -56,7 +57,7 @@ describe('Store component filters', () => { const FunctionComponent = () =>
Hi
; act(() => - ReactDOM.render( + legacyRender( , @@ -137,7 +138,7 @@ describe('Store component filters', () => { it('should ignore invalid ElementTypeRoot filter', () => { const Component = () =>
Hi
; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(store).toMatchInlineSnapshot(` [root] ▾ @@ -165,7 +166,7 @@ describe('Store component filters', () => { const Baz = () => ; act(() => - ReactDOM.render( + legacyRender( @@ -221,7 +222,7 @@ describe('Store component filters', () => { it('should filter by path', () => { const Component = () =>
Hi
; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(store).toMatchInlineSnapshot(` [root] ▾ @@ -258,7 +259,7 @@ describe('Store component filters', () => { const Bar = () => ; Bar.displayName = 'Bar(Foo(Component))'; - act(() => ReactDOM.render(, document.createElement('div'))); + act(() => legacyRender(, document.createElement('div'))); expect(store).toMatchInlineSnapshot(` [root] ▾ [Bar][Foo] @@ -337,7 +338,7 @@ describe('Store component filters', () => { ]; const container = document.createElement('div'); - act(() => ReactDOM.render(, container)); + act(() => legacyRender(, container)); expect(store).toMatchInlineSnapshot(` [root] ▾ @@ -345,14 +346,14 @@ describe('Store component filters', () => {
`); - 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; } } }