fix: v0.10.4 快照对照对称防呆收官、搜索高亮重定位、快照保存中断与TB档 - 快照自身truncated拦截加载(与保存侧/当前侧对称的三侧防对照误报收官,截断快照缺失文件不再误报新文件)、切选项/换文件重算后搜索计数与active高亮自动钳制重定位(rows重建行id重新编号不再脱节,命中归零清空高亮)、保存世代号作废在途快照保存(退出文件夹对比不再在单文件空态弹保存对话框,遮罩即时复位,0.10.2按钮防抖与遮罩不拦截交互设计不变)、fmtSize补TB档(TB级文件不再显示1024.0GB,0.10.3档位延续),新增5单测与1条E2E(639单测+E2E 30全过覆盖率98.16/93.5/94.04/98.16),文档四件套同步

This commit is contained in:
2026-08-19 21:11:49 +08:00
parent 3ca18364cf
commit c45e388fec
10 changed files with 225 additions and 21 deletions
+42
View File
@@ -702,6 +702,48 @@ test.describe('文件夹对比(主进程真实扫描链路)', () => {
await removeTmpDir(root)
}
})
test('加载自身截断的快照被拦截(手工构造快照的对称防呆,0.10.4)', async () => {
const root = await makeTmpDir('difflens-e2e-snaptrunc-')
try {
const leftDir = join(root, 'left')
const rightDir = join(root, 'right')
const { mkdir, writeFile: wf } = await import('fs/promises')
await mkdir(leftDir, { recursive: true })
await mkdir(rightDir, { recursive: true })
await wf(join(leftDir, 'same.txt'), 'identical')
await wf(join(rightDir, 'same.txt'), 'identical')
// 手工构造截断快照(自家保存链路在截断时已拦截,此形态仅来自外部):
// 截断快照缺失的文件会被全部误报为"新文件",加载时须拦截
const snap = {
version: 2,
leftDir,
rightDir,
semantic: true,
truncated: true,
total: 9999,
entries: [{ rel: 'same.txt', status: 'same', leftSize: 9, rightSize: 9 }],
savedAt: Date.now()
}
const snapPath = join(root, 'truncated-snapshot.json')
await wf(snapPath, JSON.stringify(snap), 'utf-8')
const { app, window } = await launchApp()
// 对话框调用序:folder:pick 左 → folder:pick 右 → snapshot:read 快照
await stubOpenDialogSeq(app, [[leftDir], [rightDir], [snapPath]])
await window.getByRole('button', { name: '对比文件夹' }).click()
await expect(window.getByText('相同 1')).toBeVisible()
await window.getByRole('button', { name: '加载快照' }).click()
// 拦截提示出现,不进入对照模式
await expect(window.getByText(/条目不完整无法对照/)).toBeVisible()
await expect(window.getByText(/已加载快照/)).toHaveCount(0)
await expect(window.getByRole('button', { name: '退出对照' })).toHaveCount(0)
await app.close()
} finally {
await removeTmpDir(root)
}
})
})
test.describe('拖拽导入(真实 Chromium DataTransfer 链路)', () => {