Files
gplan-2/game/tests/unit/presentation/reward_overlay_test.gd
T
DKChan f28e09854c 注释清偿(fix-ci-red-20261110·二):已删视图接缝名的注释残留 6 处清零
面=iter54-卡1(96123978)删掉 press_* 视图方法口后,注释里仍以现名指称这些方法,读者照名找方法会落到空处。逐件核当前驱动事实改写:armed_timer 头注三缝改登在位的三个公开读口(is_refresh_ready/confirm_visible/refresh_remaining_text)+结算框挂起态 settlement_stop_timer 组合根读写面(ui_click_probe:1336/1341/1358 与 journey_player:410 消费在案);level_map_screen 图上命中段与 ui_click_probe 选路段改指 candidate_rect 取热点真点(fx_shot/layout/shot 三探针 push_click_at(candidate_rect(i)) 在案);ui_input_probe ⑫ 由来句「press_candidate 直调」改「旧视图方法口直调」(保留真机 bug 由来、不冒充现行通道);ui_struct_probe 节点结算层关路径改「真点继续钮」(ProbeUiUtil.push_click(node_overlay._btn) 在案);reward_overlay_test ② 段改「玩家点选同一 _select_card 处理器」(curio_pick_overlay:142 处理器在位)。

件核:全仓 grep press_candidate/press_continue/press_card/press_confirm/press_refresh_for_probe 于 *.gd 零命中(reports/ 历史报告的现象句属当时实况叙述,不改)。

凭据:改动行逐行机器校验=6 个 .gd 非注释行改动 0(零行为变更证明);game/tests/static_scan.sh exit 0(S13/S8/S7/S12 ok+gdstyle 基线外新违规 0);tools/audit_file_headers.py ok(R0/R2/R3 零命中,160 个 .gd);纯注释批免冒烟(先例 9a723946 引 5843270)。
2026-11-10 04:45:30 +08:00

90 lines
5.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.
extends SceneTree
# 三选一覆盖层 UI 直验套件——
# 守 node_overlay.show_reward_items 的继任共用面;奖励节点三选一与关卡完成三选一共用 CurioPickOverlay,
# 本套件守共用面的「功能存在 ≠ 功能可达」盲区:选择外发/强制确认两段式/结果态。
# 〔无替换子面板路段——装配不可变契约 1,overlay 无 replace 态。〕
# 运行:godot --headless --path game --script res://tests/unit/presentation/reward_overlay_test.gd(expect 0)
# 断言走 test_kit 计数(Kit.check)+ 失败即停早退协议(顺序状态机——坏态下后继断言无效)。
const Kit := preload("res://tests/unit/test_kit.gd")
const ProbeUiUtil := preload("res://probe/probe_ui_util.gd") # 真输入合成单点(tests 面复用共用件——禁复制第二份合成输入件)
# 断言 + 失败即停(原直写 print FAIL + quit(1) + return 样板单点化——早退语义逐位保持)
func _req(desc: String, ok: bool) -> bool:
# 判据出处: design/ux/node-reward.md「定位」奖励节点 奖励节点(奖励覆盖层直验——需求包装组)
Kit.check(desc, ok)
if not ok:
quit(1)
return false
return true
func _initialize() -> void:
# 判据出处: design/ux/node-reward.md「定位」奖励节点 奖励节点(奖励节点装载组)
call_deferred("_run")
func _run() -> void:
# 判据出处: design/ux/node-reward.md「定位」奖励节点 奖励节点(奖励三选一呈现组)
var ov = load("res://presentation/views/curio_pick_overlay.gd").new()
root.add_child(ov)
var picked := []
var continued := []
ov.pick_confirmed.connect(func(id: String): picked.append(id))
ov.continue_pressed.connect(func(): continued.append(true))
# ① 选择态:三卡呈现、确认钮隐藏(两段式——点选前不给确认)
ov.open_pick("第 1 层通过!", [
{"id": "attack", "text": "攻击力提升\n攻击 +1"},
{"id": "gp", "text": "GP 袋\nGP +20"},
{"id": "ap", "text": "行动点提升\n每战首轮 AP +1"},
])
# bcard 形态:三选一卡为 BCard(PanelContainer) 非 Button——
# 用 `c is Button` 计数会恒 0(基线红成因,主区 3c4291d 起红在案)。本面数 _choice_box 子节点数,断言语义=三卡呈现。
var btns: int = ov._choice_box.get_child_count()
if not _req("选择态应三卡呈现且确认/继续隐藏(btns=%d)" % btns,
ov.visible and btns == 3 and not ov._confirm_btn.visible and not ov._continue_btn.visible):
return
# ①b 刷新面投喂(对齐商店 MC-1——投喂前隐藏/免费位点亮/GP 付费档禁用态/真实钮路径外发)
if not _req("投喂前刷新钮应隐藏(未投喂上下文如店内专长凭证面无刷新)",
not ov._refresh_btn.visible):
return
var refreshed := []
ov.refresh_requested.connect(func(): refreshed.append(true))
ov.set_refresh_display(0, 20, false)
if not _req("GP 付费档:余量 0 价 20 余额不足=钮现形但禁用、角标 0、价签行可见",
ov._refresh_btn.visible and ov._refresh_btn.disabled and ov._refresh_badge.text == "0"
and ov._refresh_l.visible and ov._refresh_l.text == "刷新 20 GP"):
return
ov.set_refresh_display(2, 20, false)
if not _req("免费位余量 2:钮点亮、角标 2、免费行——真实按钮路径外发 refresh_requested",
ov._refresh_btn.visible and not ov._refresh_btn.disabled and ov._refresh_badge.text == "2"
and ov._refresh_l.text == "免费 · 不消耗 AP"):
return
ov.set_refresh_display(0, 20, true)
if not _req("付费档余额可付:免费位 0 但钮点亮(对齐商店——GP 档可刷)",
ov._refresh_btn.visible and not ov._refresh_btn.disabled):
return
await process_frame # 刷新钮现形当帧容器重排在途——排版帧后矩形成形再真点
ProbeUiUtil.push_click(root, ov._refresh_btn) # 真点刷新钮(disabled 守卫=真实拒绝路径)
if not _req("真点刷新未外发 refresh_requested", refreshed.size() == 1):
return
# ② 点选→高亮→确认外发(真输入管线:bcard gui_input 点选→玩家点选同一 _select_card 处理器);确认前改选以最后点选为准
ProbeUiUtil.push_click_at(root, (ov._bcards[0] as Control).get_global_rect().get_center())
ProbeUiUtil.push_click_at(root, (ov._bcards[1] as Control).get_global_rect().get_center())
await process_frame # 确认钮现形当帧容器重排在途——排版帧后矩形成形再真点
ProbeUiUtil.push_click(root, ov._confirm_btn)
if not _req("点选确认未外发 pick_confirmed(gp)(%s)" % str(picked),
ov._confirm_btn.visible and picked.size() == 1 and String(picked[0]) == "gp"):
return
# ③ 结果态:继续钮点亮、唯一出口(刷新钮随选择态收——停点已兑付残钮零意图可点)
ov.set_refresh_display(2, 20, false)
ov.show_result("已选择:攻击力提升 · 攻击 +1")
if not _req("结果态应点亮继续且收三卡与刷新钮",
ov._continue_btn.visible and not ov._choice_box.visible and not ov._refresh_btn.visible):
return
await process_frame # 继续钮现形当帧容器重排在途——排版帧后矩形成形再真点
ProbeUiUtil.push_click(root, ov._continue_btn)
if not _req("继续未外发 continue_pressed", continued.size() == 1):
return
ov.close_pick()
if not _req("close_pick 应收屏", not ov.visible):
return
quit(Kit.finish("reward_verify", "PASS — 三卡两段式/确认外发/结果态/收屏 全过"))