@@ -16,8 +16,10 @@ const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegratio
16
16
17
17
let React ;
18
18
let ReactDOM ;
19
+ let ReactDOMClient ;
19
20
let ReactDOMServer ;
20
21
let ReactTestUtils ;
22
+ let act ;
21
23
22
24
const EXPECTED_SAFE_URL =
23
25
"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" ;
@@ -34,8 +36,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
34
36
jest . resetModules ( ) ;
35
37
React = require ( 'react' ) ;
36
38
ReactDOM = require ( 'react-dom' ) ;
39
+ ReactDOMClient = require ( 'react-dom/client' ) ;
37
40
ReactDOMServer = require ( 'react-dom/server' ) ;
38
41
ReactTestUtils = require ( 'react-dom/test-utils' ) ;
42
+ act = require ( 'internal-test-utils' ) . act ;
39
43
40
44
// Make them available to the helpers.
41
45
return {
@@ -167,11 +171,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
167
171
} ,
168
172
) ;
169
173
170
- it ( 'rejects a javascript protocol href if it is added during an update' , ( ) => {
174
+ it ( 'rejects a javascript protocol href if it is added during an update' , async ( ) => {
171
175
const container = document . createElement ( 'div' ) ;
172
- ReactDOM . render ( < a href = "thisisfine" > click me</ a > , container ) ;
173
- expect ( ( ) => {
174
- ReactDOM . render ( < a href = "javascript:notfine" > click me</ a > , container ) ;
176
+ const root = ReactDOMClient . createRoot ( container ) ;
177
+ await act ( async ( ) => {
178
+ root . render ( < a href = "thisisfine" > click me</ a > ) ;
179
+ } ) ;
180
+ await expect ( async ( ) => {
181
+ await act ( ( ) => {
182
+ root . render ( < a href = "javascript:notfine" > click me</ a > ) ;
183
+ } ) ;
175
184
} ) . toErrorDev (
176
185
'Warning: A future version of React will block javascript: URLs as a security precaution. ' +
177
186
'Use event handlers instead if you can. If you need to generate unsafe HTML try using ' +
@@ -196,8 +205,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
196
205
197
206
React = require ( 'react' ) ;
198
207
ReactDOM = require ( 'react-dom' ) ;
208
+ ReactDOMClient = require ( 'react-dom/client' ) ;
199
209
ReactDOMServer = require ( 'react-dom/server' ) ;
200
210
ReactTestUtils = require ( 'react-dom/test-utils' ) ;
211
+ act = require ( 'internal-test-utils' ) . act ;
201
212
202
213
// Make them available to the helpers.
203
214
return {
@@ -325,11 +336,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
325
336
} ,
326
337
) ;
327
338
328
- it ( 'rejects a javascript protocol href if it is added during an update' , ( ) => {
339
+ it ( 'rejects a javascript protocol href if it is added during an update' , async ( ) => {
329
340
const container = document . createElement ( 'div' ) ;
330
- ReactDOM . render ( < a href = "http://thisisfine/" > click me</ a > , container ) ;
341
+ const root = ReactDOMClient . createRoot ( container ) ;
342
+ await act ( ( ) => {
343
+ root . render ( < a href = "http://thisisfine/" > click me</ a > ) ;
344
+ } ) ;
331
345
expect ( container . firstChild . href ) . toBe ( 'http://thisisfine/' ) ;
332
- ReactDOM . render ( < a href = "javascript:notfine" > click me</ a > , container ) ;
346
+ await act ( ( ) => {
347
+ root . render ( < a href = "javascript:notfine" > click me</ a > ) ;
348
+ } ) ;
333
349
expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
334
350
} ) ;
335
351
@@ -369,15 +385,22 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
369
385
expect ( e . href ) . toBe ( 'https://reactjs.org/' ) ;
370
386
} ) ;
371
387
372
- it ( 'rejects a javascript protocol href if it is added during an update twice' , ( ) => {
388
+ it ( 'rejects a javascript protocol href if it is added during an update twice' , async ( ) => {
373
389
const container = document . createElement ( 'div' ) ;
374
- ReactDOM . render ( < a href = "http://thisisfine/" > click me</ a > , container ) ;
390
+ const root = ReactDOMClient . createRoot ( container ) ;
391
+ await act ( async ( ) => {
392
+ root . render ( < a href = "http://thisisfine/" > click me</ a > ) ;
393
+ } ) ;
375
394
expect ( container . firstChild . href ) . toBe ( 'http://thisisfine/' ) ;
376
- ReactDOM . render ( < a href = "javascript:notfine" > click me</ a > , container ) ;
395
+ await act ( async ( ) => {
396
+ root . render ( < a href = "javascript:notfine" > click me</ a > ) ;
397
+ } ) ;
377
398
expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
378
399
// The second update ensures that a global flag hasn't been added to the regex
379
400
// which would fail to match the second time it is called.
380
- ReactDOM . render ( < a href = "javascript:notfine" > click me</ a > , container ) ;
401
+ await act ( async ( ) => {
402
+ root . render ( < a href = "javascript:notfine" > click me</ a > ) ;
403
+ } ) ;
381
404
expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
382
405
} ) ;
383
406
} ) ;
0 commit comments