import { describe, expect, it } from "vitest"; import { createMarkdownClipboardContent, type MarkdownClipboardEnvironment, type RichClipboardWriter, writeMarkdownToRichClipboard, } from "./rich-clipboard"; interface RecordingClipboard { environment: MarkdownClipboardEnvironment; richWrites: Array>; plainTexts: string[]; } function createRecordingClipboard( options: { supportsHtml?: boolean; richWriteFails?: boolean } = {}, ): RecordingClipboard { const { supportsHtml = true, richWriteFails = false } = options; const richWrites: Array> = []; const plainTexts: string[] = []; const richWriter: RichClipboardWriter = { supportsHtml: () => supportsHtml, write: async (data) => { if (richWriteFails) { throw new Error("clipboard denied"); } richWrites.push(data); }, }; const environment: MarkdownClipboardEnvironment = { richWriter, writePlainText: async (text) => { plainTexts.push(text); }, }; return { environment, richWrites, plainTexts }; } describe("createMarkdownClipboardContent", () => { it("renders markdown structures to clipboard html", () => { const markdown = [ "# Heading", "", "| Name | Value |", "| --- | --- |", "| One | Two |", "", "- Parent", " - Child", "", "```ts", "const value = 1;", "```", ].join("\n"); const content = createMarkdownClipboardContent(markdown); expect(content.plainText).toBe(markdown); expect(content.html).toContain("

Heading

"); expect(content.html).toContain(""); expect(content.html).toContain("