改动面 112 文件 572+/572-:game/tests/** 与 game/probe/** 共 106 件 545 行 `# oracle:`→`# 判据出处:`;tools/capability_audit.py 正则字面量换中文+ORACLE_*→CRITERION_*/check_oracle_markers→check_criterion_markers/oracle_marked(flagged)→criterion_* 共 11 行;test-conventions.md:119 格式句+:155 措辞;待办清单与需求卡片-QA覆盖余量收口批各 1 处字面量;coverage_enum.py:21 与 camp_scene_layout_test.gd:101 旁支措辞;ui_click_probe.gd 对拍局部变量 oracle→expected 7 处;auto_player.gd 三处 safe_set 真值措辞。不动:历史审计报告两份、test-oracle-anchor 分支名、git 史、生成日志;指针格式/扫描面/判红条件/验收义务全不变。 读数(区内实跑):改前 capability_audit --strict「417 注记函数·红项 0」→改后「417 判据出处注记函数·红项 0」exit=0;新标记 545 行/106 文件,现行义务面 oracle 残留 0(在册沿革除外);diff 自检 game/ 非注释新增行仅 6 行且全在 ui_click_probe.gd 的 expected 变量段;112 改动文件 CRLF=0;py_compile tools/capability_audit.py OK;--docs exit=0【验收通过】无新增红;--gates exit=0(静态扫描绿、闸壳 bash -n ×13 失败 0)。
40 lines
2.3 KiB
GDScript
40 lines
2.3 KiB
GDScript
# tests/unit/presentation/ui_font_asset_test.gd — CJK 随包字体资产契约测试
|
||
# 运行:godot --headless --path game --script res://tests/unit/presentation/ui_font_asset_test.gd
|
||
# 契约源:Fusion Pixel OFL(CJK 覆盖+授权干净)+ battle.md C6 headless 判据
|
||
#(注入字体非空 + 中文字形 has_char + 采样文本宽度 > 0——实际光栅观感归真人目检)。
|
||
# 路径常量从 UiKit 单点读取(字体路径改动 = 断言随动,禁测试侧复制字面量路径)。
|
||
# 前置:fresh checkout 需先 --editor --quit 刷导入缓存(.ttf 经导入管线成 FontFile——全素材同纪律)。
|
||
extends SceneTree
|
||
|
||
const UiKitScript := preload("res://presentation/views/ui_kit.gd")
|
||
const Kit := preload("res://tests/unit/test_kit.gd") # T6 收口:_check/汇总退出样板单点
|
||
|
||
|
||
func _init() -> void:
|
||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:281 (中文字体随包与字形覆盖组)
|
||
var path: String = UiKitScript.FONT_UI
|
||
var f: Font = UiKitScript.load_font(path)
|
||
Kit.check("随包字体守卫装载非空(res://assets/fonts/ui_font_fusion_pixel_zh_hans.ttf)", f != null)
|
||
if f != null:
|
||
# 字形集表:[个案标签, 须在集字符]——缺字明细进消息
|
||
var glyph_groups := [
|
||
["中文字形在集(攻/雷/旗/封)", "攻雷旗封"],
|
||
["中文字形在集(危——已开危险格字形换代前置,迭代36 u12/wa9)", "危"],
|
||
["ASCII/数字字形在集(A/0/%)", "A0%"],
|
||
]
|
||
for g in glyph_groups:
|
||
var missing := ""
|
||
for i in String(g[1]).length():
|
||
var ch := String(g[1])[i]
|
||
if not f.has_char(ch.unicode_at(0)):
|
||
missing += ch
|
||
Kit.check("%s(缺=%s)" % [g[0], missing if missing != "" else "无"], missing == "")
|
||
var sz := 18
|
||
var w_cn: float = f.get_string_size("战斗胜利", HORIZONTAL_ALIGNMENT_LEFT, -1, sz).x
|
||
var w_label: float = f.get_string_size("攻击 2", HORIZONTAL_ALIGNMENT_LEFT, -1, sz).x
|
||
Kit.check("中文采样文本宽度 > 0(C6 headless 判据)", w_cn > 0.0 and w_label > 0.0)
|
||
# 注:不设「私用区 has_char=false」负探针——fusion pixel 实测覆盖 PUA 码位,负向覆盖非契约面(宁缺勿错)
|
||
else:
|
||
Kit.check("字体缺失时后续断言跳过(缺位=回归,此行仅占位计数)", false)
|
||
quit(Kit.finish("ui_font_asset_test"))
|