测试结果
- 下文按日期保留当时的验证结果、环境和执行命令;旧命令不能直接当作当前仓库的操作入口,历史通过项也不代表本次重新验证。
- 当前源码为
.ts/.mts;测试执行.build/中的.js/.mjs。从仓库根目录运行时使用 npm 脚本或node scripts/run.mts,详见工程基线。
2026-10-11:文档路径与当前实现校准
- 修正源码引用的扩展名、链接标题及机器专属绝对链接;运行命令继续引用编译后的
.js/.mjs。 - 对照当前源码更新 renderer ESM 初始化、文件树打包入口、CodeMirror 历史、仓库 UI 状态、构建门禁和已交付的高亮及导出能力。
- 检查全仓 Markdown 中 245 个实际本地文件链接及 30 处标题锚点,目标均存在;排除代码示例中的占位链接。
- 文档中的 npm 脚本名称与
package.json一致;全仓 lint、UTF-8/LF 格式及git diff --check通过。 - 本次仅修改 Markdown,未重新运行单元测试、Electron 冒烟或打包;无需重启应用。
2026-10-11:Renderer 全面迁移到 ESM
- 环境:Windows、Node.js 24.11.1、Electron 43.4.0、TypeScript 6.0.3。
- 主窗口的 43 个业务模块、日志及辅助页面已改为 ESM,保留共享状态、初始化顺序和隔离配置。
- 四组严格类型检查、全仓 lint、UTF-8/LF 格式及 Git 差异检查通过。
- 完整构建回归通过,覆盖四个页面的模块脚本、静态资源、增量缓存和旧 classic 产物清理。
- 687/687 项单元测试通过,包含原有业务断言及 ESM 状态、测试访问和 HMR 回归检查。
- Electron 完整冒烟 42/42 通过,总耗时 531.06 秒。
- Vite Electron 冒烟通过:函数与 CSS 更新保留编辑器实例、选区和撤销历史,恢复写入失败时取消刷新,安全刷新恢复未保存内容。
- Windows x64 目录包构建通过,逐字节核对 ASAR 中 152 个关键文件,包含 142 个 renderer ESM 模块;旧 classic 产物未进入包。
- 修改的生产文件均不超过 600 行;两个较长测试已纳入集中提取安排。
- 未验证 macOS/Linux、真实麦克风设备和安装包安装后的运行。
2026-10-11:全仓 TypeScript 迁移
- 环境:Windows、Node.js 24.11.1、Electron 43.4.0、TypeScript 6.0.3。
- 迁移前记录:lint 通过;原有单元验证分批完成 670 项及邮箱注册 9 项。
- 严格检查覆盖 Node/Electron、浏览器模块、共享普通脚本、日志脚本和 Windows Script Host 五组配置,全部通过。
- 全仓 lint、两次完整构建回归通过;构建回归验证入口、页面资源、许可证、脚本加载顺序、删除源码后的旧产物清理,以及回收站脚本不含 CommonJS 标记。
- 全量单元测试:681/681 通过。
- 已覆盖迁移发现的三项运行差异:菜单只读 accelerator、缺省播放速率、Windows Script Host 的 CommonJS 导出标记;保留现有行为并补充回归检查。
- 编译后的同步服务启动及
/health、管理脚本生成密钥/备份/校验/恢复、首次和增量导出全部通过,验证使用隔离临时数据。 - Electron 全量冒烟:42/42 通过,包含综合场景,总耗时 613.23 秒。
- Windows x64 目录包和 NSIS 安装包构建通过;核对 ASAR 中的编译入口、编辑器、Mermaid 和许可证,应用不依赖 TypeScript 源码。
- 安装包解压至隔离临时目录后断网运行,编辑、撤销重做、高亮预览及渲染进程隔离检查通过;解压后的 ASAR 与目录包 SHA-256 一致。
- Markdown 和千文件工作区基准使用编译产物运行通过;同步负载基准复用当前验证码注册流程,不需要外部 SMTP,250 次操作通过。
- 冒烟夹具显式复制维护中的 Mermaid 多图文档;编辑器基准报告保留写入仓库
docs/benchmarks/的原有路径。 - 本轮只验证 Windows;未重新执行 macOS 打包。迁移前未记录完整 Electron 冒烟基线。
- 超过 600 行的测试统一纳入独立模块提取安排,迁移中不顺带拆分。
2026-10-08:合并 file-filter 分支冲突
- 合并收集器注册修复与错误弹窗专项隔离,保留共享应用状态及清理时停止收集器。
- 去除自动合并产生的重复导入,复用原有
app-alert专项退出分支。 - 相关单元测试:42/42 通过,覆盖冒烟运行器、文件筛选、仓库 UI 状态和工作区管理。
npm run lint、npm run build:editor、git diff --check:通过。node scripts/smoke.js app-alert quick-open tree-heading:3/3 通过。- 错误弹窗预期读取拒绝仅出现在
app-alert,通过后按现有运行器规则缩略显示。
- 错误弹窗预期读取拒绝仅出现在
2026-10-08:命令历史原生指针事件时序
- 修复
command-palette专项中命令历史工具栏拖动位置不变的偶发失败。- 与现有面板拖动测试一致,在原生移动、按下及释放之间留出处理时间,确保指针捕获先于拖动。
- 逐步等待命令按钮到悬浮操作区的移动,避免连续移动合并后读取尚未更新的 hover 状态。
- 保留操作区命中、工具栏可见性和实际位移断言,不重试失败场景或放宽阈值。
node scripts/smoke.js command-palette:串行连续运行 5 次,全部通过,每次约 8.5 秒。- 修改文件专项 ESLint(
--no-ignore)及git diff --check:通过。
2026-10-08:隔离预期错误弹窗场景
app-alert.ts仅在独立app-alertsuite 和综合fullsuite 中执行。- 运行入口:
npm run test:smoke -- app-alert。 - 全量 runner 自动发现该专项,保留错误弹窗、队列、复制、焦点恢复和确认选择的覆盖。
- 该场景故意读取不存在的笔记;其
workspace:read拒绝堆栈仍保留,不过滤真实 IPC 日志。
- 运行入口:
- 其他专项不再重复执行错误弹窗场景,避免在每个通过的 suite 中输出相同的预期堆栈。
- 验证结果:
node scripts/smoke.js keyboard tooltip quick-open workspace-search app-alert:5/5 通过,预期目录树错误仅出现在app-alert。node --test test/smoke-runner.test.js:6 项通过,包含新 suite 自动发现检查。- 修改文件专项 ESLint(
--no-ignore)及git diff --check:通过。
2026-10-08:冒烟启动器收集器初始化
- 通用 Electron 冒烟启动器注册真实收集器 IPC,并与文件、同步处理器共用应用状态;清理 fixture 前停止收集器。
- 增加启动断言,确认渲染器能够读取初始
stopped状态,避免通过的 suite 掩盖缺失的collector:readhandler。 node scripts/smoke.js quick-open:1/1 通过,未再出现收集器 handler 缺失错误。workspace:read的目录树错误仍是预期日志:公共app-alert.ts场景故意读取missing-alert-fixture.md,验证错误弹窗及焦点恢复。- Electron 会将该 IPC 拒绝写入 stderr;suite 最终退出码和汇总才是通过与否的判据。
- 修改文件专项 ESLint(
--no-ignore)及git diff --check:通过。
2026-10-08:Windows 冒烟测试修复
- 文件树多选测试使用当前筛选器的
include规则,覆盖筛选后保留匹配选择、清除不匹配选择和空树焦点。 - 收集器布局测试通过
setContentSize设置内容宽度,避免 Windows 原生窗口边框导致视口宽度等待超时。 - 命令历史工具条拖动测试明确发送鼠标左键按下与释放,并在失败时输出拖动前后的位置。
- 综合测试补齐独立文件树标题测试已有的外部文件 fixture,验证应用筛选时重新扫描并发现该文件。
- 完成文件树场景后清空筛选,避免隐藏后续同步版本定位场景的目标文件。
- 保留原有业务、布局与拖动断言;不修改产品功能。
- 验证结果:
node scripts/smoke.js tree-multiselect collector command-palette:3/3 通过。node scripts/smoke.js full:1/1 通过,完成全部综合场景。node --test test/smoke-runner.test.js test/file-filter.test.mjs test/command-palette.test.mjs test/clipboard-collector.test.js:31 项通过。- 四个修改的 JavaScript 文件专项 ESLint(
--no-ignore)及git diff --check:通过。 - 本次复测原失败的四个 suite,未重新运行其余 36 个 suite。
2026-10-06:全量测试问题修复
修复范围
- 清理阻断 ESLint 的未使用函数与多余正则转义,明确文件名控制字符过滤的用途。
- 修复命令面板通过精确搜索选中命令后,受空查询结果上限影响而无法执行的问题。
- 修复预览重建、缓存切换及导航恢复期间的延迟滚动事件覆盖定位的问题。
- CodeMirror 测量恢复产生的中间偏移不会同步到预览。
- 每个窗格分别记录程序设置的位置,避免重复通知互相覆盖。
- 修复文件树设置异步保存跨越笔记库切换时,旧响应污染新笔记库界面的问题。
- 修复 macOS 片段窗口隐藏后,被异步最小化重新显示的问题。
- 冒烟断言按当前平台检查原生菜单提示、修饰键顺序及 Windows Alt-code 行为。
- macOS 文件树 Enter 检查默认重命名行为,同时验证移除该绑定后的打开回退。
- 最近笔记库失效测试等待异步移除完成,避免主机负载下过早读取结果。
- 命令历史、F4 与收藏跳转测试等待实际执行、持久化和导航完成,保留原有顺序及定位断言。
- 合成重做事件补齐大写键、物理键码与旧式键码,正确进入 CodeMirror 重做流程。
- 键位测试显式关闭临时脏文档确认框,避免影响后续场景。
- 原生粘贴测试等待 DOM 选区提交;片段导入测试确认新加载已启动后再等待空闲,避免读取旧结果。
- 粘贴测试销毁窗口后等待 IPC 和持久化写入结束,再清理目录;清理失败以非零状态退出。
- 音频播放测试使用自制的两秒 440 Hz AAC 文件
test/fixtures/voice-player.m4a。- 文件由标准库生成 PCM 波形后经系统
afconvert编码,无第三方音频内容。 - 录制与编码仍由独立语音冒烟测试覆盖,播放测试不再依赖主机音频设备实时生成数据。
- 文件由标准库生成 PCM 波形后经系统
- 增加失败时的对话框、文档选区与超时条件诊断,保留原有断言。
验证
npm run lint:通过,包含生产文件长度、渲染脚本与全仓库 ESLint。npm run test:unit:612 项通过,0 项失败、0 项跳过。- 全量冒烟已覆盖全部 40 个套件;最后一轮总跑 38/40,通过后续修复复测补齐剩余两项。
node scripts/smoke.js snippets full:2/2 通过,包含完整综合场景。- macOS 上 Windows Unicode 回收站专项按平台跳过;未在 Windows 主机执行验证。
node scripts/smoke.js document-outline:通过。npm run pack:通过,完成 macOS x64 目录打包;本机无签名身份,产物未签名。git diff --check:通过。- 超过 600 行的三个测试文件已纳入 后续集中模块提取。
2026-10-06:剪贴板收集格式开关
- 增加共享的“分隔符”和“日期时间”开关,默认都开启;修改应用于之后采集的条目。
node --test test/clipboard-collector.test.js test/ipc-handlers.test.js:29 项通过,覆盖四种格式组合、参数校验、运行中修改及更换目标后保留配置。npm run test:smoke:collector:通过,覆盖复选框跨窗口同步、两项关闭后实际只追加正文,以及单行布局回归。- 修改文件专项 ESLint、生产文件长度检查及
git diff --check:通过。
2026-10-06:当前笔记切换与收集器单行布局
- 修复收集或暂停时“使用当前笔记”被禁用、点击无效果的问题。
- 不同目标先停止,再设置当前笔记,并显示重新开启的提示。
- 相同目标显示反馈,保留当前状态和成功数量。
- 面板改为单行 Flexbox,文件名、状态与错误可省略显示,完整内容保留在悬停提示中。
npm run test:smoke:collector:通过,覆盖收集/暂停时切换、相同目标反馈及计数保留。- 在 1100 和 760 像素窗口中检查所有可见控件处于同一行,面板高度紧凑且页面无水平溢出。
- 已检查 760 像素窗口的实际截图。
node --test test/clipboard-collector.test.js test/ipc-handlers.test.js:28 项通过。- 修改文件的专项 ESLint、生产文件长度检查及
git diff --check:通过。 npm run lint仍被原有的resetFavoriteSortMode未使用错误阻断;本次未改动该函数所在文件。
2026-10-05:共享剪贴板收集器
通过的验证
npm run test:unit:565 项通过,0 项失败,0 项跳过。- 最后补齐退出等待和启停串行处理后,再次执行
node --test test/clipboard-collector.test.js test/ipc-handlers.test.js:28 项通过。 npm run test:smoke:collector:通过。- 覆盖双窗口共享状态、后台追加、单次写入、未保存编辑暂停、手动恢复及暂停内容不补收。
- 覆盖目标发起窗口关闭后的继续收集、新窗口初始化、真实 PNG 剪贴板及最后一个主窗口关闭后的停止。
- 覆盖窗口未响应时暂停,并恢复其他窗口的目标编辑页可写状态。
- 编辑器构建、修改文件的专项 ESLint、生产文件长度检查及
git diff --check:通过。 - 普通粘贴/图片回归
test/paste-undo-smoke.ts:重新运行通过,输出Paste undo smoke test passed.。- 首次运行的菜单粘贴断言失败,且清理阶段出现
ENOTEMPTY,需要结束测试进程。 - 原始提交的独立临时快照与当前改动的重新运行均通过。
- 首次运行的菜单粘贴断言失败,且清理阶段出现
原始提交中已存在的失败
npm run lint被渲染脚本中未使用的resetFavoriteSortMode阻断。- 单独执行
npx eslint .还发现两项原有问题。src/main/chord-input.ts:正则表达式包含多余转义。src/main/link-mirror.ts:正则表达式包含控制字符。
- 已使用
git show HEAD:<path>的原始源代码核实上述三项 lint 错误。 - HTML 粘贴冒烟
test/html-paste-smoke.ts在 IDE 剪贴板重做断言失败。- 原始提交的独立临时快照复现相同的
redone: false断言失败。
- 原始提交的独立临时快照复现相同的
- 本次提交保留这些已有代码,不扩展到独立的 lint 或编辑器历史修复。
2026-10-03:测试输出过滤 libpng 颜色配置警告
- 在统一冒烟运行器中仅过滤整行匹配的
libpng warning: iCCP: known incorrect sRGB profile。 node --test test/smoke-runner.test.js:5 项通过,覆盖重复警告、LF/CRLF、末行无换行、其他错误保留和失败退出码。npm run test:unit:541 项通过,0 项失败,0 项跳过。npm run build:editor及node scripts/smoke.js --page-find-only:通过,退出码为 0。- 实际输出未出现目标警告,预期的
workspace:read越界错误仍正常显示。
- 实际输出未出现目标警告,预期的
npx eslint --no-ignore scripts/smoke.js test/smoke-runner.test.js:通过。git diff --check:通过。
2026-10-03:Electron 冒烟测试修复
验证范围与环境
- 验证代码提交:
003f26d(Fix Electron smoke timing and find assertions)。 - 环境:Windows、PowerShell、项目本地 Electron。
- 项目目录:
E:\uninote\mynote-client。 - 本文件集中记录实际执行结果和测试运行规则。
修复前复现
- 执行
npx electron test/electron-smoke.js,复现用户提供的失败,退出码为 1。 previewSyntaxHighlighted和previewCodeControls为false。- 首次高亮只等待约 1 秒,后续一次运行实际等待约 2674 ms。
editorFindVisibleQueryPreservesScroll为false。- 测试数据的目标文本在第 70 行,原查询却使用第 69 行。
- 中间验证还暴露了延后读取共享剪贴板的检查不稳定,以及专项退出清理临时目录时的会话写入竞态。
最终验证结果
| 实际执行命令 | 结果 | 退出码 |
|---|---|---|
npm run build:editor |
编辑器构建通过 | 0 |
node --test test/markdown-service.test.js test/page-find.test.mjs |
17 项通过,0 项失败,0 项跳过 | 0 |
npx electron test/electron-smoke.js |
完整界面冒烟流程通过 | 0 |
npx electron test/electron-smoke.js --page-find-only |
查找专项通过,包括新增检查及退出清理 | 0 |
npx eslint --no-ignore test/electron-smoke.js test/smoke/renderer/initial-editor-flow.js |
两个改动脚本的 ESLint 检查通过 | 0 |
node scripts/quality/file-length.js |
生产文件长度检查通过 | 0 |
git diff --check |
差异格式检查通过 | 0 |
关键输出
- 最终完整流程输出:
Electron smoke test passed.,进程退出码为 0。 - 最终专项输出:
Page find smoke test passed, including preview refresh and first-reveal scroll synchronization.,进程退出码为 0。 - 最终完整流程的首次代码预览等待为 682 ms;专项为 678 ms。
- 两次均识别为
hljs language-python。
- 两次均识别为
- 复制后立即读取真实系统剪贴板,并严格比对原始代码内容。
- 最终专项退出未再出现临时会话文件重命名的
ENOENT错误。
结果判定与限制
- 最终完整流程保留全部原有断言,没有跳过失败检查或使用临时删改断言的测试副本。
- 日志中的
libpng warning不代表测试失败。 - 越界读取、未登录同步和缺失历史等错误路径测试可能主动输出 IPC 错误;整体结果以断言、成功标记和进程退出码为准。
- 本次没有运行整个
npm run test:smoke聚合命令、全部单元测试、打包或人工平台回归。- 完整界面流程通过不等于整个聚合测试命令已通过。
- 历史上存在失败退出码被默认退出覆盖为 0 的问题,以及仅运行专项或跳过断言的验证记录。
- 这些记录不能作为本次完整通过的证据。
运行规则
npm run test:smoke先构建编辑器,再运行各独立冒烟测试和完整界面流程。npm run test:smoke、各npm run test:smoke:*命令及node scripts/smoke.js会过滤标准错误中整行匹配的libpng warning: iCCP: known incorrect sRGB profile。- 其他警告、错误和失败退出码保持不变。
- 标准输出实时显示;标准错误在每个套件结束后显示,捕获上限为 16 MiB。
- 直接调用
npx electron不经过运行器,仍会显示该警告;可使用node scripts/smoke.js full或node scripts/smoke.js --page-find-only运行相应流程。
- 直接运行完整界面流程时,使用
npm run build:editor后再运行npx electron test/electron-smoke.js。- 直接调用 Electron 不会执行 npm 的预构建钩子,修改编辑器代码或依赖后须先重新构建。
- 查找专项可运行
npx electron test/electron-smoke.js --page-find-only。- 同样检查可见匹配的查询与导航不改变滚动位置、远处匹配定位、横向定位、预览高亮和代码复制。
- 缩小查询时从当前匹配所在行取得查询文本,避免混淆从零开始的数组索引与实际行号。
- 复制后立即读取真实系统剪贴板,避免后续场景或桌面应用覆盖剪贴板而导致误报。
- 专项退出前等待会话保存完成,再销毁窗口并清理临时目录。
- 首个无语言标记的代码块会按需加载高亮语法并自动识别语言。
- 测试等待实际高亮 DOM,最多轮询 100 次、每次间隔 50 ms,避免把首次加载超过 1 秒误判为功能失败。
- 日志打印首次代码预览的等待耗时、代码类名和预览文本。
- 超时立即报告当时的预览信息,避免后续切换文档覆盖失败现场。
- 完整流程必须同时出现
Electron smoke test passed.且进程退出码为 0,才能报告完整通过。- 带
--…-only参数的成功仅代表该专项通过。 - 错误、超时、跳过失败断言或临时修改测试后的结果不能报告为完整通过。
- 失败后销毁最后一个窗口不能触发 Electron 默认退出并将失败覆盖为退出码 0。
libpng warning是图片颜色配置警告;测试主动验证越界读取时也会输出workspace:read错误,最终结果以断言和退出码为准。
- 带
- 超过 600 行的冒烟主脚本和初始编辑流程留待单独集中提取模块,保留原有断言和执行顺序。
