import { createPasteEvent, parseClipboard, serializeAsClipboardJSON, } from "./clipboard"; import { API } from "./tests/helpers/api"; describe("parseClipboard()", () => { it("should parse JSON as plaintext if not excalidraw-api/clipboard data", async () => { let text; let clipboardData; // ------------------------------------------------------------------------- text = "123"; clipboardData = await parseClipboard( createPasteEvent({ types: { "text/plain": text } }), ); expect(clipboardData.text).toBe(text); // ------------------------------------------------------------------------- text = "[123]"; clipboardData = await parseClipboard( createPasteEvent({ types: { "text/plain": text } }), ); expect(clipboardData.text).toBe(text); // ------------------------------------------------------------------------- text = JSON.stringify({ val: 42 }); clipboardData = await parseClipboard( createPasteEvent({ types: { "text/plain": text } }), ); expect(clipboardData.text).toBe(text); }); it("should parse valid excalidraw JSON if inside text/plain", async () => { const rect = API.createElement({ type: "rectangle" }); const json = serializeAsClipboardJSON({ elements: [rect], files: null }); const clipboardData = await parseClipboard( createPasteEvent({ types: { "text/plain": json, }, }), ); expect(clipboardData.elements).toEqual([rect]); }); it("should parse valid excalidraw JSON if inside text/html", async () => { const rect = API.createElement({ type: "rectangle" }); let json; let clipboardData; // ------------------------------------------------------------------------- json = serializeAsClipboardJSON({ elements: [rect], files: null }); clipboardData = await parseClipboard( createPasteEvent({ types: { "text/html": json, }, }), ); expect(clipboardData.elements).toEqual([rect]); // ------------------------------------------------------------------------- json = serializeAsClipboardJSON({ elements: [rect], files: null }); clipboardData = await parseClipboard( createPasteEvent({ types: { "text/html": `
`,
},
}),
);
expect(clipboardData.mixedContent).toEqual([
{
type: "imageUrl",
value: "https://example.com/image.png",
},
]);
// -------------------------------------------------------------------------
clipboardData = await parseClipboard(
createPasteEvent({
types: {
"text/html": `
`,
},
}),
);
expect(clipboardData.mixedContent).toEqual([
{
type: "imageUrl",
value: "https://example.com/image.png",
},
{
type: "imageUrl",
value: "https://example.com/image2.png",
},
]);
});
it("should parse text content alongside 