fix: v0.10.3 GB大小显示修复、主进程同步IO异步化、双进程重复逻辑收敛 - fmtSize补GB档(文件夹对比GB级文件此前显示1024.0MB)、scan-cache读盘与偏好写盘改fs.promises(IPC全异步原则补漏)、TEXT_EXTENSIONS/normDir/IGNORE_RULES_MAX收敛src/shared、安装包排除e2e与playwright配置、扫描进度E2E采样方式修稳

This commit is contained in:
2026-08-19 20:30:33 +08:00
parent 719681a366
commit 3ca18364cf
20 changed files with 267 additions and 174 deletions
+32 -22
View File
@@ -36,62 +36,72 @@ describe('isScanCacheEntries - IPC 形态校验', () => {
})
describe('resolveScanArgs - 缓存源选择与忽略规则校验', () => {
it('渲染端携带合法内存缓存:原样传递且不读盘(惰性)', () => {
it('渲染端携带合法内存缓存:原样传递且不读盘(惰性)', async () => {
const stored = storedLoader([entry('disk.txt')])
const mem = [entry('mem.txt')]
const r = resolveScanArgs(mem, undefined, stored)
const r = await resolveScanArgs(mem, undefined, stored)
expect(r.previous).toBe(mem)
expect(stored.calls).toBe(0)
})
it('内存缓存为空数组(合法形态):使用空数组,同样不注入盘上缓存', () => {
it('内存缓存为空数组(合法形态):使用空数组,同样不注入盘上缓存', async () => {
// 空数组是同目录上次扫描的最新形态(如空目录对),应优先于可能过期的盘上缓存
const stored = storedLoader([entry('disk.txt')])
const r = resolveScanArgs([], undefined, stored)
const r = await resolveScanArgs([], undefined, stored)
expect(r.previous).toEqual([])
expect(stored.calls).toBe(0)
})
it('未携带 / 形态非法的内存缓存:回退盘上缓存(惰性读盘一次)', () => {
it('未携带 / 形态非法的内存缓存:回退盘上缓存(惰性读盘一次)', async () => {
const disk = [entry('disk.txt')]
for (const bad of [undefined, null, 'x', [{ rel: 1, status: 'same' }]] as unknown[]) {
const stored = storedLoader(disk)
const r = resolveScanArgs(bad, undefined, stored)
const r = await resolveScanArgs(bad, undefined, stored)
expect(r.previous).toBe(disk)
expect(stored.calls).toBe(1)
}
})
it('盘上缓存为 null 或空数组:不注入 previous(全量扫描)', () => {
expect(resolveScanArgs(undefined, undefined, storedLoader(null)).previous).toBeUndefined()
expect(resolveScanArgs(undefined, undefined, storedLoader([])).previous).toBeUndefined()
it('盘上缓存为 null 或空数组:不注入 previous(全量扫描)', async () => {
expect((await resolveScanArgs(undefined, undefined, storedLoader(null))).previous).toBeUndefined()
expect((await resolveScanArgs(undefined, undefined, storedLoader([]))).previous).toBeUndefined()
})
it('忽略规则合法字符串数组传递(空数组合法)', () => {
expect(resolveScanArgs(undefined, ['node_modules/', '*.log'], storedLoader(null)).ignore).toEqual([
it('loadStored 为异步实现(生产 fs.promises 读盘)同样正确回退', async () => {
// 0.10.3 异步化:生产 loadStored 返回 Promise,同步 stub 与异步 stub 行为一致
const disk = [entry('disk.txt')]
const asyncLoader = async (): Promise<ScanCacheEntry[] | null> => disk
const r = await resolveScanArgs(undefined, undefined, asyncLoader)
expect(r.previous).toBe(disk)
})
it('忽略规则合法字符串数组传递(空数组合法)', async () => {
expect((await resolveScanArgs(undefined, ['node_modules/', '*.log'], storedLoader(null))).ignore).toEqual([
'node_modules/',
'*.log'
])
expect(resolveScanArgs(undefined, [], storedLoader(null)).ignore).toEqual([])
expect((await resolveScanArgs(undefined, [], storedLoader(null))).ignore).toEqual([])
})
it('忽略规则非法形态(非数组/含非字符串/超条数)整体忽略', () => {
expect(resolveScanArgs(undefined, null, storedLoader(null)).ignore).toBeUndefined()
expect(resolveScanArgs(undefined, 'node_modules/', storedLoader(null)).ignore).toBeUndefined()
expect(resolveScanArgs(undefined, ['a', 42], storedLoader(null)).ignore).toBeUndefined()
it('忽略规则非法形态(非数组/含非字符串/超条数)整体忽略', async () => {
expect((await resolveScanArgs(undefined, null, storedLoader(null))).ignore).toBeUndefined()
expect((await resolveScanArgs(undefined, 'node_modules/', storedLoader(null))).ignore).toBeUndefined()
expect((await resolveScanArgs(undefined, ['a', 42], storedLoader(null))).ignore).toBeUndefined()
expect(
resolveScanArgs(
undefined,
Array.from({ length: 51 }, () => 'a'),
storedLoader(null)
(
await resolveScanArgs(
undefined,
Array.from({ length: 51 }, () => 'a'),
storedLoader(null)
)
).ignore
).toBeUndefined()
})
it('组合:内存缓存非法 + 忽略规则合法 + 盘上缓存有效', () => {
it('组合:内存缓存非法 + 忽略规则合法 + 盘上缓存有效', async () => {
const disk = [entry('disk.txt')]
const stored = storedLoader(disk)
const r = resolveScanArgs([{ rel: 'bad' }], ['dist/'], stored)
const r = await resolveScanArgs([{ rel: 'bad' }], ['dist/'], stored)
expect(r.previous).toBe(disk)
expect(r.ignore).toEqual(['dist/'])
expect(stored.calls).toBe(1)