@@ -1758,4 +1758,90 @@ describe('ReactDOMFizzStaticBrowser', () => {
17581758 await readIntoContainer ( dynamic ) ;
17591759 expect ( getVisibleChildren ( container ) ) . toEqual ( 'hello' ) ;
17601760 } ) ;
1761+
1762+ // @gate enableHalt
1763+ it ( 'can resume render of a prerender' , async ( ) => {
1764+ const errors = [ ] ;
1765+
1766+ let resolveA ;
1767+ const promiseA = new Promise ( r => ( resolveA = r ) ) ;
1768+ let resolveB ;
1769+ const promiseB = new Promise ( r => ( resolveB = r ) ) ;
1770+
1771+ async function ComponentA ( ) {
1772+ await promiseA ;
1773+ return (
1774+ < Suspense fallback = "Loading B" >
1775+ < ComponentB />
1776+ </ Suspense >
1777+ ) ;
1778+ }
1779+
1780+ async function ComponentB ( ) {
1781+ await promiseB ;
1782+ return 'Hello' ;
1783+ }
1784+
1785+ function App ( ) {
1786+ return (
1787+ < Suspense fallback = "Loading A" >
1788+ < ComponentA />
1789+ </ Suspense >
1790+ ) ;
1791+ }
1792+
1793+ const controller = new AbortController ( ) ;
1794+ let pendingResult ;
1795+ await serverAct ( async ( ) => {
1796+ pendingResult = ReactDOMFizzStatic . prerender ( < App /> , {
1797+ signal : controller . signal ,
1798+ onError ( x ) {
1799+ errors . push ( x . message ) ;
1800+ } ,
1801+ } ) ;
1802+ } ) ;
1803+
1804+ controller . abort ( ) ;
1805+
1806+ const prerendered = await pendingResult ;
1807+ const postponedState = JSON . stringify ( prerendered . postponed ) ;
1808+
1809+ await readIntoContainer ( prerendered . prelude ) ;
1810+ expect ( getVisibleChildren ( container ) ) . toEqual ( 'Loading A' ) ;
1811+
1812+ await resolveA ( ) ;
1813+
1814+ expect ( prerendered . postponed ) . not . toBe ( null ) ;
1815+
1816+ const controller2 = new AbortController ( ) ;
1817+ await serverAct ( async ( ) => {
1818+ pendingResult = ReactDOMFizzStatic . resumeAndPrerender (
1819+ < App /> ,
1820+ JSON . parse ( postponedState ) ,
1821+ {
1822+ signal : controller2 . signal ,
1823+ onError ( x ) {
1824+ errors . push ( x . message ) ;
1825+ } ,
1826+ } ,
1827+ ) ;
1828+ } ) ;
1829+
1830+ controller2 . abort ( ) ;
1831+
1832+ const prerendered2 = await pendingResult ;
1833+ const postponedState2 = JSON . stringify ( prerendered2 . postponed ) ;
1834+
1835+ await readIntoContainer ( prerendered2 . prelude ) ;
1836+ expect ( getVisibleChildren ( container ) ) . toEqual ( 'Loading B' ) ;
1837+
1838+ await resolveB ( ) ;
1839+
1840+ const dynamic = await serverAct ( ( ) =>
1841+ ReactDOMFizzServer . resume ( < App /> , JSON . parse ( postponedState2 ) ) ,
1842+ ) ;
1843+
1844+ await readIntoContainer ( dynamic ) ;
1845+ expect ( getVisibleChildren ( container ) ) . toEqual ( 'Hello' ) ;
1846+ } ) ;
17611847} ) ;
0 commit comments