@@ -16,19 +16,23 @@ const TEXT_NODE_TYPE = 3;
16
16
17
17
let React ;
18
18
let ReactDOM ;
19
+ let ReactDOMClient ;
19
20
let ReactDOMServer ;
21
+ let ReactFeatureFlags ;
20
22
let ReactTestUtils ;
21
23
22
24
function initModules ( ) {
23
25
jest . resetModules ( ) ;
24
26
React = require ( 'react' ) ;
25
27
ReactDOM = require ( 'react-dom' ) ;
28
+ ReactDOMClient = require ( 'react-dom/client' ) ;
26
29
ReactDOMServer = require ( 'react-dom/server' ) ;
30
+ ReactFeatureFlags = require ( 'shared/ReactFeatureFlags' ) ;
27
31
ReactTestUtils = require ( 'react-dom/test-utils' ) ;
28
32
29
33
// Make them available to the helpers.
30
34
return {
31
- ReactDOM ,
35
+ ReactDOMClient ,
32
36
ReactDOMServer,
33
37
ReactTestUtils,
34
38
} ;
@@ -136,7 +140,13 @@ describe('ReactDOMServerIntegration', () => {
136
140
// DOM nodes on the client side. We force it to fire early
137
141
// so that it gets deduplicated later, and doesn't fail the test.
138
142
expect ( ( ) => {
139
- ReactDOM . render ( < nonstandard /> , document . createElement ( 'div' ) ) ;
143
+ ReactDOM . flushSync ( ( ) => {
144
+ const root = ReactDOMClient . createRoot (
145
+ document . createElement ( 'div' ) ,
146
+ ) ;
147
+
148
+ root . render ( < nonstandard /> ) ;
149
+ } ) ;
140
150
} ) . toErrorDev ( 'The tag <nonstandard> is unrecognized in this browser.' ) ;
141
151
142
152
const e = await render ( < nonstandard > Text</ nonstandard > ) ;
@@ -833,15 +843,21 @@ describe('ReactDOMServerIntegration', () => {
833
843
'an element with one text child with special characters' ,
834
844
async render => {
835
845
const e = await render ( < div > { 'foo\rbar\r\nbaz\nqux\u0000' } </ div > ) ;
836
- if ( render === serverRender || render === streamRender ) {
846
+ if (
847
+ render === serverRender ||
848
+ render === streamRender ||
849
+ ( render === clientRenderOnServerString &&
850
+ ReactFeatureFlags . enableClientRenderFallbackOnTextMismatch )
851
+ ) {
837
852
expect ( e . childNodes . length ) . toBe ( 1 ) ;
838
- // Everything becomes LF when parsed from server HTML.
853
+ // Everything becomes LF when parsed from server HTML or hydrated if enableClientRenderFallbackOnTextMismatch is on .
839
854
// Null character is ignored.
840
855
expectNode ( e . childNodes [ 0 ] , TEXT_NODE_TYPE , 'foo\nbar\nbaz\nqux' ) ;
841
856
} else {
842
857
expect ( e . childNodes . length ) . toBe ( 1 ) ;
843
- // Client rendering (or hydration) uses JS value with CR.
858
+ // Client rendering (or hydration without enableClientRenderFallbackOnTextMismatch ) uses JS value with CR.
844
859
// Null character stays.
860
+
845
861
expectNode (
846
862
e . childNodes [ 0 ] ,
847
863
TEXT_NODE_TYPE ,
@@ -860,17 +876,23 @@ describe('ReactDOMServerIntegration', () => {
860
876
{ '\r\nbaz\nqux\u0000' }
861
877
</ div > ,
862
878
) ;
863
- if ( render === serverRender || render === streamRender ) {
879
+ if (
880
+ render === serverRender ||
881
+ render === streamRender ||
882
+ ( render === clientRenderOnServerString &&
883
+ ReactFeatureFlags . enableClientRenderFallbackOnTextMismatch )
884
+ ) {
864
885
// We have three nodes because there is a comment between them.
865
886
expect ( e . childNodes . length ) . toBe ( 3 ) ;
866
- // Everything becomes LF when parsed from server HTML.
887
+ // Everything becomes LF when parsed from server HTML or hydrated if enableClientRenderFallbackOnTextMismatch is on .
867
888
// Null character is ignored.
868
889
expectNode ( e . childNodes [ 0 ] , TEXT_NODE_TYPE , 'foo\nbar' ) ;
869
890
expectNode ( e . childNodes [ 2 ] , TEXT_NODE_TYPE , '\nbaz\nqux' ) ;
870
891
} else if ( render === clientRenderOnServerString ) {
871
892
// We have three nodes because there is a comment between them.
872
893
expect ( e . childNodes . length ) . toBe ( 3 ) ;
873
- // Hydration uses JS value with CR and null character.
894
+ // Hydration without enableClientRenderFallbackOnTextMismatch uses JS value with CR and null character.
895
+
874
896
expectNode ( e . childNodes [ 0 ] , TEXT_NODE_TYPE , 'foo\rbar' ) ;
875
897
expectNode ( e . childNodes [ 2 ] , TEXT_NODE_TYPE , '\r\nbaz\nqux\u0000' ) ;
876
898
} else {
0 commit comments