@@ -5292,6 +5292,54 @@ describe('ReactDOMFizzServer', () => {
5292
5292
expect ( getVisibleChildren ( container ) ) . toEqual ( 'ABC' ) ;
5293
5293
} ) ;
5294
5294
5295
+ // @gate enableUseHook
5296
+ it ( 'basic use(context)' , async ( ) => {
5297
+ const ContextA = React . createContext ( 'default' ) ;
5298
+ const ContextB = React . createContext ( 'B' ) ;
5299
+ const ServerContext = React . createServerContext (
5300
+ 'ServerContext' ,
5301
+ 'default' ,
5302
+ ) ;
5303
+ function Client ( ) {
5304
+ return use ( ContextA ) + use ( ContextB ) ;
5305
+ }
5306
+ function ServerComponent ( ) {
5307
+ return use ( ServerContext ) ;
5308
+ }
5309
+ function Server ( ) {
5310
+ return (
5311
+ < ServerContext . Provider value = "C" >
5312
+ < ServerComponent />
5313
+ </ ServerContext . Provider >
5314
+ ) ;
5315
+ }
5316
+ function App ( ) {
5317
+ return (
5318
+ < >
5319
+ < ContextA . Provider value = "A" >
5320
+ < Client />
5321
+ </ ContextA . Provider >
5322
+ < Server />
5323
+ </ >
5324
+ ) ;
5325
+ }
5326
+
5327
+ await act ( async ( ) => {
5328
+ const { pipe} = ReactDOMFizzServer . renderToPipeableStream ( < App /> ) ;
5329
+ pipe ( writable ) ;
5330
+ } ) ;
5331
+ expect ( getVisibleChildren ( container ) ) . toEqual ( [ 'AB' , 'C' ] ) ;
5332
+
5333
+ // Hydration uses a different renderer runtime (Fiber instead of Fizz).
5334
+ // We reset _currentRenderer here to not trigger a warning about multiple
5335
+ // renderers concurrently using these contexts
5336
+ ContextA . _currentRenderer = null ;
5337
+ ServerContext . _currentRenderer = null ;
5338
+ ReactDOMClient . hydrateRoot ( container , < App /> ) ;
5339
+ expect ( Scheduler ) . toFlushAndYield ( [ ] ) ;
5340
+ expect ( getVisibleChildren ( container ) ) . toEqual ( [ 'AB' , 'C' ] ) ;
5341
+ } ) ;
5342
+
5295
5343
// @gate enableUseHook
5296
5344
it ( 'use(promise) in multiple components' , async ( ) => {
5297
5345
const promiseA = Promise . resolve ( 'A' ) ;
0 commit comments