@@ -16,8 +16,10 @@ const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegratio
1616
1717let React ;
1818let ReactDOM ;
19+ let ReactDOMClient ;
1920let ReactDOMServer ;
2021let ReactTestUtils ;
22+ let act ;
2123
2224const EXPECTED_SAFE_URL =
2325 "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" ;
@@ -34,8 +36,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
3436 jest . resetModules ( ) ;
3537 React = require ( 'react' ) ;
3638 ReactDOM = require ( 'react-dom' ) ;
39+ ReactDOMClient = require ( 'react-dom/client' ) ;
3740 ReactDOMServer = require ( 'react-dom/server' ) ;
3841 ReactTestUtils = require ( 'react-dom/test-utils' ) ;
42+ act = require ( 'internal-test-utils' ) . act ;
3943
4044 // Make them available to the helpers.
4145 return {
@@ -167,11 +171,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
167171 } ,
168172 ) ;
169173
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 ( ) => {
171175 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+ } ) ;
175184 } ) . toErrorDev (
176185 'Warning: A future version of React will block javascript: URLs as a security precaution. ' +
177186 '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', (
196205
197206 React = require ( 'react' ) ;
198207 ReactDOM = require ( 'react-dom' ) ;
208+ ReactDOMClient = require ( 'react-dom/client' ) ;
199209 ReactDOMServer = require ( 'react-dom/server' ) ;
200210 ReactTestUtils = require ( 'react-dom/test-utils' ) ;
211+ act = require ( 'internal-test-utils' ) . act ;
201212
202213 // Make them available to the helpers.
203214 return {
@@ -325,11 +336,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
325336 } ,
326337 ) ;
327338
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 ( ) => {
329340 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+ } ) ;
331345 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+ } ) ;
333349 expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
334350 } ) ;
335351
@@ -369,15 +385,22 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
369385 expect ( e . href ) . toBe ( 'https://reactjs.org/' ) ;
370386 } ) ;
371387
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 ( ) => {
373389 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+ } ) ;
375394 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+ } ) ;
377398 expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
378399 // The second update ensures that a global flag hasn't been added to the regex
379400 // 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+ } ) ;
381404 expect ( container . firstChild . href ) . toBe ( EXPECTED_SAFE_URL ) ;
382405 } ) ;
383406} ) ;
0 commit comments