chore(ui-golden): 像素黄金参考 ref/*.bin 入库(把门禁改成可移植)
问题:ui-golden 是逐字节比对(check_content_pages.py 里 data == refdata), 而基准 simulator/tests/ref/ 整目录被 .gitignore 忽略、从未入库。后果不是 "少几个文件",而是这条门禁在任何新克隆 / 新并行工作树里必然报「缺黄金 参考」——只在有老副本的机器上它才是真的回归门禁。本会话已两次实测踩到 (并行工作树里只能现场 --update 造基准,而现场造出来的基准恰好失去意义)。 入库前先证明基线可复现,否则等于把一条天天误报的门禁写进仓库: - 主树 ref/ 生成于 2026-10-11,其间合入 B6~B9 与 UI 令牌化等多次改动; 今天用刚重建的 lvgl_sim 重跑 → 11 页 + 开页-关页往返池水位逐字节全过 - 主树与新工作树两份**独立构建**的 lvgl_sim(不同构建目录、不同绝对路径) 各自生成基准 → 11 个 .bin 的 SHA-256 全部一致 即渲染是 CPU 侧确定性输出,可以当仓库内容。 改动: - .gitignore:整目录忽略 → 只忽略派生的目检 PNG。另加一条 !simulator/tests/ref/*.bin 反选——第 115 行的全仓 *.bin 兜底(挡 sim_netcfg.bin 之类运行产物)会把基线一起挡掉,且反选必须排在它之后 才生效 - 不引入 LFS:11 x 3200 B = 34.4 KB(160x160 单色打包)。走 LFS 反而新增 失效面——没拉 LFS 的克隆会拿 pointer 文本去比像素,把"缺基准"换成 "比不中"。.gitattributes 已有 *.bin binary,check-attr 确认 text unset, 不会被行尾转换改写 - 基线不会被改写型钩子毁掉:trailing-whitespace / end-of-file-fixer 声明 types: [text],位图含 NUL 被判二进制 → 实测 Skipped;索引 blob、磁盘、 主树参照三方哈希 11/11 一致 - 新增 11 个基线;同步 5 份文档与 3 处脚本口径:缺基准的提示从"首次/换机 请加 --update"改为"检出不完整 → git checkout -- simulator/tests/ref/ 取回, 不要用 --update 就地造基准"(旧提示正是自我实现型基准的来源) - 顺带修掉 simulator/tests/README.md 两处与实现不符的描述:基准写成 PNG (实为 .bin)、regen_ref_png.py 写成"重建黄金参考"(它只出目检图,基准 由 check_content_pages.py --update 刷) - .pre-commit-config.yaml 只改注释(原文明确断言 ref/ "永远不会进 git 索引",已被本改动推翻);ui-golden 的 files 面覆盖 simulator/tests/, 基线被改即触发回归,刷参考从此在 git diff 里显形 历史口径按纪律冻结:UI_自动化测试流程 2026-09-10 的"整目录不入库"等 6 处 变更记录行不改写,以新行登记反转。 实测:@build 0 错 0 警(Code=213520,与内存台账一致);ui-golden Passed; pre-commit run --all-files = 36 Passed / 0 Failed(RC=0)。
This commit is contained in:
@@ -5,9 +5,10 @@ check_content_pages.py — 叶子内容页像素黄金参考回归 + 文本级
|
||||
|
||||
用法:
|
||||
python simulator/tests/check_content_pages.py # 文本断言 + 与本地黄金参考逐字节比对
|
||||
python simulator/tests/check_content_pages.py --update # 有意改视觉后刷新本地黄金参考
|
||||
python simulator/tests/check_content_pages.py --update # 有意改视觉后刷新黄金参考(改动会进 diff)
|
||||
前置:simulator 已构建(build/Debug/lvgl_sim.exe 存在);纯标准库,任意 python3。
|
||||
ref/*.bin 为**本地生成物、不入库**(.gitignore):首次/换机后须先 `--update` 生成一次。
|
||||
ref/*.bin 是**入库的像素黄金参考**(2026-10-22 起):新克隆直接可跑,无需先生成。
|
||||
缺失 = 工作树不完整(`git checkout -- simulator/tests/ref/`),不是"首次运行"。
|
||||
|
||||
原理:① 文本级断言——解析 ui_font_cn_12.c 字形,把期望字符串(标题/标签/值/页脚)在截图
|
||||
对应 y 带内做精确匹配;不依赖 ref/,先于像素比对运行,失败即中止(防误刷参考)。
|
||||
@@ -17,6 +18,7 @@ check_content_pages.py — 叶子内容页像素黄金参考回归 + 文本级
|
||||
2 个菜单框回根框,完全还原初始态)后 used 须等于 POOL_AFTER_ROUNDTRIP。
|
||||
|
||||
黄金参考更新流程(有意改视觉时):先肉眼看图确认新效果正确,再 --update 刷新,
|
||||
刷新即改基准 → `git diff --stat simulator/tests/ref` 必须逐页过目并在提交正文说明;
|
||||
最后 regen_ref_png.py 重生成目检 PNG;误报排查见 docs/UI设计/UI_自动化测试流程.md。
|
||||
|
||||
退出码:0 全 PASS;1 文本断言失败/有页不一致/池水位漂移;2 运行/环境错误(exe 缺失、参考缺失)。
|
||||
@@ -310,7 +312,8 @@ def main():
|
||||
continue
|
||||
|
||||
if not ref.exists():
|
||||
print("FAIL: 缺黄金参考 %s(首次/换机后请加 --update 生成;ref/ 不入库)" % ref)
|
||||
print("FAIL: 缺黄金参考 %s(ref/*.bin 已入库:缺失说明工作树不完整,"
|
||||
"跑 git checkout -- simulator/tests/ref/ 取回,不要用 --update 造基准)" % ref)
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
return 2
|
||||
refdata = ref.read_bytes()
|
||||
|
||||
Reference in New Issue
Block a user