Files
mtgodot-poc/project/view_equipment_ui_test.gd
T
2026-09-21 16:38:58 -07:00

66 lines
2.2 KiB
GDScript

# 40250 EquipmentDialog:槽位布局与统一属性面板回归测试。
extends SceneTree
const ViewEquipmentUI = preload("res://ui/view_equipment_ui.gd")
const UiManager = preload("res://ui/ui_manager.gd")
class MockClient extends Node:
var equipment := []
func get_view_equipment(_vid: int) -> Array: return equipment
class MockProto extends Node:
func item(vnum: int) -> Dictionary:
if vnum != 19:
return {}
return {
"vnum": 19, "locale_name": "战斗剑 +9", "type": 1,
"values": [0, 0, 0, 10, 20, 0],
}
var failures := 0
func _check(ok: bool, message: String) -> void:
if ok:
print("PASS: " + message)
else:
failures += 1
printerr("FAIL: " + message)
func _init() -> void:
call_deferred("_run")
func _run() -> void:
var ui := UiManager.new()
get_root().add_child(ui)
var client := MockClient.new()
client.equipment.resize(11)
for wear in 11:
client.equipment[wear] = {"wear": wear, "vnum": 0}
client.equipment[4] = {"wear": 4, "vnum": 19, "count": 1,
"sockets": [0, 0, 0], "attrs": [{"type": 5, "value": 12}]}
var view := ViewEquipmentUI.new()
get_root().add_child(view)
view.setup(client, ui, MockProto.new())
view.show_for(1001)
await process_frame
var dialog: Control = ui.find_child("ViewEquipment", true, false)
_check(dialog != null and dialog.size == Vector2(180, 230), "uses the 40250 180x230 dialog")
_check(view._slots.size() == 11, "creates all 11 legacy EquipmentSlot positions")
var weapon: Panel = view._slots.get(4)
_check(weapon != null and weapon.position == Vector2(6, 6) and weapon.size == Vector2(32, 96),
"weapon slot matches 40250 index 4 rectangle")
_check(weapon.tooltip_text.is_empty(), "slot has no native Godot tooltip panel")
view._on_slot_over_in(4)
await process_frame
var tooltip: Control = ui.get_item_tooltip_view(AssetRoot.path(), view.proto, null)
_check(tooltip.visible, "hover opens the shared 40250 ItemTooltipView")
_check(ui.find_children("ItemTooltipView", "", true, false).size() == 1,
"only one item attribute panel exists")
view._hide_item_tooltip()
_check(not tooltip.visible, "leaving the slot hides the shared attribute panel")
if failures == 0:
print("ALL TESTS PASSED")
quit(failures)