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

文件树操作测试用例

本文用于文件树的手工回归与自动化补充。以下是待执行用例,不代表本次已逐项运行。 功能依据以 FEATURES.md 的“文件整理与导航”和“删除与未保存保护”为准。

1. 测试准备

1.1 环境与数据

  • 使用可丢弃的独立笔记库,不要在真实笔记库或含重要文件的系统回收站中执行删除用例。
  • 每个用例从下列初始目录重新开始,除非用例明确要求沿用上一操作的状态。
  • A/child.md 含相对图片 ![图](../assets/p.png),其余 Markdown 文件内容彼此不同,便于核对复制和恢复。
  • A/extra.txt 和 A/assets/raw.bin 用于验证未显示文件;按需加入隐藏文件、符号链接和只读文件。
  • 记录每次操作后的文件树、磁盘内容、系统回收站、打开的标签、焦点、选区和收藏或最近文件状态。
测试库/
├── alpha.md
├── beta.md
├── A/
│   ├── child.md
│   ├── extra.txt
│   └── assets/raw.bin
├── B/
│   └── beta.md
├── Empty/
└── assets/p.png

1.2 操作约定

  • “主修饰键”在 macOS 为 Cmd,在 Windows/Linux 为 Ctrl。
  • 文件树聚焦时,撤销为主修饰键加 Z,重做为主修饰键加 Shift+Z。
  • 删除快捷键在 Windows/Linux 为 Delete;macOS 为 Cmd+Backspace,也可使用 Delete。
  • 用例中的“同一步”指一次多选操作产生的一组文件树历史记录。
  • 跳过失败项意味着永久移除该项在这组操作中的历史记录;不应删除或覆盖磁盘上的其他文件。

2. 选择、焦点与入口

2.1 选择范围

  • FT-S01 单选与切换
    • 操作:单击 alpha.md,再单击 beta.md。
    • 预期:选区分别只有当前文件;文件可正常打开。
  • FT-S02 增减多选
    • 操作:单击 alpha.md,按主修饰键单击 beta.md,再按主修饰键单击 alpha.md。
    • 预期:选区从一项变两项,再变为仅 beta.md。
  • FT-S03 可见范围选择
    • 操作:展开 A,选中 alpha.md,按 Shift 单击另一个可见节点。
    • 预期:仅按当前可见文件树顺序选择连续范围;折叠或过滤隐藏的节点不被范围选中。
  • FT-S04 父子节点同时选中
    • 操作:按主修饰键同时选中 A 与 A/child.md,执行复制或删除。
    • 预期:实际操作只提交父文件夹一次;子文件不会被重复处理。
  • FT-S05 折叠与筛选
    • 操作:选中 A/child.md 后折叠 A;随后设置不匹配 child 的文件名筛选。
    • 预期:单纯折叠保留选区;筛选隐藏条目后,隐藏条目从选区移除。
  • FT-S06 右键与空白处
    • 操作:多选后右键其中一项,再右键未选项;最后单击文件树空白处。
    • 预期:右键已选项保留整组选区,右键未选项改为单选;空白处将焦点移入文件树。
  • FT-S07 单项命令限制
    • 操作:多选文件与文件夹,检查重命名和收藏入口,再改为单选。
    • 预期:重命名等单项命令在多选时不可用;剪切、复制、粘贴和删除处理整组选项。

2.2 键盘与焦点

  • FT-S08 键盘导航
    • 操作:聚焦文件树,使用方向键、Home、End、Enter 和空格。
    • 预期:方向键按树结构移动或展开折叠;Home、End 定位首尾可见项;文件可打开,焦点行为符合当前文件树设置。
  • FT-S09 操作后的焦点
    • 操作:分别完成重命名、新建文件夹、粘贴、删除、撤销和重做。
    • 预期:焦点留在文件树及可见结果节点;原节点消失且树为空时,文件树容器仍可聚焦。新建文件按现有行为聚焦新文档。
  • FT-S10 历史作用域
    • 操作:在文件树聚焦时执行撤销,再在编辑器聚焦时执行撤销。
    • 预期:前者作用于文件树操作,后者作用于当前文档正文,不交叉撤销。
  • FT-S11 菜单与路径复制
    • 操作:对文件及文件夹分别用鼠标右键和 Shift+F10 打开菜单,复制绝对路径与笔记库相对路径。
    • 预期:入口和快捷键提示正确;剪贴板文本指向所选项目,复制路径不改变文件内容或文件树历史。
  • FT-S12 文件管理器定位与引用
    • 操作:对文件树节点执行“在文件管理器中显示”;对 Markdown 文件执行“复制引用”和“复制引用(大纲)”。
    • 预期:文件管理器定位正确;复制的引用使用测试库根相对地址,大纲不存在时退化为文件引用。

3. 新建、重命名与移动

3.1 新建与重命名

  • FT-M01 新建文件与文件夹
    • 操作:分别在根目录和 A 中新建 Markdown 文件、文件夹。
    • 预期:目标位于所选文件夹内;选中文件时,目标位于其父文件夹;未输入扩展名的 Markdown 文件获得 .md。
  • FT-M02 取消与非法名称
    • 操作:取消新建或重命名;再尝试空名称、非法字符和已存在的同名目标。
    • 预期:取消不改磁盘和历史;非法名称或同名冲突被拒绝,不覆盖原文件。
  • FT-M03 重命名文件及目录
    • 操作:重命名 alpha.md 和 A,分别执行撤销、重做。
    • 预期:树、磁盘、已打开标签和历史路径同步;每次重命名可撤销及重做。
  • FT-M04 未保存正文下的重命名
    • 操作:打开 A/child.md 并修改但不保存,然后重命名文件或父目录。
    • 预期:标签路径更新,未保存正文仍在;不出现外部删除恢复提示。

3.2 移动

  • FT-M05 文件与目录移动
    • 操作:将 alpha.md 移至 B,将 B 移至 A,再分别撤销、重做。
    • 预期:源路径消失、目标路径出现;目录内容完整;撤销和重做恢复对应路径。
  • FT-M06 移动约束
    • 操作:尝试把文件移到原目录,把 A 移到自身或其子目录,把文件移到已有同名文件处。
    • 预期:无效操作被拒绝,原文件和目标文件均不变。
  • FT-M07 相对图片引用
    • 操作:将 A/child.md 移到根目录或 B,再复制到另一层级。
    • 预期:本地相对图片路径仍指向原图片;绝对路径与远端 URL 不被误改。
  • FT-M08 未保存正文下的移动
    • 操作:修改 A/child.md 但不保存,剪切并粘贴到 B。
    • 预期:移动完成且标签继续显示未保存正文;涉及该文档的历史撤销若被未保存保护阻止,应显示失败路径并保留可重试记录。

4. 复制、剪切与粘贴

4.1 复制

  • FT-C01 复制到同目录
    • 操作:复制 alpha.md 后在根目录粘贴两次。
    • 预期:依次产生 alpha-副本.md、alpha-副本-2.md;原文件内容不变。
  • FT-C02 复制到其他目录
    • 操作:复制 alpha.md 并粘贴到 A;再次粘贴同一来源。
    • 预期:首次保留原文件名,第二次使用副本后缀;不覆盖已有内容。
  • FT-C03 文件与文件夹作为目标
    • 操作:以 B 为粘贴目标,再以 B/beta.md 为目标。
    • 预期:文件夹目标复制到其内部;文件目标复制到其父目录。
  • FT-C04 复制目录及附件
    • 操作:复制 A 到根目录和 B,检查 child.md、extra.txt、附件与相对图片。
    • 预期:目录内容完整;附件不因文件树未显示而丢失;源目录保留。
  • FT-C05 多选复制与单步历史
    • 操作:同时复制 alpha.md、A 与 A/child.md,粘贴到 B,撤销一次再重做一次。
    • 预期:只复制两个顶层选中项;一次撤销移除整组副本,一次重做恢复整组。
  • FT-C06 复制源的稳定性
    • 操作:仅执行复制而不粘贴;切换树焦点后再粘贴,重复粘贴。
    • 预期:复制本身不改变磁盘;每次粘贴生成独立副本并形成自己的历史步骤。

4.2 剪切与失败恢复

  • FT-C07 剪切显示与目标
    • 操作:剪切 alpha.md 和 beta.md,观察树中样式,再粘贴到 A。
    • 预期:剪切前不移动磁盘文件;待移动项半透明;粘贴成功后源路径消失。
  • FT-C08 多选剪切的部分失败
    • 操作:让 B 已有 beta.md,同时剪切 alpha.md、beta.md 并粘贴到 B。
    • 预期:提示已完成数量;已移动项保留在目标,仅未移动项留在待粘贴队列;已完成部分可撤销、重做。
  • FT-C09 首项失败与重试
    • 操作:先制造首个目标同名冲突并粘贴;移除冲突后再次粘贴。
    • 预期:首次完成数为零,剪切队列不减少;第二次只执行尚未移动的项目。
  • FT-C10 跨笔记库剪贴板
    • 操作:在测试库复制或剪切项目,切换到另一笔记库后尝试粘贴。
    • 预期:切库清除旧笔记库的待粘贴队列;切回后也不能把旧队列粘贴到任一笔记库。

5. 拖放

  • FT-D01 默认移动与主修饰键复制
    • 操作:拖动 alpha.md 到 B,再按住主修饰键拖动 A 到 B。
    • 预期:默认移动,按键时复制;复制后源目录仍在。
  • FT-D02 静止指针时切换修饰键
    • 操作:拖动项目并停在目标上,不移动鼠标,只按下或松开主修饰键,然后放开鼠标。
    • 预期:目标提示立即切换复制或移动,实际操作与释放时的修饰键状态一致。
  • FT-D03 混选拖放
    • 操作:多选文件、目录及该目录子项,拖到 B。
    • 预期:只操作顶层选中项;同组操作可一步撤销、重做。
  • FT-D04 文件、文件夹与根部落点
    • 操作:分别拖到 B/beta.md、B 和文件树根部。
    • 预期:文件落点取其父目录,文件夹落点取自身,根部落点取测试库根目录。
  • FT-D05 无效落点与部分失败
    • 操作:尝试移动目录到自身或子目录、移动文件到原目录,并制造多项拖放中的名称冲突。
    • 预期:无效落点不执行;批量失败时显示完成数,已完成部分保留且可撤销。

6. 删除与系统回收站

6.1 确认与保护

  • FT-T01 单文件删除入口
    • 操作:分别通过工具按钮、右键菜单和平台删除快捷键删除 alpha.md。
    • 预期:每次均先确认;确认后文件从树与磁盘消失并进入系统回收站。
  • FT-T02 取消第一次确认
    • 操作:选中 alpha.md 后触发删除并取消;对话框打开期间刷新或重绘文件树后再取消。
    • 预期:磁盘、选区和历史不变;焦点回到原条目。
  • FT-T03 显示与未显示文件的二次确认
    • 操作:删除仅含可见 Markdown 的目录,再删除含 extra.txt 或附件的 A。
    • 预期:前者只确认一次;后者在首次确认后提示未显示文件并要求二次确认。
  • FT-T04 取消第二次确认
    • 操作:多选 A 与 beta.md,通过第一次确认,在第二次确认时取消。
    • 预期:整组选项均未删除,系统回收站不新增该组项目。
  • FT-T05 父子混选与目录完整性
    • 操作:同时选中 A 和 A/child.md 后确认删除。
    • 预期:只删除 A 一次;目录内的 Markdown、非 Markdown 文件和附件均进入回收站。
  • FT-T06 已打开标签与未保存保护
    • 操作:先删除已打开但无未保存修改的文件,再尝试删除有未保存修改的文件或其父目录。
    • 预期:成功删除关闭对应标签;未保存情形阻止删除,不丢失正文。
  • FT-T07 删除后的焦点与树空态
    • 操作:删除当前聚焦节点,最后删除测试库中仅剩的可见节点。
    • 预期:焦点仍在文件树的其他可见节点;空树时容器可聚焦。

6.2 回收站恢复

  • FT-T08 删除、撤销与重做
    • 操作:删除文件和目录,各执行撤销、重做、再撤销。
    • 预期:内容与路径按序恢复、再删除;目录内附件一同恢复;收藏与最近文件状态按该操作记录恢复。
  • FT-T09 多选删除历史
    • 操作:一次删除 alpha.md 和 A,撤销一次并重做一次。
    • 预期:整组按一步处理;两项并发进入或离开系统回收站,完成后文件树统一刷新;撤销时两项均恢复,重做时两项均再次删除。
  • FT-T10 无法建立回收站记录
    • 操作:在能复现系统回收站无法返回唯一项目的受控环境中删除测试文件。
    • 预期:界面说明该项目不能通过文件树撤销恢复;不伪造可用的历史记录。
  • FT-T11 批量删除的部分失败
    • 操作:让多选删除中的后一项因受控权限或外部占用失败。
    • 预期:提示已完成数量;已删除项进入回收站且可撤销,失败项及其磁盘内容保留。

7. 文件树历史与失败处理

7.1 正常历史

  • FT-H01 新建历史
    • 操作:新建文件和文件夹,各撤销、重做。
    • 预期:撤销新建时项目进入系统回收站;重做从回收站恢复,不依赖应用副本。
  • FT-H02 复制历史
    • 操作:复制并粘贴文件或目录,撤销、重做。
    • 预期:只撤销副本;源项目保持;副本从回收站恢复后内容不变。
  • FT-H03 重命名与移动历史
    • 操作:连续重命名、移动同一项目,逐步撤销,再逐步重做。
    • 预期:每步恢复对应路径,不覆盖相邻步骤;已打开标签跟随最终路径。
  • FT-H04 新操作清空重做
    • 操作:执行操作并撤销,再执行新的文件树操作,尝试重做旧操作。
    • 预期:旧重做分支失效;新操作仍可撤销。
  • FT-H05 历史生命周期
    • 操作:记录文件树历史后切换笔记库、重新打开窗口或重启应用。
    • 预期:历史仅在当前窗口和当前笔记库会话内有效,不跨库或跨重启执行。

7.2 冲突、外部操作与选择分支

  • FT-H06 回收站项目仍在但原路径被占用
    • 操作:删除 alpha.md,在原路径新建另一个不同内容的文件,再尝试撤销。
    • 预期:弹窗列出 alpha.md 与占用原因;原路径文件不被覆盖,回收站项目仍在,历史可重试。
  • FT-H07 默认取消
    • 操作:在 FT-H06 的失败弹窗中按 Enter 或 Esc,再显式按“取消”。
    • 预期:默认焦点在“取消”;三种取消方式都不继续操作,保留当前组的进度和失败项历史。
  • FT-H08 重试当前项
    • 操作:在 FT-H06 中移除占用文件,选择“重试”。
    • 预期:仅重新执行失败的项目;本组已经成功的项目不重复执行。
  • FT-H09 跳过当前项
    • 操作:多选删除后只让其中一项恢复失败,选择“跳过”。
    • 预期:仅该项历史被移除;同组其他项目继续撤销或重做;提示含失败项相对路径。
  • FT-H10 Explorer 已恢复原项目(Windows)
    • 操作:在应用删除 alpha.md,从 Explorer 撤销或从系统回收站恢复,再在文件树撤销。
    • 预期:应用检测回收站项目已消失,刷新文件树并移除该项历史;提示列出 alpha.md,后续撤销不重复报同一错误。
  • FT-H11 回收站项目被移走(Windows)
    • 操作:在应用删除 alpha.md 后,从回收站将它恢复到别处,再在文件树撤销。
    • 预期:该历史失效并提示相对路径;不会把别处的文件移动回测试库,也不会删除其他文件。
  • FT-H12 外部恢复与同名占用并存
    • 操作:删除后移走回收站项目,并在原路径另建同名文件,再尝试撤销。
    • 预期:按回收站项目已失效处理;现有同名文件不被覆盖,失效历史被移除。
  • FT-H13 多项历史中的取消与部分进度
    • 操作:让组内后一个项目先成功、下一个项目失败,在弹窗中取消,然后再次撤销。
    • 预期:已完成项目不重复执行;重新开始时只处理未完成项目。
  • FT-H14 相关文档有未保存修改
    • 操作:在可撤销的重命名或移动后修改相关文档而不保存,再尝试撤销。
    • 预期:弹窗显示对应相对路径和未保存原因;取消后正文与历史均保留,保存后可重试。

8. 安全边界与平台差异

8.1 文件系统边界

  • FT-P01 路径和名称安全
    • 操作:通过界面或受控 IPC 输入尝试路径穿越、库外目标、无效名称和同名覆盖。
    • 预期:操作被拒绝;库外内容和现有目标不变。
  • FT-P02 符号链接
    • 操作:在支持的测试环境中,让源文件或目录包含指向库外的符号链接,再复制或移动。
    • 预期:不跟随链接写入库外;复制目录跳过链接项,直接操作不安全链接时拒绝。
  • FT-P03 只读与权限失败
    • 操作:限制测试目录写权限,分别尝试新建、复制、移动、删除和恢复。
    • 预期:显示实际失败原因与已完成数量;不把失败操作记为成功;恢复权限后可按历史状态重试。
  • FT-P04 中文、空格与短路径(Windows)
    • 操作:在包含中文与空格的目录中删除、撤销、重做文件和文件夹,并测试 Windows 短路径目录。
    • 预期:文件名不乱码;回收站记录正确匹配;恢复到原路径且内容一致。

8.2 平台快捷键与系统回收站

  • FT-P05 平台快捷键
    • 操作:在 Windows/Linux 与 macOS 分别检查重命名、删除、剪切、复制、粘贴、撤销和重做快捷键。
    • 预期:按各平台约定生效;提示文字只显示当前平台的修饰键名称。
  • FT-P06 系统回收站集成
    • 操作:在 Windows、macOS 和 Linux 的支持环境中删除测试文件,并从系统文件管理器确认回收站与恢复。
    • 预期:删除进入该系统的回收站;应用内撤销不会覆盖已被外部恢复或移动的项目。

9. 现有自动化入口

下表仅说明现有测试可辅助覆盖的范围;本文件的人工步骤仍需逐项执行并记录结果。

测试入口 主要范围
npm run test:smoke:tree-multiselect 多选、拖放、复制粘贴、批量删除、部分失败及组历史
npm run test:smoke:workspace-trash 删除确认、取消、焦点和标签关闭
npm run test:smoke:workspace-trash-unicode Windows 中文文件与目录的回收站删除、恢复及冲突
node scripts/run.mts node --test test/tree-history.test.js 历史失效、取消、重试、跳过及组内进度
node scripts/run.mts node --test test/workspace-manager.test.js 文件管理、回收站句柄恢复、路径冲突和外部恢复
node scripts/run.mts node --test test/file-tree-navigation.test.mjs 文件树导航规则

执行时为每个用例记录:用例 ID、操作系统、应用版本、结果、实际路径、回收站状态和失败截图或日志。

file-tree-architecture

html-paste

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