SnowLuma v2.4.2 source snapshot
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
This commit is contained in:
commit
fa9c73363d
1367 files changed
+355735
No files matched your search
@@ -0,0 +1,56 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||
import { copyText } from '../src/lib/utils';
|
||||
|
||||
afterEach(() => vi.unstubAllGlobals());
|
||||
|
||||
describe('copyText', () => {
|
||||
it('uses the clipboard API without creating a temporary element', async () => {
|
||||
const writeText = vi.fn().mockResolvedValue(undefined);
|
||||
vi.stubGlobal('navigator', { clipboard: { writeText } });
|
||||
vi.stubGlobal('document', undefined);
|
||||
|
||||
await expect(copyText('hello')).resolves.toBe(true);
|
||||
expect(writeText).toHaveBeenCalledWith('hello');
|
||||
});
|
||||
|
||||
it.each(['success', 'rejected', 'focus throws', 'copy throws'])(
|
||||
'removes the temporary element after legacy copy: %s',
|
||||
async (outcome) => {
|
||||
const children = new Set<unknown>();
|
||||
const host = {
|
||||
appendChild: (child: unknown) => children.add(child),
|
||||
removeChild: (child: unknown) => children.delete(child),
|
||||
};
|
||||
const textarea = {
|
||||
value: '',
|
||||
style: {},
|
||||
setAttribute: vi.fn(),
|
||||
setSelectionRange: vi.fn(),
|
||||
focus: () => {
|
||||
if (outcome === 'focus throws') {
|
||||
throw new Error('focus unavailable');
|
||||
}
|
||||
},
|
||||
remove: () => children.delete(textarea),
|
||||
};
|
||||
vi.stubGlobal('navigator', {
|
||||
clipboard: { writeText: vi.fn().mockRejectedValue(new Error('permission denied')) },
|
||||
});
|
||||
vi.stubGlobal('document', {
|
||||
body: host,
|
||||
createElement: () => textarea,
|
||||
querySelector: () => host,
|
||||
execCommand: () => {
|
||||
if (outcome === 'copy throws') {
|
||||
throw new Error('copy unavailable');
|
||||
}
|
||||
|
||||
return outcome === 'success';
|
||||
},
|
||||
});
|
||||
|
||||
await expect(copyText('hello')).resolves.toBe(outcome === 'success');
|
||||
expect(children.size).toBe(0);
|
||||
},
|
||||
);
|
||||
});
|
||||
Reference in new issue
Block a user