8
8
*/
9
9
10
10
import type Store from 'react-devtools-shared/src/devtools/store' ;
11
+ import {
12
+ getLegacyRenderImplementation ,
13
+ getModernRenderImplementation ,
14
+ } from './utils' ;
11
15
12
16
describe ( 'commit tree' , ( ) => {
13
17
let React ;
14
- let ReactDOMClient ;
15
18
let Scheduler ;
16
- let legacyRender ;
17
19
let store : Store ;
18
20
let utils ;
19
21
20
22
beforeEach ( ( ) => {
21
23
utils = require ( './utils' ) ;
22
24
utils . beforeEachProfiling ( ) ;
23
25
24
- legacyRender = utils . legacyRender ;
25
-
26
26
store = global . store ;
27
27
store . collapseNodesByDefault = false ;
28
28
store . recordChangeDescriptions = true ;
29
29
30
30
React = require ( 'react' ) ;
31
- ReactDOMClient = require ( 'react-dom/client' ) ;
32
31
Scheduler = require ( 'scheduler' ) ;
33
32
} ) ;
34
33
34
+ const { render : legacyRender } = getLegacyRenderImplementation ( ) ;
35
+ const { render : modernRender } = getModernRenderImplementation ( ) ;
36
+
35
37
// @reactVersion >= 16.9
38
+ // @reactVersion < 19
36
39
it ( 'should be able to rebuild the store tree for each commit' , ( ) => {
37
40
const Parent = ( { count} ) => {
38
41
Scheduler . unstable_advanceTime ( 10 ) ;
@@ -45,31 +48,29 @@ describe('commit tree', () => {
45
48
return null ;
46
49
} ) ;
47
50
48
- const container = document . createElement ( 'div' ) ;
49
-
50
51
utils . act ( ( ) => store . profilerStore . startProfiling ( ) ) ;
51
- utils . act ( ( ) => legacyRender ( < Parent count = { 1 } /> , container ) ) ;
52
+ utils . act ( ( ) => legacyRender ( < Parent count = { 1 } /> ) ) ;
52
53
expect ( store ) . toMatchInlineSnapshot ( `
53
54
[root]
54
55
▾ <Parent>
55
56
<Child key="0"> [Memo]
56
57
` ) ;
57
- utils . act ( ( ) => legacyRender ( < Parent count = { 3 } /> , container ) ) ;
58
+ utils . act ( ( ) => legacyRender ( < Parent count = { 3 } /> ) ) ;
58
59
expect ( store ) . toMatchInlineSnapshot ( `
59
60
[root]
60
61
▾ <Parent>
61
62
<Child key="0"> [Memo]
62
63
<Child key="1"> [Memo]
63
64
<Child key="2"> [Memo]
64
65
` ) ;
65
- utils . act ( ( ) => legacyRender ( < Parent count = { 2 } /> , container ) ) ;
66
+ utils . act ( ( ) => legacyRender ( < Parent count = { 2 } /> ) ) ;
66
67
expect ( store ) . toMatchInlineSnapshot ( `
67
68
[root]
68
69
▾ <Parent>
69
70
<Child key="0"> [Memo]
70
71
<Child key="1"> [Memo]
71
72
` ) ;
72
- utils . act ( ( ) => legacyRender ( < Parent count = { 0 } /> , container ) ) ;
73
+ utils . act ( ( ) => legacyRender ( < Parent count = { 0 } /> ) ) ;
73
74
expect ( store ) . toMatchInlineSnapshot ( `
74
75
[root]
75
76
<Parent>
@@ -118,25 +119,24 @@ describe('commit tree', () => {
118
119
} ) ;
119
120
120
121
// @reactVersion >= 16.9
122
+ // @reactVersion < 19
121
123
it ( 'should support Lazy components (legacy render)' , async ( ) => {
122
- const container = document . createElement ( 'div' ) ;
123
-
124
124
utils . act ( ( ) => store . profilerStore . startProfiling ( ) ) ;
125
- utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> , container ) ) ;
125
+ utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> ) ) ;
126
126
await Promise . resolve ( ) ;
127
127
expect ( store ) . toMatchInlineSnapshot ( `
128
128
[root]
129
129
▾ <App>
130
130
<Suspense>
131
131
` ) ;
132
- utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> , container ) ) ;
132
+ utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> ) ) ;
133
133
expect ( store ) . toMatchInlineSnapshot ( `
134
134
[root]
135
135
▾ <App>
136
136
▾ <Suspense>
137
137
<LazyInnerComponent>
138
138
` ) ;
139
- utils . act ( ( ) => legacyRender ( < App renderChildren = { false } /> , container ) ) ;
139
+ utils . act ( ( ) => legacyRender ( < App renderChildren = { false } /> ) ) ;
140
140
expect ( store ) . toMatchInlineSnapshot ( `
141
141
[root]
142
142
<App>
@@ -161,25 +161,22 @@ describe('commit tree', () => {
161
161
162
162
// @reactVersion >= 18.0
163
163
it ( 'should support Lazy components (createRoot)' , async ( ) => {
164
- const container = document . createElement ( 'div' ) ;
165
- const root = ReactDOMClient . createRoot ( container ) ;
166
-
167
164
utils . act ( ( ) => store . profilerStore . startProfiling ( ) ) ;
168
- utils . act ( ( ) => root . render ( < App renderChildren = { true } /> ) ) ;
165
+ utils . act ( ( ) => modernRender ( < App renderChildren = { true } /> ) ) ;
169
166
await Promise . resolve ( ) ;
170
167
expect ( store ) . toMatchInlineSnapshot ( `
171
168
[root]
172
169
▾ <App>
173
170
<Suspense>
174
171
` ) ;
175
- utils . act ( ( ) => root . render ( < App renderChildren = { true } /> ) ) ;
172
+ utils . act ( ( ) => modernRender ( < App renderChildren = { true } /> ) ) ;
176
173
expect ( store ) . toMatchInlineSnapshot ( `
177
174
[root]
178
175
▾ <App>
179
176
▾ <Suspense>
180
177
<LazyInnerComponent>
181
178
` ) ;
182
- utils . act ( ( ) => root . render ( < App renderChildren = { false } /> ) ) ;
179
+ utils . act ( ( ) => modernRender ( < App renderChildren = { false } /> ) ) ;
183
180
expect ( store ) . toMatchInlineSnapshot ( `
184
181
[root]
185
182
<App>
@@ -203,17 +200,16 @@ describe('commit tree', () => {
203
200
} ) ;
204
201
205
202
// @reactVersion >= 16.9
203
+ // @reactVersion < 19
206
204
it ( 'should support Lazy components that are unmounted before resolving (legacy render)' , async ( ) => {
207
- const container = document . createElement ( 'div' ) ;
208
-
209
205
utils . act ( ( ) => store . profilerStore . startProfiling ( ) ) ;
210
- utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> , container ) ) ;
206
+ utils . act ( ( ) => legacyRender ( < App renderChildren = { true } /> ) ) ;
211
207
expect ( store ) . toMatchInlineSnapshot ( `
212
208
[root]
213
209
▾ <App>
214
210
<Suspense>
215
211
` ) ;
216
- utils . act ( ( ) => legacyRender ( < App renderChildren = { false } /> , container ) ) ;
212
+ utils . act ( ( ) => legacyRender ( < App renderChildren = { false } /> ) ) ;
217
213
expect ( store ) . toMatchInlineSnapshot ( `
218
214
[root]
219
215
<App>
@@ -237,17 +233,14 @@ describe('commit tree', () => {
237
233
238
234
// @reactVersion >= 18.0
239
235
it ( 'should support Lazy components that are unmounted before resolving (createRoot)' , async ( ) => {
240
- const container = document . createElement ( 'div' ) ;
241
- const root = ReactDOMClient . createRoot ( container ) ;
242
-
243
236
utils . act ( ( ) => store . profilerStore . startProfiling ( ) ) ;
244
- utils . act ( ( ) => root . render ( < App renderChildren = { true } /> ) ) ;
237
+ utils . act ( ( ) => modernRender ( < App renderChildren = { true } /> ) ) ;
245
238
expect ( store ) . toMatchInlineSnapshot ( `
246
239
[root]
247
240
▾ <App>
248
241
<Suspense>
249
242
` ) ;
250
- utils . act ( ( ) => root . render ( < App renderChildren = { false } /> ) ) ;
243
+ utils . act ( ( ) => modernRender ( < App renderChildren = { false } /> ) ) ;
251
244
expect ( store ) . toMatchInlineSnapshot ( `
252
245
[root]
253
246
<App>
0 commit comments