From 516bfd5f30fd4d388fddb7f73da9f4bc38b923eb Mon Sep 17 00:00:00 2001 From: Yudong Date: Wed, 9 Sep 2026 19:49:56 +0800 Subject: [PATCH] test(web): cover preview import recovery and color schemes --- .../tests/fence-previews.client.spec.tsx | 12 ++++++++++++ .../tests/mermaid-runtime.client.spec.ts | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/client/ui-primitives/tests/fence-previews.client.spec.tsx b/packages/client/ui-primitives/tests/fence-previews.client.spec.tsx index f7fe436821..cc240f75c1 100644 --- a/packages/client/ui-primitives/tests/fence-previews.client.spec.tsx +++ b/packages/client/ui-primitives/tests/fence-previews.client.spec.tsx @@ -81,6 +81,18 @@ describe('Markdown fence previews', () => { }) describe('static preview documents', () => { + it.each(['light', 'dark'])('uses the document %s color scheme for HTML previews', (scheme) => { + const previous = document.documentElement.style.colorScheme + try { + document.documentElement.style.colorScheme = scheme + const doc = renderHtml('

Example

', new AbortController().signal) + const parsed = new DOMParser().parseFromString(doc, 'text/html') + expect(parsed.documentElement.style.colorScheme).toBe(scheme) + } finally { + document.documentElement.style.colorScheme = previous + } + }) + it('preserves HTML styling while removing scripts, navigation, and nested documents', () => { const doc = renderHtml(` diff --git a/packages/client/ui-primitives/tests/mermaid-runtime.client.spec.ts b/packages/client/ui-primitives/tests/mermaid-runtime.client.spec.ts index 863abde53d..c5a4ccd6d3 100644 --- a/packages/client/ui-primitives/tests/mermaid-runtime.client.spec.ts +++ b/packages/client/ui-primitives/tests/mermaid-runtime.client.spec.ts @@ -13,6 +13,17 @@ beforeEach(() => { afterEach(() => { vi.doUnmock('mermaid') }) describe('Mermaid runtime', () => { + it('allows another attempt after the runtime import fails', async () => { + vi.doMock('mermaid', () => { throw new Error('runtime unavailable') }) + const { renderMermaid } = await import('../src/markdown/mermaid.ts') + await expect(renderMermaid('first', new AbortController().signal)).rejects.toThrow() + expect(initialize).not.toHaveBeenCalled() + vi.doMock('mermaid', () => ({ default: { initialize, render: renderDiagram } })) + renderDiagram.mockResolvedValue({ svg: '' }) + await expect(renderMermaid('retry', new AbortController().signal)).resolves.toContain('data:image/svg+xml') + expect(renderDiagram).toHaveBeenCalledOnce() + }) + it('accepts native configuration without weakening preview restrictions', async () => { const { renderMermaid } = await import('../src/markdown/mermaid.ts') renderDiagram.mockResolvedValue({ svg: '' })