From 108ae1c822402cca76ab5ee8ec5acd61ba77b121 Mon Sep 17 00:00:00 2001 From: Farnabaz Date: Fri, 21 Aug 2026 15:01:24 +0200 Subject: [PATCH] test: cover in-place streamed code block content updates Add a regression test from #583 ensuring fenced code blocks re-render when their content changes without moving in the document. Co-authored-by: Kinfe123 --- .../__tests__/code-block-memo.test.tsx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/streamdown/__tests__/code-block-memo.test.tsx b/packages/streamdown/__tests__/code-block-memo.test.tsx index 4c8675df..3bb020e3 100644 --- a/packages/streamdown/__tests__/code-block-memo.test.tsx +++ b/packages/streamdown/__tests__/code-block-memo.test.tsx @@ -18,6 +18,30 @@ vi.mock("../lib/code-block", () => ({ })); describe("MemoCode in streaming mode", () => { + it("should re-render code blocks when their content changes in place", async () => { + codeBlockRenderCount = 0; + + const initial = "```js\nfirst\n```"; + const updated = "```js\nsecond\n```"; + + const { container, rerender } = render({initial}); + + await waitFor(() => { + expect(container.textContent).toContain("first"); + }); + + const initialRenderCount = codeBlockRenderCount; + + rerender({updated}); + + await waitFor(() => { + expect(container.textContent).toContain("second"); + }); + + expect(container.textContent).not.toContain("first"); + expect(codeBlockRenderCount).toBeGreaterThan(initialRenderCount); + }); + it("should not re-render unchanged code blocks on streaming updates", async () => { codeBlockRenderCount = 0;