68 lines
2.3 KiB
GDScript
68 lines
2.3 KiB
GDScript
# 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)
|
|
gu.set_mobile_mode(true)
|
|
|
|
# 服务端请求应弹出创建窗口,且只复用一个窗口。
|
|
fc.guild_make_requested.emit()
|
|
_ck(is_instance_valid(gu._create_dialog), "guild_make_requested -> 创建公会窗口")
|
|
_ck(gu._create_dialog.size == Vector2i(520, 270), "移动创建公会弹窗使用横屏尺寸")
|
|
_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, "发送成功后关闭创建窗口")
|