diff --git a/packages/react-client/src/__tests__/ReactFlight-test.js b/packages/react-client/src/__tests__/ReactFlight-test.js index d642a02c8c6..f73dae615cf 100644 --- a/packages/react-client/src/__tests__/ReactFlight-test.js +++ b/packages/react-client/src/__tests__/ReactFlight-test.js @@ -727,6 +727,25 @@ describe('ReactFlight', () => { }); }); + it('can transport cyclic arrays', async () => { + function ComponentClient({prop, obj}) { + expect(prop[1]).toBe(prop); + expect(prop[0]).toBe(obj); + } + const Component = clientReference(ComponentClient); + + const obj = {}; + const cyclic = [obj]; + cyclic[1] = cyclic; + const model = ; + + const transport = ReactNoopFlightServer.render(model); + + await act(async () => { + ReactNoop.render(await ReactNoopFlightClient.read(transport)); + }); + }); + it('can render a lazy component as a shared component on the server', async () => { function SharedComponent({text}) { return ( diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReply-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReply-test.js index 2181eb5fe70..409718973be 100644 --- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReply-test.js +++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMReply-test.js @@ -650,6 +650,17 @@ describe('ReactFlightDOMReply', () => { expect(root.prop.obj).toBe(root.prop); }); + it('can transport cyclic arrays', async () => { + const obj = {}; + const cyclic = [obj]; + cyclic[1] = cyclic; + + const body = await ReactServerDOMClient.encodeReply({prop: cyclic, obj}); + const root = await ReactServerDOMServer.decodeReply(body, webpackServerMap); + expect(root.prop[1]).toBe(root.prop); + expect(root.prop[0]).toBe(root.obj); + }); + it('can abort an unresolved model and get the partial result', async () => { const promise = new Promise(r => {}); const controller = new AbortController();