'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const { shouldRestoreClipboard, snapshotClipboard, writeSnapshot, inputStructSize } = require('../src/main/paste');
test('Win32 INPUT 结构按 64 位对齐是 40 字节', { skip: process.platform !== 'win32' }, () => {
assert.equal(inputStructSize(), 40);
});
test('换行差异不影响“是不是我们写进去的”判断', () => {
assert.equal(shouldRestoreClipboard('a\r\nb', 'a\nb'), true);
assert.equal(shouldRestoreClipboard('user copied', 'translation'), false);
});
test('剪贴板快照能带回文本、HTML、RTF 和图片', () => {
const image = { isEmpty: () => false, id: 'img' };
const written = [];
const clipboard = {
text: 'old',
html: 'old',
rtf: '{\\rtf old}',
image,
readText: () => clipboard.text,
readHTML: () => clipboard.html,
readRTF: () => clipboard.rtf,
readImage: () => clipboard.image,
writeText: (value) => {
clipboard.text = value;
},
write: (payload) => written.push(payload),
clear: () => written.push('clear'),
};
const snap = snapshotClipboard(clipboard);
clipboard.writeText('translated');
assert.equal(shouldRestoreClipboard(clipboard.readText(), 'translated'), true);
writeSnapshot(clipboard, snap);
assert.equal(written[0].text, 'old');
assert.equal(written[0].html, 'old');
assert.equal(written[0].rtf, '{\\rtf old}');
assert.equal(written[0].image, image);
clipboard.readText = () => 'user copied later';
assert.equal(shouldRestoreClipboard(clipboard.readText(), 'translated'), false);
});