Convert ReactDOMServerIntegrationUntrustedURL-test.js to createRoot (#28105)
Matt Carroll committed
Jan 26, 2024 at 12:18 UTC
7c79dafb71cab8808749e3284eab3c623e9c2360
1 file changed
+34
-11
packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js
+34
-11
@@ -16,8 +16,10 @@ const ReactDOMServerIntegrationUtils = require('./utils/ReactDOMServerIntegratio
16
17
let React;
18
let ReactDOM;
19
+let ReactDOMClient;
20
let ReactDOMServer;
21
let ReactTestUtils;
22
+let act;
23
24
const EXPECTED_SAFE_URL =
25
"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')";
@@ -34,8 +36,10 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
36
jest.resetModules();
37
React = require('react');
38
ReactDOM = require('react-dom');
39
+ ReactDOMClient = require('react-dom/client');
40
ReactDOMServer = require('react-dom/server');
41
ReactTestUtils = require('react-dom/test-utils');
42
+ act = require('internal-test-utils').act;
43
44
// Make them available to the helpers.
45
return {
@@ -167,11 +171,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => {
171
},
172
);
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 () => {
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
+ });
184
}).toErrorDev(
185
'Warning: A future version of React will block javascript: URLs as a security precaution. ' +
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', (
205
206
React = require('react');
207
ReactDOM = require('react-dom');
208
+ ReactDOMClient = require('react-dom/client');
209
ReactDOMServer = require('react-dom/server');
210
ReactTestUtils = require('react-dom/test-utils');
211
+ act = require('internal-test-utils').act;
212
213
// Make them available to the helpers.
214
return {
@@ -325,11 +336,16 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
336
},
337
);
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 () => {
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
+ });
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
+ });
349
expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
350
});
351
@@ -369,15 +385,22 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
385
expect(e.href).toBe('https://reactjs.org/');
386
});
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 () => {
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
+ });
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
+ });
398
expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
399
// The second update ensures that a global flag hasn't been added to the regex
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
+ });
404
expect(container.firstChild.href).toBe(EXPECTED_SAFE_URL);
405
});
406
});