@@ -1758,4 +1758,88 @@ describe('ReactDOMFizzStaticBrowser', () => {
1758
1758
await readIntoContainer ( dynamic ) ;
1759
1759
expect ( getVisibleChildren ( container ) ) . toEqual ( 'hello' ) ;
1760
1760
} ) ;
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
+ const controller2 = new AbortController ( ) ;
1815
+ await serverAct ( async ( ) => {
1816
+ pendingResult = ReactDOMFizzStatic . resumeAndPrerender (
1817
+ < App /> ,
1818
+ JSON . parse ( postponedState ) ,
1819
+ {
1820
+ signal : controller2 . signal ,
1821
+ onError ( x ) {
1822
+ errors . push ( x . message ) ;
1823
+ } ,
1824
+ } ,
1825
+ ) ;
1826
+ } ) ;
1827
+
1828
+ controller2 . abort ( ) ;
1829
+
1830
+ const prerendered2 = await pendingResult ;
1831
+ const postponedState2 = JSON . stringify ( prerendered2 . postponed ) ;
1832
+
1833
+ await readIntoContainer ( prerendered2 . prelude ) ;
1834
+ expect ( getVisibleChildren ( container ) ) . toEqual ( 'Loading B' ) ;
1835
+
1836
+ await resolveB ( ) ;
1837
+
1838
+ const dynamic = await serverAct ( ( ) =>
1839
+ ReactDOMFizzServer . resume ( < App /> , JSON . parse ( postponedState2 ) ) ,
1840
+ ) ;
1841
+
1842
+ await readIntoContainer ( dynamic ) ;
1843
+ expect ( getVisibleChildren ( container ) ) . toEqual ( 'Hello' ) ;
1844
+ } ) ;
1761
1845
} ) ;
0 commit comments