Files
gplan-2/game/tests/unit/battle_settlement/extended_row_violation_test.gd
T
DKChan 8fb3310cae 卡①T3(拆件批wr5): 宿主超标函数拆分全清+_emit_row束形改形——begin_battle(141行/17分支/16局部/7返回四键)拆编排骨架+_begin_<段>私有族(accept含spawn受理门/dice区间骰+_dice_roll单轴函数/preview_economy),段序=受理与敌人spawn→装板→同调/fx运行态与订阅重建→常时参数与充能重置→巢穴预告与经济注入→轮始发射,取号序逐字(数量骰先/atk骰后/行集空不开流);_place_variants(52行/14局部/6嵌套三键)拆_place_variants_apply+_variants_fringe(嵌套深度5→3,variant_place取号序逐字:vrow单抽先于片生长);_emit_row 8参→5参head归因束(键集type/source_class/origin_cell/highlight缺省空,行字典字段与step_row载荷逐字)调用点全量改形28处=宿主2+grant段6+combat段2+verdict段3+decay段1+battle_fx_host emit_cb 3+reward_grant 9+damage_controller emit_row_cb 6+damage_controller_test _on_row签名+extended_row_violation直调2(卡面G5/G6清单漏计combat2/verdict3/decay1与grant段实为6处、两测试消费方,实查补全);宿主行数压至999≤1000(契约2还债归绿:拆分壳开销以家族归并+陈旧横幅合并+叙事类注释清理吸收,禁删注释凑行数红线未碰——所删皆变更叙事/三写重复说明);gdstyle键账=宿主仅剩类变量38(豁免第三条在案)行数键消失,全闸0 NEW。验收:十套件绿(round_flow/seal/feats/settle/treasure/level_shop/forge/damage/contracts/node_map_determinism)+零SCRIPT ERROR〔拆件批 V9〕
2026-10-27 07:11:56 +08:00

39 lines
2.3 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.
# 致命类用例(独立进程,期望退出码 1)——迭代 38 卡④ wr2-np:扩展行必载 effect_id 负路径断言
# 违约直调 _emit_row(type=extended 无 effect_id 载荷)→ a2 行协议校验 assert 炸(debug 实况,
# 输出中的 SCRIPT ERROR 为其测试目标——负面套件全文折叠)→ 零发射;
# 回归态(校验段被移除)= 违约行照发 → 退出码 2 ≠ 期望 1(闸红)。
# 独立进程理由:GDScript assert 失败必产 SCRIPT ERROR 且不可捕获,非负面套件会被 run_all 错误
# 扫描判红(迭代 38 卡④ grilling 第二轮同款结论——负面豁免机制为此存在,counter_prefix 先例)。
# 运行:godot --headless --path game --script res://tests/unit/battle_settlement/extended_row_violation_test.gd
extends SceneTree
const Kit := preload("res://tests/unit/test_kit.gd")
func _init() -> void:
var db = load("res://core/config_db.gd").new()
if not db.load_tables("res://data/tables", false):
push_error("[extended_row_violation_test] 表加载失败")
quit(2)
return
var rng = load("res://core/rng_service.gd").new()
rng.set_master_seed(74100)
var oc = load("res://core/battle_orchestrator.gd").new(db, rng)
var hits: Array = []
oc.step_row.connect(func(row): hits.append(row))
# 违约直调(缺 effect_id 载荷——行协议违约):debug 下 a2 校验 assert 炸中断 _emit_row 本体,
# 控制流回到本函数(headless assert 语义=中断当前函数不中止运行);release 下 return 零发射同效
oc._emit_row({"type": "extended", "source_class": "fx_reveal", "origin_cell": Vector2i.ZERO}, 1, "负路径", 0, {})
if not hits.is_empty():
push_error("[extended_row_violation_test] 违约行被发射——a2 校验失守(回归)")
quit(2)
return
# 对照组:合法扩展行(带 effect_id)照常发射——校验只拦违约形态
oc._emit_row({"type": "extended", "source_class": "fx_reveal", "origin_cell": Vector2i.ZERO}, 1, "合法对照", 0, {"effect_id": "fx_reveal"})
if hits.size() != 1 or String(hits[0].get("type", "")) != "extended":
push_error("[extended_row_violation_test] 合法扩展行未发射——校验误拦(回归)")
quit(2)
return
print("[extended_row_violation_test] 违约零发射+合法照发(a2 校验在位)")
quit(1)