# guild_creation_ui_test —— GC_REQUEST_MAKE_GUILD -> 输入 -> CG_ANSWER_MAKE_GUILD。 # godot --headless --path project --script guild_creation_ui_test.gd extends SceneTree const GuildUI = preload("res://ui/guild_ui.gd") class FakeClient extends Node: signal guild_make_requested() var calls: Array = [] func guild_answer_make(name: String) -> bool: calls.append(name) return true var _fail := 0 func _ck(c: bool, m: String) -> void: if not c: _fail += 1 printerr("FAIL: " + m) func _init() -> void: # Window.popup_centered() requires the dialog to have entered the scene tree; # defer the UI assertions until the test root has finished attaching nodes. call_deferred("_run") func _run() -> void: _run_checks() if _fail == 0: print("PASS: guild_creation_ui_test") quit(0) else: printerr("%d check(s) failed" % _fail) quit(1) func _run_checks() -> void: var canvas := CanvasLayer.new() get_root().add_child(canvas) var fc := FakeClient.new() get_root().add_child(fc) var gu: Node = GuildUI.new() get_root().add_child(gu) gu.setup(fc, canvas) # 服务端请求应弹出创建窗口,且只复用一个窗口。 fc.guild_make_requested.emit() _ck(is_instance_valid(gu._create_dialog), "guild_make_requested -> 创建公会窗口") _ck(gu._create_name_edit.max_length == 12, "名称输入限制为 12 字") var first_dialog = gu._create_dialog fc.guild_make_requested.emit() _ck(gu._create_dialog == first_dialog, "重复请求复用窗口") # 空名称和控制字符在发包前拦截,窗口保持可编辑。 gu._create_name_edit.text = "" gu._on_guild_create_confirmed() _ck(fc.calls.is_empty(), "空名称不发应答") _ck(gu._create_status.text.contains("不能为空"), "空名称显示校验错误") gu._create_name_edit.text = "Guild\nName" gu._on_guild_create_confirmed() _ck(fc.calls.is_empty(), "控制字符名称不发应答") _ck(gu._create_status.text.contains("非法字符"), "非法字符显示校验错误") # 合法名称回送 CG_ANSWER_MAKE_GUILD 并关闭窗口。 gu._create_name_edit.text = "Knights" gu._on_guild_create_confirmed() _ck(fc.calls == ["Knights"], "合法名称 -> guild_answer_make") _ck(gu._create_dialog == null, "发送成功后关闭创建窗口")