diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js index d0630287dbf8b..e9bdc4b6db33d 100644 --- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js +++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js @@ -247,6 +247,55 @@ describe('ReactFlightDOMBrowser', () => { expect(container.innerHTML).toBe('Hello, World!'); }); + it('should resolve deduped objects within the same model root when it is blocked', async () => { + let resolveClientComponentChunk; + + const ClientOuter = clientExports(function ClientOuter({Component, value}) { + return ; + }); + + const ClientInner = clientExports( + function ClientInner({value}) { + return
{JSON.stringify(value)}
; + }, + '42', + '/test.js', + new Promise(resolve => (resolveClientComponentChunk = resolve)), + ); + + function Server({value}) { + return ; + } + + const shared = [1, 2, 3]; + const value = [shared, shared]; + + const stream = ReactServerDOMServer.renderToReadableStream( + , + webpackMap, + ); + + function ClientRoot({response}) { + return use(response); + } + + const response = ReactServerDOMClient.createFromReadableStream(stream); + const container = document.createElement('div'); + const root = ReactDOMClient.createRoot(container); + + await act(() => { + root.render(); + }); + + expect(container.innerHTML).toBe(''); + + await act(() => { + resolveClientComponentChunk(); + }); + + expect(container.innerHTML).toBe('
[[1,2,3],[1,2,3]]
'); + }); + it('should progressively reveal server components', async () => { let reportedErrors = [];