File size: 1,458 Bytes
6c30253
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import test from 'node:test';
import assert from 'node:assert/strict';
import { imageFilesFromClipboard, imageFilesFromDataTransfer } from '../src/image-input.js';

test('extracts one or more image files from clipboard items', () => {
  const first = { name: 'first.png', type: 'image/png' };
  const second = { name: 'second.jpg', type: 'image/jpeg' };
  const files = imageFilesFromClipboard({
    items: [
      { kind: 'string', type: 'text/plain', getAsFile: () => null },
      { kind: 'file', type: 'image/png', getAsFile: () => first },
      { kind: 'file', type: 'application/pdf', getAsFile: () => ({ type: 'application/pdf' }) },
      { kind: 'file', type: 'image/jpeg', getAsFile: () => second },
    ],
  });
  assert.deepEqual(files, [first, second]);
});

test('falls back to clipboard files and ignores non-images', () => {
  const image = { name: 'screenshot.webp', type: 'image/webp' };
  const files = imageFilesFromClipboard({
    files: [image, { name: 'notes.txt', type: 'text/plain' }],
  });
  assert.deepEqual(files, [image]);
  assert.deepEqual(imageFilesFromClipboard(null), []);
});

test('extracts only image files from a drag data transfer', () => {
  const image = { name: 'photo.png', type: 'image/png' };
  const files = imageFilesFromDataTransfer({ files: [
    { name: 'notes.txt', type: 'text/plain' },
    image,
  ] });
  assert.deepEqual(files, [image]);
  assert.deepEqual(imageFilesFromDataTransfer(null), []);
});