Browse Source

test(web): cover preview import recovery and color schemes

Yudong 1 month ago
parent
commit
516bfd5f30

+ 12 - 0
packages/client/ui-primitives/tests/fence-previews.client.spec.tsx

@@ -81,6 +81,18 @@ describe('Markdown fence previews', () => {
 })
 })
 
 
 describe('static preview documents', () => {
 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('<h1>Example</h1>', 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', () => {
   it('preserves HTML styling while removing scripts, navigation, and nested documents', () => {
     const doc = renderHtml(`<!doctype html><html><head><style>h1 { color: green }</style>
     const doc = renderHtml(`<!doctype html><html><head><style>h1 { color: green }</style>
       <meta http-equiv="refresh" content="0;url=https://example.com"><base href="https://example.com"></head>
       <meta http-equiv="refresh" content="0;url=https://example.com"><base href="https://example.com"></head>

+ 11 - 0
packages/client/ui-primitives/tests/mermaid-runtime.client.spec.ts

@@ -13,6 +13,17 @@ beforeEach(() => {
 afterEach(() => { vi.doUnmock('mermaid') })
 afterEach(() => { vi.doUnmock('mermaid') })
 
 
 describe('Mermaid runtime', () => {
 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: '<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 () => {
   it('accepts native configuration without weakening preview restrictions', async () => {
     const { renderMermaid } = await import('../src/markdown/mermaid.ts')
     const { renderMermaid } = await import('../src/markdown/mermaid.ts')
     renderDiagram.mockResolvedValue({ svg: '<svg/>' })
     renderDiagram.mockResolvedValue({ svg: '<svg/>' })