Files
gplan-2/game/tests/unit/presentation/ui_font_asset_test.gd
T
DKChan fd6cf968dc 工程(存量断言精简·C档批): 六组手写断言族改表驱动循环——33 静态站点并为 7,清单 1587→1561,运行期条数不变
- C1 level_gen_params 逐类负向 11→1(消息带期望/实际与违例明细);C2 rng_stream_boot 黄金向量 8→1;C3 player_copy 禁词族 3→1、2→1;C4 standee_fx 蓄力判据 4→1;C5 ui_font 字形集 3→1(缺字明细进消息);C6 forge_workbench 持有行 2→1(两行取谓词并集,轻甲行补两子句,只增不减)
- 个案标签字面量全部保留在表内,失败定位不降级;冻结清单不动(对账基准 1587),extract_checks --diff=消失 33/新增 7,逐条对应删并申报表
- 用户裁决 2026-10-28:六组全批
2026-10-28 23:51:01 +08:00

39 lines
2.2 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
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"))