@@ -1368,7 +1368,7 @@ describe('ReactHooks', () => {
13681368 } ) ;
13691369
13701370 // Regression test for https://github.com/facebook/react/issues/14790
1371- it ( 'does not fire a false positive warning when suspending' , async ( ) => {
1371+ it ( 'does not fire a false positive warning when suspending memo ' , async ( ) => {
13721372 const { Suspense, useState, useRef} = React ;
13731373
13741374 let wasSuspended = false ;
@@ -1397,4 +1397,66 @@ describe('ReactHooks', () => {
13971397 await Promise . resolve ( ) ;
13981398 expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
13991399 } ) ;
1400+
1401+ // Regression test for https://github.com/facebook/react/issues/14790
1402+ it ( 'does not fire a false positive warning when suspending forwardRef' , async ( ) => {
1403+ const { Suspense, useState, useRef} = React ;
1404+
1405+ let wasSuspended = false ;
1406+ function trySuspend ( ) {
1407+ if ( ! wasSuspended ) {
1408+ throw new Promise ( resolve => {
1409+ wasSuspended = true ;
1410+ resolve ( ) ;
1411+ } ) ;
1412+ }
1413+ }
1414+
1415+ function render ( props , ref ) {
1416+ React . useState ( ) ;
1417+ trySuspend ( ) ;
1418+ return 'hello' ;
1419+ }
1420+
1421+ const Wrapper = React . forwardRef ( render ) ;
1422+ const root = ReactTestRenderer . create (
1423+ < Suspense fallback = "loading" >
1424+ < Wrapper />
1425+ </ Suspense > ,
1426+ ) ;
1427+ expect ( root ) . toMatchRenderedOutput ( 'loading' ) ;
1428+ await Promise . resolve ( ) ;
1429+ expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
1430+ } ) ;
1431+
1432+ // Regression test for https://github.com/facebook/react/issues/14790
1433+ it ( 'does not fire a false positive warning when suspending memo(forwardRef)' , async ( ) => {
1434+ const { Suspense, useState, useRef} = React ;
1435+
1436+ let wasSuspended = false ;
1437+ function trySuspend ( ) {
1438+ if ( ! wasSuspended ) {
1439+ throw new Promise ( resolve => {
1440+ wasSuspended = true ;
1441+ resolve ( ) ;
1442+ } ) ;
1443+ }
1444+ }
1445+
1446+ function render ( props , ref ) {
1447+ React . useState ( ) ;
1448+ trySuspend ( ) ;
1449+ return 'hello' ;
1450+ }
1451+
1452+ const Wrapper = React . memo ( React . forwardRef ( render ) ) ;
1453+ const root = ReactTestRenderer . create (
1454+ < Suspense fallback = "loading" >
1455+ < Wrapper />
1456+ </ Suspense > ,
1457+ ) ;
1458+ expect ( root ) . toMatchRenderedOutput ( 'loading' ) ;
1459+ await Promise . resolve ( ) ;
1460+ expect ( root ) . toMatchRenderedOutput ( 'hello' ) ;
1461+ } ) ;
14001462} ) ;
0 commit comments