改动面 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)。
52 lines
2.6 KiB
GDScript
52 lines
2.6 KiB
GDScript
# tests/unit/presentation/hud_presenter_test.gd — HUD 投影直接单测
|
||
# 断言面 = 纯函数投影:动作结果文案按拒绝原因逐类落字(玩家看到的每句提示都由这里出)、
|
||
# 未知原因有兜底文案(不吐空串)、棋盘变异行投影随表走。期望值由注入内容数出来。
|
||
# 运行:godot --headless --path game --script res://tests/unit/presentation/hud_presenter_test.gd
|
||
extends SceneTree
|
||
|
||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||
const HudScript := preload("res://presentation/hud_presenter.gd")
|
||
|
||
|
||
func _init() -> void:
|
||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:260 (HUD 投影宿主——装载组)
|
||
_test_accepted_text()
|
||
_test_reject_text_by_reason()
|
||
_test_unknown_reason_fallback()
|
||
quit(Kit.finish("hud_presenter_test"))
|
||
|
||
|
||
func _test_accepted_text() -> void:
|
||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:212 (受理反馈呈现组)
|
||
var t: String = HudScript.outcome_text({"accepted": true})
|
||
Kit.check("受理态文案固定为「执行完成。」(实际「%s」)" % t, t == "执行完成。")
|
||
|
||
|
||
func _test_reject_text_by_reason() -> void:
|
||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:212 (拒绝三源可辨文案组)
|
||
var cases := {
|
||
"not_adjacent": "不能执行:目标与小人不相邻",
|
||
"target_revealed": "不能执行:目标已开",
|
||
"seal_present": "不能封印:此格已有封印印记(封印为一次性承诺——相邻时左键直接挖开)",
|
||
}
|
||
var bad: Array[String] = []
|
||
for sub in cases:
|
||
var got: String = HudScript.outcome_text({
|
||
"accepted": false, "reject_reason": "board_face", "sub_reason": sub,
|
||
})
|
||
if got != String(cases[sub]):
|
||
bad.append("%s→「%s」" % [sub, got])
|
||
Kit.check("棋盘面各拒绝原因文案逐类正确(错 %d 项 %s)" % [bad.size(), str(bad)], bad.is_empty())
|
||
var ap: String = HudScript.outcome_text({"accepted": false, "reject_reason": "resource_face"})
|
||
Kit.check("资源面拒绝文案为「AP 不足。」(实际「%s」)" % ap, ap == "AP 不足。")
|
||
|
||
|
||
func _test_unknown_reason_fallback() -> void:
|
||
# 判据出处: design/gdd/systems/表现与支撑/HUD框架.md:212 (未知兜底文案组)
|
||
var t: String = HudScript.outcome_text({"accepted": false, "reject_reason": "brand_new_reason"})
|
||
Kit.check("未知拒绝原因兜底为「动作被拒。」而非空串(实际「%s」)" % t, t == "动作被拒。")
|
||
var sub: String = HudScript.outcome_text({
|
||
"accepted": false, "reject_reason": "board_face", "sub_reason": "brand_new_sub",
|
||
})
|
||
Kit.check("棋盘面未知子因兜底带前缀可诊断(实际「%s」)" % sub, sub.begins_with("棋盘面拒绝: "))
|