Files
mtgodot-poc/project/guild_war_skill_test.gd
T

142 lines
5.3 KiB
GDScript

# guild_war_skill_test —— 公会窗「技能 / 公会战」两页 headless 自检。
# godot --headless --path project --script guild_war_skill_test.gd
extends SceneTree
const GuildUI = preload("res://ui/guild_ui.gd")
class FakeTable extends Node:
func for_category(cat: String) -> Array:
return [4051, 4052, 4053] if cat == "GUILD" else []
func name_of(id: int) -> String:
return {4051: "축복", 4052: "미리내", 4053: "무장"}.get(id, "skill %d" % id)
class FakeClient extends Node:
signal guild_changed()
signal guild_skill_changed()
signal guild_war_changed()
signal guild_comments_changed()
var guild := {"in_guild": true, "id": 77, "name": "Dragons", "level": 12,
"member_count": 2, "max_member_count": 32, "gold": 5}
var skill := {"valid": false}
var wars := []
var war := {"opp_guild_id": 0, "opp_name": "", "type": 0, "state": 0}
var comments := []
var calls := []
func is_in_game() -> bool: return true
func get_guild() -> Dictionary: return guild
func get_guild_members() -> Array: return []
func get_guild_grades() -> Array: return []
func get_guild_skill() -> Dictionary: return skill
func get_guild_wars() -> Array: return wars
func get_guild_war() -> Dictionary: return war
func get_guild_comments() -> Array: return comments
func use_guild_skill(vnum: int, target: int) -> bool:
calls.append(["use", vnum, target]); return true
func declare_guild_war(name: String) -> bool:
calls.append(["war", name]); return true
func guild_post_comment(text: String) -> bool:
calls.append(["post_comment", text]); return true
func guild_refresh_comments() -> bool:
calls.append(["refresh_comments"]); return true
func guild_delete_comment(comment_id: int) -> bool:
calls.append(["delete_comment", comment_id]); return true
var _fail := 0
func _ck(c: bool, m: String) -> void:
if not c:
_fail += 1
printerr("FAIL: " + m)
func _init() -> void:
await _run()
if _fail == 0:
print("PASS: guild_war_skill_test")
quit(0)
else:
printerr("%d check(s) failed" % _fail)
quit(1)
func _btn(root: Node, label: String) -> Button:
for b in root.find_children("*", "Button", true, false):
if String(b.text) == label:
return b
return null
func _labels_text(page: Node) -> String:
var s := ""
for c in page.find_children("*", "Label", true, false):
s += String(c.text) + "\n"
return s
func _run() -> void:
var canvas := CanvasLayer.new()
get_root().add_child(canvas)
var fc := FakeClient.new()
get_root().add_child(fc)
var tbl := FakeTable.new()
get_root().add_child(tbl)
var gu: Node = GuildUI.new()
get_root().add_child(gu)
gu.setup(fc, canvas, tbl)
gu.toggle()
_ck(gu.is_open(), "公会窗打开")
_ck(gu._pages.size() == 4, "4 页(成员/技能/公会战/公告)")
# --- 技能页 ---
gu._set_tab(1)
_ck(_labels_text(gu._pages[1]).contains("还没收到"), "技能页:无数据提示")
fc.skill = {"valid": true, "skill_point": 5, "guild_point": 1200, "max_guild_point": 5000,
"levels": [3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 7]}
fc.guild_skill_changed.emit()
var st := _labels_text(gu._pages[1])
_ck(st.contains("技能点 5") and st.contains("1200 / 5000"), "技能页:点数行")
_ck(st.contains("축복") and st.contains("Lv 3"), "技能页:GUILD 技能名 + 等级")
_ck(st.contains("무장") and st.contains("Lv 7"), "技能页:第 12 个技能配到 levels[11]")
# 축복 lv3 -> 有「施放」按钮;미리내 lv0 -> 无
var cast := _btn(gu._pages[1], "施放")
_ck(cast != null, "技能页:可施放技能有按钮")
cast.pressed.emit()
_ck(fc.calls == [["use", 4051, 0]], "施放 -> use_guild_skill(4051, 0)")
# --- 公会战页 ---
gu._set_tab(2)
_ck(_labels_text(gu._pages[2]).contains("当前无公会战"), "公会战页:无战提示")
_ck(_labels_text(gu._pages[2]).contains("无"), "公会战页:进行中列表为空")
# 宣战
gu._war_name_edit.text = "Tigers"
_btn(gu._pages[2], "宣战").pressed.emit()
_ck(fc.calls[-1] == ["war", "Tigers"], "宣战 -> declare_guild_war(\"Tigers\")")
# 收到 WAR ON_WAR + WAR_LIST
fc.war = {"opp_guild_id": 88, "opp_name": "Tigers", "type": 1, "state": 6}
fc.wars = [{"src": 77, "dst": 88, "src_name": "Dragons", "dst_name": "Tigers"}]
fc.guild_war_changed.emit()
var wt := _labels_text(gu._pages[2])
_ck(wt.contains("对 Tigers") and wt.contains("交战中"), "公会战页:当前战状态")
_ck(wt.contains("Dragons vs Tigers") and wt.contains("◀我方"), "公会战页:GvG 行 + 我方标记")
# --- 公告页 ---
gu._set_tab(3)
_ck(_labels_text(gu._pages[3]).contains("暂无公告"), "公告页:无数据提示")
fc.comments = [{"id": 9, "name": "Alice", "content": "今晚攻城"}]
fc.guild_comments_changed.emit()
await process_frame
var ct := _labels_text(gu._pages[3])
_ck(ct.contains("Alice:今晚攻城"), "公告页:公告内容")
var edits: Array = gu._pages[3].find_children("*", "LineEdit", true, false)
_ck(edits.size() == 1, "公告页:输入框")
if edits.size() == 1:
edits[0].text = "明晚集合"
_btn(gu._pages[3], "发布").pressed.emit()
_ck(fc.calls[-1] == ["post_comment", "明晚集合"], "公告页:发布")
_btn(gu._pages[3], "刷新").pressed.emit()
_ck(fc.calls[-1] == ["refresh_comments"], "公告页:刷新")
for b in gu._pages[3].find_children("*", "Button", true, false):
if String(b.text) == "删":
b.pressed.emit()
break
_ck(fc.calls[-1] == ["delete_comment", 9], "公告页:删除")