Files
gplan-2/game/tests/unit/battle_settlement/boss_gate_test.gd
T
DKChan 9f21236f80 工程(注释标记词换代·oracle→判据出处): 用户 2026-11-07 令——判据出处注记的标记词改用项目已有中文名,避免 Oracle 被读成数据库。注释格式句、机检正则、标识符、卡片与登记同步换代;零行为改动。
改动面 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)。
2026-11-07 07:11:15 +08:00

51 lines
2.6 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/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)