当前自动化由 TypeScript 静态检查、前端生产构建和 Rust 单元测试组成:
npm.cmd run check
npm.cmd run test:frontend
npm.cmd run build
cargo test --manifest-path src-tauri/Cargo.tomltest:frontend 为每项测试设置 30 秒超时。自动化流程只运行纯 Node 测试、静态检查、有限构建和 Rust 测试,不启动 Vite/Tauri 开发服务器,也不依赖后台服务或端口探测;需要交互检查时只使用 Release EXE,并由执行者显式限时和关闭进程。
正式交付还必须执行:
npm.cmd run release并短暂启动 src-tauri/target/release/eraw.exe,确认嵌入前端资源的独立 EXE 不会启动即退出。
V0.6.1 当前源码包含 48 项 Rust 测试,重点分为:
| 分类 | 已覆盖内容 |
|---|---|
| 布局与解码 | 行/帧对齐、部分帧、MIPI RAW10/12/14、奇数位深、大小端与 MSB |
| CFA | 标准/Quad 站点、Gb/Gr、Phase、裁剪后的排列 |
| 预览 | 缺失数据、L0/L1+、结构保持 LOD、跨瓦片边界、显式黑白点量化、非法窗口拒绝、Demosaic 层级稳定 |
| Remosaic | 4×4 重排可逆、同色重建、处理后 Bayer 预览 |
| 任务控制 | 过期瓦片与 RAW 自动范围协作取消、像素检查请求上限;自动范围精确 P1/P99、缺失排除与平坦帧回退 |
| 文件释放 | Windows 下关闭文档后释放内存映射,允许独占打开和重命名源文件 |
| 导出 | 位深映射、缺失填充、原始/重排/Demosaic、相位和端序;取消任务不会替换已有目标文件,并行测试使用唯一临时路径 |
| 输出写入 | PNG 共用的原子字节写入可创建文件并安全替换已有文件 |
| 图像统计 | MONO 已知矩阵、population variance、missing、绝对坐标 ROI、Bayer Phase、QCFA 16 原子平面合并和协作取消 |
测试目标是验证数据语义和边界条件;不使用“测试图看起来好看”替代数值断言。
前端没有通用端到端测试框架。test:frontend 使用 Node 内置测试运行器和项目已有的 TypeScript 编译器,覆盖持久化 RAW 参数校验与尺寸边界、应用设置、主题、显式国际化键、键盘菜单与参数提示、快捷键精确修饰键匹配、CFA 相关主要显示模式循环、“关于”品牌与仓库链接、独立帮助窗口的 F1/菜单入口及状态同步、七语分篇技术手册目录完整性与即时重建、LaTeX 特殊字符转义到原生 MathML 的公式管线、论文式全宽布局、四色语义说明框、独立窗口右键禁用、通用字体族策略、WebGL 上下文恢复、全显示链路共用的黑白点/自动范围/曝光与 PNG 一致性、导出进度与取消契约,以及既有的文档、视口、抓拍和图像统计行为;其中包含 16-bit 六通道 Histogram、25000 点 Profile、尖峰保真降采样、局部原始点恢复、尺寸变化范围去重,以及真实采样坐标标记阈值的专门回归。tsc --noEmit 与 Vite 生产构建继续负责类型、资源和打包检查。以下行为仍以人工验证为主:
- 缩放锚点、拖动、滚动条、十字准星和坐标定位。
- 参数栏伸缩、左右布局、悬停提示和输入提交时机。
- 九套主题、不同字号、高 DPI 和异形窗口尺寸。
- 七种语言的即时切换、菜单自称、对话框翻译,以及 960×640 最小窗口中的长文本溢出。
- 帮助菜单和
F1打开、聚焦唯一使用手册窗口;九套主题下的论文式全宽正文、MathML 公式、四色语义说明框、双栏目录和窄窗口布局;依次切换七种语言时,窗口标题、目录、当前篇章、正文、公式标签和前后篇导航应即时更新且不回到首页。 - F11 进入全屏后窗口覆盖当前显示器、Windows 边框与任务栏隐藏,图像观察中心和缩放比例保持不变;再次按 F11 后窗口尺寸、位置和图像观察中心恢复。
Ctrl+W关闭文件后可立即重命名、覆盖或删除原文件,画布和文件相关状态清空,再次打开文件时保留 RAW 参数与处理配置。- 诊断覆盖层、导出字段联动、对话框和键盘操作。
- 多帧文件中
[/]的首尾钳制,以及 Bayer/QCFA 下M/Shift+M的双向循环;输入控件、弹出菜单和模态对话框打开时不得误触画布快捷键,带多余修饰键的组合不得命中已有命令。 - LOD 切换时 RAW/CFA/Remosaic 的主观连续性。
- “画面呈现”在侧边栏宽度上下限、九套主题和七种语言下的排版;通道颜色/灰度、像素值策略、像素网格颜色、深浅棋盘及自定义纯色的即时切换和重启恢复。
- 统一显示曝光、黑白点和 P1/P99 在 RAW/CFA/Remosaic/Demosaic/R/G/B 间切换时应保持同一状态和 DN 映射;检查减小/增加步进、手动输入、换帧、位深修改和新文件边界,以及自动范围的忙碌/取消/平坦帧反馈、极端窗口与
-8/+8 EV、端点按钮禁用、最小侧栏宽度和当前画面/完整预览 PNG 一致性。 - 缺失数据棋盘在各 LOD、瓦片边界和拖动过程中的相位连续性;纯色只影响文件内缺失像素,图像边界外仍透明。
- Demosaic 主项与 R/G/B 子项在 960px 最小窗口、七种语言和九套主题下的层级、配色及键盘焦点。
- 非画布区域和未打开文件时不出现右键菜单;当前画面与完整预览图的四项保存/复制操作、输出尺寸、背景和叠加层语义正确。
- 图像统计底部/侧方/独立窗口往返、侧方约三分之二宽度限位、连续右键 ROI 框选、右键单击菜单分流、坐标输入错误提示、每图曲线局部切换,以及九套主题下悬停前后曲线样式不变、Tooltip 与采样点正常、
Ctrl/Shift/组合滚轮缩放、普通滚轮页面滚动、手动横轴范围、图表高度分隔线和格式成功刷新与失败回滚。
每次涉及 RAW、视口或导出时,至少选择小图和大图各一例:
- 标准 Bayer Unpacked16,检查 L0、适应窗口、连续缩放和 Demosaic。
- MIPI RAW10/14,检查 packing、行/帧对齐和瓦片边界。
- Quad CFA,检查四种排列、Phase、仅重排和同色重建。
- MONO,确认只显示 RAW 强度。
- 不完整帧或短数据,确认可显示内容、诊断和停止重试。
- 当前帧三类导出,核对文件大小、CFA 语义和缺失填充统计。
- 依次切换七种语言,检查主窗口、主题菜单、设置、快捷键、关于和导出窗口;英文、西班牙文、法文、德文界面不应残留非专有名称的中文。
瓦片边界回归应包含 1920×1080 MIPI RAW14 Quad RGGB 小图,在适应窗口且状态栏显示 L0 · 100% 时依次检查 RAW、CFA 与 Remosaic,重点观察源图像第 256、512、768、1024 行附近;切换“实际像素”前后不应改变行相位。同时保留大分辨率样本用于确认高层 LOD 行为未受影响。
超大分辨率、偶发瓦片刷新和视觉质量适合人工测试;除非能够建立稳定、可解释的数值夹具,不强求高成本的截图自动化。
- 没有浏览器级交互回归和视觉快照。
- 没有固定硬件上的渲染耗时基线。
- 图像统计尚无固定 RAW 夹具驱动的桌面端端到端测试;数值语义由 Rust 已知矩阵测试负责,16-bit 大数据图表边界由前端数据层测试负责,窗口与输出仍需人工回归。
- 25000×20000 是当前前端参数边界,不代表已对所有存储格式完成该尺寸的资源压力测试;超大图的进一步并行和内存优化留待后续迭代。