PLAN 5.6 asks for the theme to take effect immediately, but it was applied only on OK. Selecting a theme now previews it; OK saves it, and cancel, Escape or closing the window restores the theme the dialog opened with.
8.5 KiB
8.5 KiB
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 主题三态切换
- 设置 → 主题 亮色 / 暗色 / 跟随系统 依次切换:下拉框一选中就即时生效(无需点确认),无重启提示
- 切换主题后点取消、按 Esc 或点标题栏关闭:恢复为打开设置时的主题;重启后仍是原主题
- 每种主题下检查:主窗口、看板列与卡片、标签 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,视网络条件推迟)
- 在代码托管平台手动触发
Buildworkflow;四个 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 不受影响