build: 版本提升至 0.5.3 并同步文档(演进记录/README/测试策略)
This commit is contained in:
+15
-2
@@ -42,6 +42,10 @@
|
||||
|
||||
```
|
||||
vitest.config.ts # Vitest 配置(jsdom + 测试范围 + 覆盖率 80% 硬门禁)
|
||||
src/main/
|
||||
├── index.ts # 主进程入口(依赖 electron 运行时,覆盖率排除,随发布人工自测)
|
||||
├── windowState.ts # 应用状态持久化纯逻辑(bounds 校验/钳制,无 electron 依赖)
|
||||
└── windowState.test.ts # 应用状态单元测试(解析回退/工作区钳制/最小尺寸)
|
||||
src/renderer/src/
|
||||
├── test/
|
||||
│ └── setup.ts # 全局 setup:jest-dom 匹配器 + 自动 cleanup
|
||||
@@ -53,7 +57,7 @@ src/renderer/src/
|
||||
│ ├── report.test.ts # 报告生成测试
|
||||
│ └── textUtils.test.ts # 文本扩展名与行数统计测试
|
||||
├── hooks/
|
||||
│ ├── useDiff.test.ts # worker 化计算 hook(快路径/去抖/过期丢弃/回退/卸载清理)
|
||||
│ ├── useDiff.test.ts # worker 化计算 hook(快路径/去抖/过期丢弃/回退/卸载清理/字符级大字符量重路径)
|
||||
│ ├── useDiff.ts
|
||||
│ └── useDismiss.ts
|
||||
├── components/
|
||||
@@ -62,7 +66,7 @@ src/renderer/src/
|
||||
│ ├── TextInputModal.test.tsx # 粘贴文本弹窗
|
||||
│ └── Toolbar.test.tsx # 工具栏(选项/导航/导出菜单向上弹出/计算中禁用/字符级开关与空白选项联动置灰)
|
||||
└── __tests__/
|
||||
├── App.test.tsx # 应用集成级测试(加载/拖拽/粘贴/导出/容错/大输入回退)
|
||||
├── App.test.tsx # 应用集成级测试(加载/拖拽/粘贴/导出/容错/toast 队列/清空确认/状态栏行数/大输入回退)
|
||||
└── main.test.ts # 入口挂载冒烟测试
|
||||
```
|
||||
|
||||
@@ -109,6 +113,9 @@ src/renderer/src/
|
||||
- 仅看差异视图:未更改行折叠、折叠提示出现、关闭后恢复
|
||||
- F7 / Shift+F7 导航快捷键;粘贴弹窗打开时快捷键不抢占
|
||||
- 交换左右侧后面板文件互换
|
||||
- toast 队列:连续多条提示同时可见不互顶 / 各自独立计时消失 / 超过上限顶掉最旧 / 动作按钮点击后该条立即关闭 / 二进制预警与行数预警共存
|
||||
- 清空二次确认:有内容时第一次点击仅提示不清空 / 确认窗口内再点执行清空 / 超时自动复位(再点仍先提示)/ 空态点击不弹确认
|
||||
- 状态栏行数:单侧/双侧加载显示对应行数(切分与引擎一致)/ 清空后随空态消失
|
||||
- 偏好持久化(比较选项 + 仅看差异开关):启动时恢复上次保存的状态(选项勾选与视图折叠生效)/ 损坏 JSON 回退默认且不崩溃 / 非布尔字段防御性忽略 / 切换选项后写回存储(用例间 beforeEach 清理 localStorage 防串扰)
|
||||
- 字符级对比:跨行重组开启后判为完全一致;开启时三个空白选项禁用;内容超限自动降级并 toast 提示;导出报告携带字符级说明;降级后报告按实际生效的行级语义描述选项
|
||||
- 忽略所有空白:仅行内空白不同的两侧文本开启后判为完全一致;导出报告携带比较选项说明
|
||||
@@ -117,12 +124,18 @@ src/renderer/src/
|
||||
### 5.6 diff 计算 worker 化(`useDiff.ts` / `createDiffWorker.ts`)
|
||||
- 快路径:两侧总行数不超过 2000 时同步计算,不创建 worker,结果与 computeDiff 一致
|
||||
- 重路径:进入 computing 且 diff 置空;200ms 去抖到期后才创建 worker 并派发;响应按 jobId 匹配,错误/过期 jobId 被丢弃
|
||||
- 字符级大字符量重路径:charMode 开启且两侧字符总量超过阈值(少行大文件,行数维度防不住 diffChars 耗时)同样进入重路径;未超阈值/charMode 关闭不受影响;恰好阈值不触发
|
||||
- 输入变更:已派发的旧 worker 终止重建(等价取消);去抖期内变更则旧任务未创建即取消(零创建与计算开销)
|
||||
- worker 不可用(环境缺失/工厂返回 null):去抖到期后主线程同步回退
|
||||
- 卸载:去抖期内卸载则 worker 从未创建;去抖到期后卸载则终止 worker,去抖定时器均被清理
|
||||
- worker 运行崩溃(onerror 兜底):终止实例并回退主线程同步计算(computing 不再永久卡死);迟到错误(effect 已取消 / jobId 已推进)只终止不回填,新任务结果正常生效
|
||||
- 工厂:无 Worker 环境返回 null;可用环境返回实例
|
||||
|
||||
### 5.7 应用状态持久化(`src/main/windowState.ts`)
|
||||
- parseState:空输入/非法 JSON 回退空状态;合法 bounds 与 lastDir 保留;字段类型异常(非矩形/非字符串/空串/非有限数值)防御性忽略
|
||||
- clampBounds:工作区内合法 bounds 原样保留;小于最小尺寸钳到最小值;超出工作区封顶;移出屏幕四向拉回(至少 60px 进入工作区);多显示器偏移工作区同样钳制;非整数取整;工作区小于最小尺寸时尺寸仍保持最小值
|
||||
- 磁盘读写与窗口事件绑定在主进程入口(覆盖率排除,随发布人工自测)
|
||||
|
||||
---
|
||||
|
||||
## 6. 运行命令
|
||||
|
||||
Reference in New Issue
Block a user