104 lines
8.3 KiB
Markdown
104 lines
8.3 KiB
Markdown
# YKanBan 人工验收清单
|
||
|
||
> 对应 PLAN §9 各里程碑的"人工"验证项。按计划 §7.1,窗口、模态、点击流、数据绑定、主题切换、状态页渲染不写自动化测试,一律按本清单人工验证。
|
||
> 默认在本地 Windows 执行;Linux / macOS 行为验证按 §7.2 推迟至程序完工后,届时用同一清单逐项复核。
|
||
|
||
## 准备
|
||
|
||
- [ ] `dotnet build` 与 `dotnet test` 通过
|
||
- [ ] 准备一个空文件夹 `<demo>` 作为演示工作区;以下 `ykanban` 均指 `dotnet run --project YKanBan --` 或发布产物中的可执行文件
|
||
- [ ] 记下 `app.json` 位置(Windows:`%APPDATA%\YKanBan\app.json`),验收前备份或删除,保证从默认值开始
|
||
|
||
## A. 计划指定的四项(M7 必验)
|
||
|
||
### A1 语言切换重启生效
|
||
|
||
- [ ] 设置 → 语言改为简体中文 → 显示"重启后生效"提示;当前界面**不**变化
|
||
- [ ] 确认关闭后,退出程序 → `app.json` 中 `"language"` 为 `"zh-Hans"`
|
||
- [ ] 重启 → 全部界面文本(顶部区、两个 tab、各模态、错误页、排序项、确认对话框)为中文,无残留英文硬编码
|
||
- [ ] 切回英文 → 重启后恢复英文
|
||
- [ ] 中文下新初始化的工作区预置列为 待办 / 进行中 / 已完成;切回英文后这些列名**不变**(已是数据)
|
||
|
||
### A2 导出语言跟随界面
|
||
|
||
- [ ] 英文界面导出:默认文件名 `<工作区名>-export-yyyyMMdd-HHmmss.md`(精确到秒);文件内模板文字为英文,时间格式 `yyyy-MM-dd HH:mm:ss`
|
||
- [ ] 中文界面导出:默认文件名 `<工作区名>-导出-yyyyMMdd-HHmmss.md`;模板文字为中文,时间格式 `yyyy年M月d日 HH:mm`
|
||
- [ ] 保存对话框的文件类型名随语言(Markdown document / Markdown 文档)
|
||
- [ ] 看板处于搜索筛选、非默认排序时导出:文件仍含**全部**列与卡片,列与卡片均按 id 升序;空列保留;无标题卡片为 `### #id`
|
||
- [ ] 标签总表含全部标签(含未使用的),使用数正确;标签名含 `` ` ``、`|`、换行时转义符合 §5.8
|
||
- [ ] 文件为 UTF-8 无 BOM;取消保存对话框不写任何文件;保存到无权限位置时弹"导出失败"消息框
|
||
|
||
### A3 主题三态切换
|
||
|
||
- [ ] 设置 → 主题 亮色 / 暗色 / 跟随系统 依次切换:**即时生效**,无重启提示
|
||
- [ ] 每种主题下检查:主窗口、看板列与卡片、标签 tab、全部模态、全部错误页颜色完整切换,无亮底暗字/暗底亮字残留
|
||
- [ ] 标签徽章在两种主题下均显示原色(§5.9 例外),文字颜色保持可读
|
||
- [ ] 跟随系统:程序运行中切换 Windows 深浅色 → 程序跟随变化
|
||
- [ ] 重启后主题保持上次选择
|
||
|
||
### A4 app.json 多实例脏写
|
||
|
||
- [ ] 同时打开两个实例(不同工作区)。实例 1 改排序,实例 2 改列宽;先关实例 1、后关实例 2 → `app.json` 为实例 2 的完整设置(后退出者覆盖,实例 1 的排序改动丢失——已接受)
|
||
- [ ] 打开两个实例,只在实例 1 改设置;先关实例 1,再关**未改过设置**的实例 2 → `app.json` 保持实例 1 写入的内容(未改设置的实例不写盘)
|
||
- [ ] 处于错误页(例如参数错误页)的实例退出时不写 `app.json`(可先删除 `app.json`,退出后确认文件未被创建)
|
||
- [ ] `app.json` 写成非法 JSON → 启动正常、使用默认值,生成 `app.json.bak`;改一次设置退出后 `app.json` 恢复为合法内容
|
||
- [ ] `app.json` 中单个字段非法(如 `"theme": "pink"`、列宽 `"custom-pixels": 9999`)→ 仅该字段回退默认,其余设置保留,不生成 `.bak`
|
||
|
||
## B. 启动与错误页(M4 / M4R)
|
||
|
||
- [ ] 无参数、两个参数、`--help`、`-x`、空字符串参数、纯空格参数 → 参数错误页,显示 `Usage: ykanban <path>`
|
||
- [ ] 不存在的路径、指向文件的路径 → 目录不存在页
|
||
- [ ] 相对路径(如 `ykanban .`)按当前目录解析
|
||
- [ ] 无 `.ykanban` 的文件夹 → 未初始化页;点"初始化"后进入看板,预置三列
|
||
- [ ] 初始化失败(如只读文件夹)→ 工作区打开失败页
|
||
- [ ] 同一工作区开第二个实例 → 锁冲突页,无任何操作按钮;关闭第一个实例后可正常打开
|
||
- [ ] 工作区数据库 `user_version` 改为更高值 → 打开失败页,提示版本过新,英文详情可选中复制
|
||
- [ ] 把 `ykanban.db` 换成垃圾内容 → 打开失败页(数据库无法打开/损坏)
|
||
- [ ] 关闭程序后删除 `.ykanban/ykanban.db`(及 -wal / -shm)→ 打开失败页,提示数据库缺失;`.ykanban` 中**不会**出现新建的空库
|
||
- [ ] 窗口标题:正常时 `工作区名 - YKanBan`,错误页时仅 `YKanBan`
|
||
- [ ] 顶部区:工作区名 + 小一号完整路径;右侧 导出 / 设置 / 关于 同排
|
||
|
||
## C. 看板 tab(M5)
|
||
|
||
- [ ] 新建列、编辑列(标题 + 描述);空标题、重名(含仅大小写不同,如 `Done` / `done`)→ 模态内提示错误,模态不关、输入保留
|
||
- [ ] 删除列:确认框提示将删除 N 张卡片;确认后列与卡片一并删除
|
||
- [ ] 新建卡片、点击卡片编辑:标题可空;内容多行;`#id` / 创建时间 / 修改时间只读显示(新建时不显示)
|
||
- [ ] 编辑确认但内容未变 → 修改时间不变;改动后确认 → 修改时间刷新
|
||
- [ ] 有未保存改动时取消或点标题栏关闭 → 丢弃确认(开关开启时)
|
||
- [ ] 卡片菜单"移动到列":卡片移动,修改时间**不**变
|
||
- [ ] 删除卡片:确认框(开关开启时)
|
||
- [ ] 卡片条目:`#id` 加粗与标题同行;无标题只显示 `#id`;内容约 200 字截断;标签彩色徽章;不显示时间
|
||
- [ ] 标签区:× 移除;"添加标签"嵌套模态可筛选、选中即添加、可反复打开;嵌套模态中新建标签**立即写库**——外层取消后该标签仍出现在标签 tab
|
||
- [ ] 列宽:窄 240 / 标准 320 / 宽 480 / 手动 160–720;全局生效,重启保持
|
||
- [ ] 排序:id 升序 / 最后修改时间降序 / 标题升序(空标题在前);只影响卡片,列始终 id 序;重启保持
|
||
- [ ] 大数据量:用脚本向一列灌入约 10000 张卡片,滚动流畅、打开工作区无明显卡顿(虚拟化)
|
||
- [ ] 所有模态在父窗口居中;使用系统原生标题栏
|
||
- [ ] 打开带输入框的模态时,第一个输入框自动获得焦点并全选
|
||
|
||
## D. 标签 tab 与搜索(M6)
|
||
|
||
- [ ] 标签 tab 条目:颜色徽章 + 名称 + 描述 + 使用数;顶部显示标签总数;无标签时显示空状态文字
|
||
- [ ] 新建标签:预置色块或手输 `#RRGGBB`;非法颜色、空名、重名(仅大小写不同也算)→ 模态内提示
|
||
- [ ] 重命名、改色、改描述后,看板上的徽章同步更新
|
||
- [ ] 删除标签:确认框提示"将从 N 张卡片移除该标签";删除后卡片保留、只是去掉该标签
|
||
- [ ] 看板写库(编辑/移动/删除卡片等)后切到标签 tab,使用数已更新
|
||
- [ ] 搜索仅在点"搜索"或按回车时执行;输入过程中不执行、不报错
|
||
- [ ] 筛选后空列保留显示;× 清空并显示全部;空白表达式 = 全部
|
||
- [ ] 非法表达式(如 `bug AND`、`tag:`、`(a`、`id:0`)→ 错误对话框"查询表达式有误,详情:…"+ 英文详情,父窗口居中;关闭后搜索框保留原文,看板保持上次结果
|
||
- [ ] 筛选状态下写库:按**上次成功**的表达式刷新(即使搜索框已改成别的文字);新建但不匹配的卡片不显示
|
||
- [ ] USAGE.md 搜索语法示例表逐条实测结果与文档一致
|
||
|
||
## E. 设置与关于(M4)
|
||
|
||
- [ ] 四个确认开关分别关闭后,对应操作不再弹确认;重启保持
|
||
- [ ] 关于:应用名、版本号、仓库链接(可点击打开浏览器)、许可证
|
||
|
||
## F. 发布(M7,视网络条件推迟)
|
||
|
||
- [ ] 在代码托管平台手动触发 `Build` workflow;四个 RID 作业均 build → test → 上传产物
|
||
- [ ] 产物:`YKanBan-<版本>-win-x64.zip`、`-linux-x64.tar.gz`、`-osx-x64.tar.gz`、`-osx-arm64.tar.gz`
|
||
- [ ] Windows:解压后 `YKanBan.exe <path>` 可直接运行(自包含,无需安装 .NET)
|
||
- [ ] Linux:解压后 `./YKanBan <path>` 可运行(可执行位保留)
|
||
- [ ] macOS:解除隔离后 `open -n -a YKanBan --args <绝对路径>` 与直接运行包内可执行文件均可用;双击 `.app` 只显示参数错误页
|
||
- [ ] 故意让某平台测试失败 → 该 RID 无产物,其余 RID 不受影响
|