Files
mtgodot-poc/project/guild_creation_ui_test.gd
T

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, "发送成功后关闭创建窗口")