Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

测试结果

  • 下文按日期保留当时的验证结果、环境和执行命令;旧命令不能直接当作当前仓库的操作入口,历史通过项也不代表本次重新验证。
  • 当前源码为 .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-alert suite 和综合 full suite 中执行。
    • 运行入口: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:read handler。
  • 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 编码,无第三方音频内容。
    • 录制与编码仍由独立语音冒烟测试覆盖,播放测试不再依赖主机音频设备实时生成数据。
  • 增加失败时的对话框、文档选区与超时条件诊断,保留原有断言。

验证

  • 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 行的冒烟主脚本和初始编辑流程留待单独集中提取模块,保留原有断言和执行顺序。

tech-arch

voice-module-extraction-followup

点赞(0) 阅读(14) 举报
目录
标题