# item_tooltip_test —— item_proto 固定字段 + itemdesc + 实例 socket/attribute 的回归。 extends SceneTree const ItemTooltip = preload("res://ui/item_tooltip.gd") class FakeMobProto extends RefCounted: func mob(vnum: int) -> Dictionary: return {"vnum": vnum, "name": "Wolf", "locale_name": "Wolf"} var _fail := 0 func _ck(condition: bool, message: String) -> void: if not condition: _fail += 1 printerr("FAIL: " + message) func _init() -> void: var tooltip := ItemTooltip.new() var assets := AssetRoot.path() _ck(tooltip.setup(assets, "en"), "itemdesc en loaded") var proto := { "vnum": 71114, "name": "Wild Boar Seal", "locale_name": "Wild Boar Seal", "type": 2, "values": [12, 30, 0, 0, 0, 2], "limits": [{"type": 1, "value": 15}, {"type": 0, "value": 0}], "applies": [{"type": 1, "value": 100}, {"type": 0, "value": 0}, {"type": 0, "value": 0}], "refined_vnum": 71115, "refine_set": 42, } var instance := { "count": 3, "sockets": [28030, 0, -1], "attrs": [{"type": 5, "value": 7}], } var text := tooltip.format(71114, 3, proto, instance) _ck(text.begins_with("Wild Boar Seal\n数量:3"), "title and stack count") _ck(text.contains("This seal's magic"), "itemdesc description included") _ck(text.contains("等级要求:15"), "limit included") _ck(text.contains("防御力:34"), "armor value formula included") _ck(text.contains("最大生命:+100"), "proto apply included") _ck(text.contains("附加力量:+7"), "instance attribute included") _ck(text.contains("孔 1:#28030") and text.contains("孔 3:损坏"), "instance sockets included") _ck(text.contains("精炼后:#71115") and text.contains("精炼套件:42"), "refine links included") var rod_proto := {"locale_name": "Fishing Rod", "type": 13, "values": [30, 0, 120]} var rod_text := tooltip.format(20000, 1, rod_proto, {"sockets": [120, 0, 0]}) _ck(rod_text.contains("等级:3") and rod_text.contains("经验:120 / 120") and rod_text.contains("可升级"), "rod level and experience included") var fish_text := tooltip.format(27800, 1, {"locale_name": "Fish", "type": 12}, {"sockets": [235, 0, 0]}) _ck(fish_text.contains("长度:2.35 cm"), "fish length included") var ds_text := tooltip.format(12345, 1, {"locale_name": "Dragon Soul", "type": 29}, {}) _ck(ds_text.contains("龙魂石阶段:4") and ds_text.contains("龙魂石强化:4"), "dragon soul stage included") var special := ItemTooltip.new() _ck(special.setup(assets, "en", FakeMobProto.new()), "special tooltip sources loaded") var book_text := special.format(50300, 1, {"locale_name": "Skill Book", "type": 17}, {"sockets": [1, 0, 0]}) _ck(book_text.begins_with("Three-Way Cut Skill Book"), "skill book title includes skill name") var poly_text := special.format(70103, 1, {"locale_name": "Polymorph Marble", "type": 19}, {"sockets": [77, 0, 0]}) _ck(poly_text.begins_with("Wolf Polymorph Marble"), "polymorph title includes monster name") var timed := special.format(90001, 1, {"locale_name": "Timed", "type": 18, "limits": [{"type": 7, "value": 0}, {"type": 0, "value": 0}]}, {"sockets": [int(Time.get_unix_time_from_system()) + 65, 0, 0]}) _ck(timed.contains("剩余时间:1分5秒"), "realtime limit renders remaining time") if _fail == 0: print("PASS: item_tooltip_test") quit(0) else: printerr("%d check(s) failed" % _fail) quit(1)