Skip to content

Commit ca324ab

Browse files
author
Jack Pope
committed
Use RN global to maintain legacy root behavior
1 parent 72fb32a commit ca324ab

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

packages/react-test-renderer/src/ReactTestRenderer.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,15 +483,18 @@ function create(
483483
}
484484

485485
let createNodeMock = defaultTestOptions.createNodeMock;
486-
let isConcurrent = true;
486+
const isConcurrentOnly =
487+
disableLegacyMode === true &&
488+
global.IS_REACT_NATIVE_TEST_ENVIRONMENT !== true;
489+
let isConcurrent = isConcurrentOnly;
487490
let isStrictMode = false;
488491
let concurrentUpdatesByDefault = null;
489492
if (typeof options === 'object' && options !== null) {
490493
if (typeof options.createNodeMock === 'function') {
491494
// $FlowFixMe[incompatible-type] found when upgrading Flow
492495
createNodeMock = options.createNodeMock;
493496
}
494-
if (disableLegacyMode === false) {
497+
if (!isConcurrentOnly) {
495498
isConcurrent = options.unstable_isConcurrent;
496499
}
497500
if (options.unstable_strictMode === true) {

packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.internal.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ const {format: prettyFormat} = require('pretty-format');
1717
const InternalTestUtils = require('internal-test-utils');
1818
const waitForAll = InternalTestUtils.waitForAll;
1919
const act = InternalTestUtils.act;
20+
const Reconciler = require('react-reconciler/src/ReactFiberReconciler');
21+
const {
22+
ConcurrentRoot,
23+
LegacyRoot,
24+
} = require('react-reconciler/src/ReactRootTags');
2025

2126
// Isolate noop renderer
2227
jest.resetModules();
@@ -65,6 +70,53 @@ describe('ReactTestRenderer', () => {
6570
);
6671
});
6772

73+
describe('root tags', () => {
74+
let createContainerSpy;
75+
beforeEach(() => {
76+
createContainerSpy = jest.spyOn(Reconciler, 'createContainer');
77+
});
78+
79+
function expectTag(tag) {
80+
expect(createContainerSpy).toHaveBeenCalledWith(
81+
expect.anything(),
82+
tag,
83+
null,
84+
expect.anything(),
85+
null,
86+
expect.anything(),
87+
expect.anything(),
88+
null,
89+
);
90+
}
91+
92+
// @gate disableLegacyMode
93+
it('should render using concurrent root if disableLegacyMode', () => {
94+
ReactTestRenderer.create(<div />);
95+
expectTag(ConcurrentRoot);
96+
});
97+
98+
// @gate !disableLegacyMode
99+
it('should default to legacy root if not disableLegacyMode', () => {
100+
ReactTestRenderer.create(<div />);
101+
expectTag(LegacyRoot);
102+
});
103+
104+
it('should allow unstable_isConcurrent if not disableLegacyMode', async () => {
105+
ReactTestRenderer.create(<div />, {
106+
unstable_isConcurrent: true,
107+
});
108+
ReactTestRenderer.create(<div />);
109+
expectTag(ConcurrentRoot);
110+
});
111+
112+
it('should render legacy root when RN test environment', async () => {
113+
global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true;
114+
ReactTestRenderer.create(<div />);
115+
expectTag(LegacyRoot);
116+
global.IS_REACT_NATIVE_TEST_ENVIRONMENT = false;
117+
});
118+
});
119+
68120
it('renders a simple component', async () => {
69121
function Link() {
70122
return <a role="link" />;

0 commit comments

Comments
 (0)