@@ -2473,175 +2473,4 @@ describe('ReactErrorBoundaries', () => {
24732473      'Caught an error: gotta catch em all.' , 
24742474    ) ; 
24752475  } ) ; 
2476- 
2477-   // @gate  skipUnmountedBoundaries 
2478-   it ( 'catches errors thrown in componentWillUnmount' ,  ( )  =>  { 
2479-     class  LocalErrorBoundary  extends  React . Component  { 
2480-       state  =  { error : null } ; 
2481-       static  getDerivedStateFromError ( error )  { 
2482-         Scheduler . unstable_yieldValue ( 
2483-           `ErrorBoundary static getDerivedStateFromError` , 
2484-         ) ; 
2485-         return  { error} ; 
2486-       } 
2487-       render ( )  { 
2488-         const  { children,  id,  fallbackID}  =  this . props ; 
2489-         const  { error}  =  this . state ; 
2490-         if  ( error )  { 
2491-           Scheduler . unstable_yieldValue ( `${ id }   render error` ) ; 
2492-           return  < Component  id = { fallbackID }  /> ; 
2493-         } 
2494-         Scheduler . unstable_yieldValue ( `${ id }   render success` ) ; 
2495-         return  children  ||  null ; 
2496-       } 
2497-     } 
2498- 
2499-     class  Component  extends  React . Component  { 
2500-       render ( )  { 
2501-         const  { id}  =  this . props ; 
2502-         Scheduler . unstable_yieldValue ( 'Component render '  +  id ) ; 
2503-         return  id ; 
2504-       } 
2505-     } 
2506- 
2507-     class  LocalBrokenComponentWillUnmount  extends  React . Component  { 
2508-       componentWillUnmount ( )  { 
2509-         Scheduler . unstable_yieldValue ( 
2510-           'BrokenComponentWillUnmount componentWillUnmount' , 
2511-         ) ; 
2512-         throw  Error ( 'Expected' ) ; 
2513-       } 
2514- 
2515-       render ( )  { 
2516-         Scheduler . unstable_yieldValue ( 'BrokenComponentWillUnmount render' ) ; 
2517-         return  'broken' ; 
2518-       } 
2519-     } 
2520- 
2521-     const  container  =  document . createElement ( 'div' ) ; 
2522- 
2523-     ReactDOM . render ( 
2524-       < LocalErrorBoundary  id = "OuterBoundary"  fallbackID = "OuterFallback" > 
2525-         < Component  id = "sibling"  /> 
2526-         < LocalErrorBoundary  id = "InnerBoundary"  fallbackID = "InnerFallback" > 
2527-           < LocalBrokenComponentWillUnmount  /> 
2528-         </ LocalErrorBoundary > 
2529-       </ LocalErrorBoundary > , 
2530-       container , 
2531-     ) ; 
2532- 
2533-     expect ( container . firstChild . textContent ) . toBe ( 'sibling' ) ; 
2534-     expect ( container . lastChild . textContent ) . toBe ( 'broken' ) ; 
2535-     expect ( Scheduler ) . toHaveYielded ( [ 
2536-       'OuterBoundary render success' , 
2537-       'Component render sibling' , 
2538-       'InnerBoundary render success' , 
2539-       'BrokenComponentWillUnmount render' , 
2540-     ] ) ; 
2541- 
2542-     ReactDOM . render ( 
2543-       < LocalErrorBoundary  id = "OuterBoundary"  fallbackID = "OuterFallback" > 
2544-         < Component  id = "sibling"  /> 
2545-       </ LocalErrorBoundary > , 
2546-       container , 
2547-     ) ; 
2548- 
2549-     // React should skip over the unmounting boundary and find the nearest still-mounted boundary. 
2550-     expect ( container . firstChild . textContent ) . toBe ( 'OuterFallback' ) ; 
2551-     expect ( container . lastChild . textContent ) . toBe ( 'OuterFallback' ) ; 
2552-     expect ( Scheduler ) . toHaveYielded ( [ 
2553-       'OuterBoundary render success' , 
2554-       'Component render sibling' , 
2555-       'BrokenComponentWillUnmount componentWillUnmount' , 
2556-       'ErrorBoundary static getDerivedStateFromError' , 
2557-       'OuterBoundary render error' , 
2558-       'Component render OuterFallback' , 
2559-     ] ) ; 
2560-   } ) ; 
2561- 
2562-   // @gate  skipUnmountedBoundaries 
2563-   it ( 'catches errors thrown while detaching refs' ,  ( )  =>  { 
2564-     class  LocalErrorBoundary  extends  React . Component  { 
2565-       state  =  { error : null } ; 
2566-       static  getDerivedStateFromError ( error )  { 
2567-         Scheduler . unstable_yieldValue ( 
2568-           `ErrorBoundary static getDerivedStateFromError` , 
2569-         ) ; 
2570-         return  { error} ; 
2571-       } 
2572-       render ( )  { 
2573-         const  { children,  id,  fallbackID}  =  this . props ; 
2574-         const  { error}  =  this . state ; 
2575-         if  ( error )  { 
2576-           Scheduler . unstable_yieldValue ( `${ id }   render error` ) ; 
2577-           return  < Component  id = { fallbackID }  /> ; 
2578-         } 
2579-         Scheduler . unstable_yieldValue ( `${ id }   render success` ) ; 
2580-         return  children  ||  null ; 
2581-       } 
2582-     } 
2583- 
2584-     class  Component  extends  React . Component  { 
2585-       render ( )  { 
2586-         const  { id}  =  this . props ; 
2587-         Scheduler . unstable_yieldValue ( 'Component render '  +  id ) ; 
2588-         return  id ; 
2589-       } 
2590-     } 
2591- 
2592-     class  LocalBrokenCallbackRef  extends  React . Component  { 
2593-       _ref  =  ref  =>  { 
2594-         Scheduler . unstable_yieldValue ( 'LocalBrokenCallbackRef ref '  +  ! ! ref ) ; 
2595-         if  ( ref  ===  null )  { 
2596-           throw  Error ( 'Expected' ) ; 
2597-         } 
2598-       } ; 
2599- 
2600-       render ( )  { 
2601-         Scheduler . unstable_yieldValue ( 'LocalBrokenCallbackRef render' ) ; 
2602-         return  < div  ref = { this . _ref } > ref</ div > ; 
2603-       } 
2604-     } 
2605- 
2606-     const  container  =  document . createElement ( 'div' ) ; 
2607- 
2608-     ReactDOM . render ( 
2609-       < LocalErrorBoundary  id = "OuterBoundary"  fallbackID = "OuterFallback" > 
2610-         < Component  id = "sibling"  /> 
2611-         < LocalErrorBoundary  id = "InnerBoundary"  fallbackID = "InnerFallback" > 
2612-           < LocalBrokenCallbackRef  /> 
2613-         </ LocalErrorBoundary > 
2614-       </ LocalErrorBoundary > , 
2615-       container , 
2616-     ) ; 
2617- 
2618-     expect ( container . firstChild . textContent ) . toBe ( 'sibling' ) ; 
2619-     expect ( container . lastChild . textContent ) . toBe ( 'ref' ) ; 
2620-     expect ( Scheduler ) . toHaveYielded ( [ 
2621-       'OuterBoundary render success' , 
2622-       'Component render sibling' , 
2623-       'InnerBoundary render success' , 
2624-       'LocalBrokenCallbackRef render' , 
2625-       'LocalBrokenCallbackRef ref true' , 
2626-     ] ) ; 
2627- 
2628-     ReactDOM . render ( 
2629-       < LocalErrorBoundary  id = "OuterBoundary"  fallbackID = "OuterFallback" > 
2630-         < Component  id = "sibling"  /> 
2631-       </ LocalErrorBoundary > , 
2632-       container , 
2633-     ) ; 
2634- 
2635-     // React should skip over the unmounting boundary and find the nearest still-mounted boundary. 
2636-     expect ( container . firstChild . textContent ) . toBe ( 'OuterFallback' ) ; 
2637-     expect ( container . lastChild . textContent ) . toBe ( 'OuterFallback' ) ; 
2638-     expect ( Scheduler ) . toHaveYielded ( [ 
2639-       'OuterBoundary render success' , 
2640-       'Component render sibling' , 
2641-       'LocalBrokenCallbackRef ref false' , 
2642-       'ErrorBoundary static getDerivedStateFromError' , 
2643-       'OuterBoundary render error' , 
2644-       'Component render OuterFallback' , 
2645-     ] ) ; 
2646-   } ) ; 
26472476} ) ; 
0 commit comments