58 lines · 1.9 KB · TypeScript
RawDownload
import { afterEach, describe, expect, it, vi } from "vite-plus/test"; import {  ClipboardApiUnavailableError,  ClipboardWriteError,  writeTextToClipboard,} from "./useCopyToClipboard"; describe("writeTextToClipboard", () => {  afterEach(() => {    vi.unstubAllGlobals();  });   it("reports unavailable clipboard support with structural context", async () => {    vi.stubGlobal("window", {});    vi.stubGlobal("navigator", {});     const error = await writeTextToClipboard("plan contents", "plan").then(      () => undefined,      (cause: unknown) => cause,    );     expect(error).toBeInstanceOf(ClipboardApiUnavailableError);    expect(error).toMatchObject({      target: "plan",    });    expect((error as Error).message).not.toContain("plan contents");  });   it("preserves the exact clipboard failure without exposing copied contents", async () => {    const cause = new Error("browser clipboard failure");    const writeText = vi.fn().mockRejectedValue(cause);    vi.stubGlobal("window", {});    vi.stubGlobal("navigator", { clipboard: { writeText } });     const error = await writeTextToClipboard("secret clipboard contents", "error-message").then(      () => undefined,      (failure: unknown) => failure,    );     expect(writeText).toHaveBeenCalledWith("secret clipboard contents");    expect(error).toBeInstanceOf(ClipboardWriteError);    expect(error).toMatchObject({      target: "error-message",      cause,    });    expect((error as Error).message).not.toContain("secret clipboard contents");  });   it("keeps empty values as a no-op when clipboard support is available", async () => {    const writeText = vi.fn();    vi.stubGlobal("window", {});    vi.stubGlobal("navigator", { clipboard: { writeText } });     await expect(writeTextToClipboard("", "plan")).resolves.toBe(false);    expect(writeText).not.toHaveBeenCalled();  });});

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t