fix: 文件夹对比收尾打磨 - 扫描内容比对受控并发化(16并发分批)、「返回文件对比」清空两侧面板修复旧对比残留、同目录防呆提示、total注释修正与README版本号补同步(0.6.1)
This commit is contained in:
@@ -168,3 +168,40 @@ describe('scanFolders - 边界与选项', () => {
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('scanFolders - 受控并发内容比对', () => {
|
||||
it('跨多个并发批次的混合状态全部判定正确且排序不变', async () => {
|
||||
const l = await mkdtemp(join(tmpdir(), 'difflens-conc-l-'))
|
||||
const r = await mkdtemp(join(tmpdir(), 'difflens-conc-r-'))
|
||||
try {
|
||||
// 40 个大小一致的条目 > 2×SCAN_CONCURRENCY(16),覆盖至少 3 个并发批次;
|
||||
// 状态混排:偶数 same / 奇数 different / 尾部两个单侧
|
||||
const total = 40
|
||||
for (let i = 0; i < total; i++) {
|
||||
const same = i % 2 === 0
|
||||
const content = same ? `c${i}` : `L${i}`
|
||||
const contentR = same ? `c${i}` : `R${i}`
|
||||
await writeFile(join(l, `f${String(i).padStart(2, '0')}.txt`), content)
|
||||
await writeFile(join(r, `f${String(i).padStart(2, '0')}.txt`), contentR)
|
||||
}
|
||||
await writeFile(join(l, 'zz-only-left.txt'), 'L')
|
||||
await writeFile(join(r, 'zz-only-right.txt'), 'R')
|
||||
|
||||
const res = await scanFolders(l, r)
|
||||
expect(res.entries).toHaveLength(total + 2)
|
||||
// 每个条目状态正确(并发写回槽位不丢不错)
|
||||
for (let i = 0; i < total; i++) {
|
||||
const rel = `f${String(i).padStart(2, '0')}.txt`
|
||||
expect(byRel(res.entries, rel)?.status).toBe(i % 2 === 0 ? 'same' : 'different')
|
||||
}
|
||||
expect(byRel(res.entries, 'zz-only-left.txt')?.status).toBe('left-only')
|
||||
expect(byRel(res.entries, 'zz-only-right.txt')?.status).toBe('right-only')
|
||||
// 排序仍为字典序(输出顺序与并发执行顺序无关)
|
||||
const rels = res.entries.map((e) => e.rel)
|
||||
expect([...rels].sort()).toEqual(rels)
|
||||
} finally {
|
||||
await rm(l, { recursive: true, force: true })
|
||||
await rm(r, { recursive: true, force: true })
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user