改动面 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)。
51 lines
2.6 KiB
GDScript
51 lines
2.6 KiB
GDScript
# tests/unit/battle_settlement/boss_gate_test.gd — Boss 节点开战必选 Boss 行集(端到端)
|
||
# 断言面 = 行类路由(resolver:boss 行集全行 boss / battle 行集零 boss 行)+端到端
|
||
# (begin_battle(node_type="boss") → 实例化敌人全部出自 boss 行集)。固定种子经 RngService 流口。
|
||
# 运行:godot --headless --path game --script res://tests/unit/battle_settlement/boss_gate_test.gd
|
||
extends SceneTree
|
||
|
||
const Kit := preload("res://tests/unit/test_kit.gd")
|
||
|
||
|
||
func _init() -> void:
|
||
# 判据出处: design/gdd/systems/战斗循环/敌人系统.md:293 Boss 节点开战行集宿主(装载组)
|
||
_test_boss_node_spawns_boss_rowset()
|
||
quit(Kit.finish("boss_gate_test"))
|
||
|
||
|
||
func _test_boss_node_spawns_boss_rowset() -> void:
|
||
# 判据出处: design/gdd/systems/战斗循环/敌人系统.md:295 开战生成按遭遇坐标取行集(Boss 行集组)
|
||
var db = load("res://core/config_db.gd").new()
|
||
var load_ok: bool = db.load_tables("res://data/tables", true) and db.diagnostics_count("error") == 0
|
||
Kit.check("前置:表加载零 error", load_ok)
|
||
if not load_ok:
|
||
return
|
||
var rng = load("res://core/rng_service.gd").new()
|
||
rng.set_master_seed(20261103) # 固定种子经 RngService 流口(RNG 单点)
|
||
# 行类路由面:resolver 预解析(boss 行集全行 row_kind=="boss";对照 battle 行集零 boss 行)
|
||
var boss_ids := {}
|
||
var battle_ids := {}
|
||
var boss_kind_ok := true
|
||
for row in db.combat.enemy.resolve_rowset(1, 4, "boss"):
|
||
boss_ids[String(row["enemy_id"])] = true
|
||
if String(row["row_kind"]) != "boss":
|
||
boss_kind_ok = false
|
||
var battle_kind_ok := true
|
||
for row in db.combat.enemy.resolve_rowset(1, 4, "battle"):
|
||
battle_ids[String(row["enemy_id"])] = true
|
||
if String(row["row_kind"]) == "boss":
|
||
battle_kind_ok = false
|
||
Kit.check("行类路由:boss 行集非空全行 boss、battle 行集非空零 boss 行〔断言补齐批 V10〕",
|
||
boss_kind_ok and battle_kind_ok and boss_ids.size() > 0 and battle_ids.size() > 0)
|
||
# 端到端:begin_battle(node_type="boss") → 实例化敌人行键全部出自 boss 行集
|
||
var oc = load("res://core/battle_orchestrator.gd").new(db, rng)
|
||
var ok_boss: bool = oc.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(db.combat.hero.max_hp), "node_type": "boss"})
|
||
Kit.check("前置:boss 节点开局受理(L1 D4 Boss 行集)", ok_boss)
|
||
if not ok_boss:
|
||
return
|
||
var all_from_boss := true
|
||
for u in oc._enemy_system.all_enemies():
|
||
if not boss_ids.has(String(u["enemy_id"])):
|
||
all_from_boss = false
|
||
Kit.check("Boss 节点开战必选 Boss 行集(实例化敌人全部出自 boss 行集——跨宿主真实入口链)〔断言补齐批 V10〕", all_from_boss)
|