@@ -296,6 +296,114 @@ public void RenderJavaScriptShouldHandleWaitForContentLoad()
296296 ) ;
297297 }
298298 }
299+
300+ [ Fact ]
301+ public void RenderJavaScriptShouldCallRenderComponentUsingRootAPI ( )
302+ {
303+ var environment = new Mock < IReactEnvironment > ( ) ;
304+ var config = CreateDefaultConfigMock ( ) ;
305+ config . SetupGet ( x => x . UseRootAPI ) . Returns ( true ) ;
306+ var reactIdGenerator = new Mock < IReactIdGenerator > ( ) ;
307+
308+ var component = new ReactComponent ( environment . Object , config . Object , reactIdGenerator . Object , "Foo" , "container" )
309+ {
310+ Props = new { hello = "World" }
311+ } ;
312+ var result = component . RenderJavaScript ( false ) ;
313+
314+ Assert . Equal (
315+ @"ReactDOM.hydrateRoot(document.getElementById(""container""), React.createElement(Foo, {""hello"":""World""}))" ,
316+ result
317+ ) ;
318+ }
319+
320+ [ Fact ]
321+ public void RenderJavaScriptShouldCallRenderComponentWithRootRender ( )
322+ {
323+ var environment = new Mock < IReactEnvironment > ( ) ;
324+ var config = CreateDefaultConfigMock ( ) ;
325+ config . SetupGet ( x => x . UseRootAPI ) . Returns ( true ) ;
326+ var reactIdGenerator = new Mock < IReactIdGenerator > ( ) ;
327+
328+ var component = new ReactComponent ( environment . Object , config . Object , reactIdGenerator . Object , "Foo" , "container" )
329+ {
330+ ClientOnly = true ,
331+ Props = new { hello = "World" }
332+ } ;
333+ var result = component . RenderJavaScript ( false ) ;
334+
335+ Assert . Equal (
336+ @"ReactDOM.createRoot(document.getElementById(""container"")).render(React.createElement(Foo, {""hello"":""World""}))" ,
337+ result
338+ ) ;
339+ }
340+
341+ [ Fact ]
342+ public void RenderJavaScriptShouldCallRenderComponentwithReactDOMHydrateRoot ( )
343+ {
344+ var environment = new Mock < IReactEnvironment > ( ) ;
345+ var config = CreateDefaultConfigMock ( ) ;
346+ config . SetupGet ( x => x . UseRootAPI ) . Returns ( true ) ;
347+ var reactIdGenerator = new Mock < IReactIdGenerator > ( ) ;
348+
349+ var component = new ReactComponent ( environment . Object , config . Object , reactIdGenerator . Object , "Foo" , "container" )
350+ {
351+ ClientOnly = false ,
352+ Props = new { hello = "World" }
353+ } ;
354+ var result = component . RenderJavaScript ( false ) ;
355+
356+ Assert . Equal (
357+ @"ReactDOM.hydrateRoot(document.getElementById(""container""), React.createElement(Foo, {""hello"":""World""}))" ,
358+ result
359+ ) ;
360+ }
361+
362+ [ Fact ]
363+ public void RenderJavaScriptShouldCallRootRenderWhenSsrDisabled ( )
364+ {
365+ var environment = new Mock < IReactEnvironment > ( ) ;
366+ var config = CreateDefaultConfigMock ( ) ;
367+ config . SetupGet ( x => x . UseServerSideRendering ) . Returns ( false ) ;
368+ config . SetupGet ( x => x . UseRootAPI ) . Returns ( true ) ;
369+
370+ var reactIdGenerator = new Mock < IReactIdGenerator > ( ) ;
371+ var component = new ReactComponent ( environment . Object , config . Object , reactIdGenerator . Object , "Foo" , "container" )
372+ {
373+ ClientOnly = false ,
374+ Props = new { hello = "World" }
375+ } ;
376+ var result = component . RenderJavaScript ( false ) ;
377+
378+ Assert . Equal (
379+ @"ReactDOM.createRoot(document.getElementById(""container"")).render(React.createElement(Foo, {""hello"":""World""}))" ,
380+ result
381+ ) ;
382+ }
383+
384+ [ Fact ]
385+ public void RenderJavaScriptShouldHandleWaitForContentLoadWhenUsingRootAPI ( )
386+ {
387+ var environment = new Mock < IReactEnvironment > ( ) ;
388+ var config = CreateDefaultConfigMock ( ) ;
389+ config . SetupGet ( x => x . UseServerSideRendering ) . Returns ( false ) ;
390+ config . SetupGet ( x => x . UseRootAPI ) . Returns ( true ) ;
391+
392+ var reactIdGenerator = new Mock < IReactIdGenerator > ( ) ;
393+ var component = new ReactComponent ( environment . Object , config . Object , reactIdGenerator . Object , "Foo" , "container" )
394+ {
395+ ClientOnly = false ,
396+ Props = new { hello = "World" }
397+ } ;
398+ using ( var writer = new StringWriter ( ) )
399+ {
400+ component . RenderJavaScript ( writer , waitForDOMContentLoad : true ) ;
401+ Assert . Equal (
402+ @"window.addEventListener('DOMContentLoaded', function() {ReactDOM.createRoot(document.getElementById(""container"")).render(React.createElement(Foo, {""hello"":""World""}))});" ,
403+ writer . ToString ( )
404+ ) ;
405+ }
406+ }
299407
300408 [ Theory ]
301409 [ InlineData ( "Foo" , true ) ]
0 commit comments