# 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)