@@ -17,24 +17,18 @@ describe('React hooks DevTools integration', () => {
1717  let  act ; 
1818  let  overrideHookState ; 
1919  let  overrideProps ; 
20-   let  suspendedFibers ; 
20+   let  overrideSuspense ; 
2121
2222  beforeEach ( ( )  =>  { 
23-     suspendedFibers  =  new  Set ( ) ; 
2423    global . __REACT_DEVTOOLS_GLOBAL_HOOK__  =  { 
2524      inject : injected  =>  { 
2625        overrideHookState  =  injected . overrideHookState ; 
2726        overrideProps  =  injected . overrideProps ; 
27+         overrideSuspense  =  injected . overrideSuspense ; 
2828      } , 
2929      supportsFiber : true , 
3030      onCommitFiberRoot : ( )  =>  { } , 
3131      onCommitFiberUnmount : ( )  =>  { } , 
32-       shouldSuspendFiber ( rendererId ,  fiber )  { 
33-         return  ( 
34-           suspendedFibers . has ( fiber )  || 
35-           ( fiber . alternate  &&  suspendedFibers . has ( fiber . alternate ) ) 
36-         ) ; 
37-       } , 
3832    } ; 
3933
4034    jest . resetModules ( ) ; 
@@ -184,40 +178,56 @@ describe('React hooks DevTools integration', () => {
184178    } 
185179  } ) ; 
186180
187-   it ( 'should support triggering suspense in DEV' ,  ( )  =>  { 
181+   it ( 'should support overriding suspense' ,  ( )  =>  { 
182+     if  ( __DEV__ )  { 
183+       // Lock the first render 
184+       overrideSuspense ( ( )  =>  true ) ; 
185+     } 
186+ 
188187    function  MyComponent ( )  { 
189188      return  'Done' ; 
190189    } 
191190
192191    const  renderer  =  ReactTestRenderer . create ( 
193-       < React . Suspense  fallback = { 'Loading' } > 
194-         < MyComponent  /> 
195-       </ React . Suspense > , 
192+       < div > 
193+         < React . Suspense  fallback = { 'Loading' } > 
194+           < MyComponent  /> 
195+         </ React . Suspense > 
196+       </ div > , 
196197    ) ; 
197-     expect ( renderer . toJSON ( ) ) . toEqual ( 'Done' ) ; 
198- 
199-     const  fiber  =  renderer . root . _currentFiber ( ) . return ; 
198+     const  fiber  =  renderer . root . _currentFiber ( ) . child ; 
200199    if  ( __DEV__ )  { 
201-       // Mark as loading  
202-       suspendedFibers . add ( fiber ) ; 
200+       // First render was locked  
201+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Loading' ] ) ; 
203202      overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
204-       expect ( renderer . toJSON ( ) ) . toEqual ( 'Loading' ) ; 
203+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Loading' ] ) ; 
204+       // Release the lock 
205+       overrideSuspense ( ( )  =>  false ) ; 
205206
206207      overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
207-       expect ( renderer . toJSON ( ) ) . toEqual ( 'Loading' ) ; 
208+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Done' ] ) ; 
209+       overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
210+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Done' ] ) ; 
208211
209-       // Mark as done  
210-       suspendedFibers . delete ( fiber ) ; 
212+       // Lock again  
213+       overrideSuspense ( ( )   =>   true ) ; 
211214      overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
212-       expect ( renderer . toJSON ( ) ) . toEqual ( 'Done' ) ; 
215+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Loading' ] ) ; 
213216
217+       // Release the lock again 
218+       overrideSuspense ( ( )  =>  false ) ; 
214219      overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
215-       expect ( renderer . toJSON ( ) ) . toEqual ( 'Done' ) ; 
220+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Done' ] ) ; 
216221
217-       // Mark as loading again 
218-       suspendedFibers . add ( fiber ) ; 
222+       // Ensure it checks specific fibers. 
223+       overrideSuspense ( f  =>  f  ===  fiber  ||  f  ===  fiber . alternate ) ; 
224+       overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
225+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Loading' ] ) ; 
226+       overrideSuspense ( f  =>  f  !==  fiber  &&  f  !==  fiber . alternate ) ; 
219227      overrideProps ( fiber ,  [ ] ,  null ) ;  // Re-render 
220-       expect ( renderer . toJSON ( ) ) . toEqual ( 'Loading' ) ; 
228+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Done' ] ) ; 
229+     }  else  { 
230+       expect ( renderer . toJSON ( ) . children ) . toEqual ( [ 'Done' ] ) ; 
221231    } 
222232  } ) ; 
223233} ) ; 
0 commit comments