Files
moonwell-client/tool/tests/dragonui_override_test.lua

142 lines
4.7 KiB
Lua

-- Standalone contract test. Run from the repository root with Lua 5.1+:
-- lua tool/tests/dragonui_override_test.lua
local addon = {
db = {
profile = {
buffs = { enabled = true },
castbar = { enabled = true },
unitframe = {
player = { enabled = true },
boss = { enabled = true },
},
modules = {
minimap = { enabled = true },
buttons = { enabled = true },
},
},
},
errors = {},
refreshed = {},
}
function addon:Error(...)
table.insert(self.errors, { ... })
end
addon.ModuleRegistry = {
GetInfo = function(_, name)
return { module = { initialized = false, applied = false }, loadOnce = name == "minimap" }
end,
Refresh = function(_, name)
addon.refreshed[name] = true
return true
end,
}
local addons = {
{ name = "DragonUI", enabled = 2 },
{
name = "MyMinimap",
enabled = 2,
metadata = {
["X-DragonUI-Overrides"] = "minimap, buffs, castbar, player, boss",
["X-DragonUI-Override-Priority"] = "100",
},
},
{
name = "BrokenReplacement",
enabled = 2,
metadata = {
["X-DragonUI-Overrides"] = "buttons",
},
},
{
name = "BrokenHighPriorityMinimap",
enabled = 2,
metadata = {
["X-DragonUI-Overrides"] = "minimap",
["X-DragonUI-Override-Priority"] = "200",
},
},
}
function GetNumAddOns()
return #addons
end
function GetAddOnInfo(index)
return addons[index].name
end
function GetAddOnEnableState(_, index)
return addons[index].enabled
end
function GetAddOnMetadata(name, key)
for _, entry in ipairs(addons) do
if entry.name == name then
return entry.metadata and entry.metadata[key]
end
end
end
function UnitName()
return "Tester"
end
local eventFrames = {}
function CreateFrame()
local frame = { events = {}, scripts = {} }
function frame:RegisterEvent(event) self.events[event] = true end
function frame:UnregisterEvent(event) self.events[event] = nil end
function frame:SetScript(script, callback) self.scripts[script] = callback end
table.insert(eventFrames, frame)
return frame
end
local chunk = assert(loadfile(
"src/Data/ruRU/patch-ruRU-5/Interface/AddOns/DragonUI/core/overrides.lua"
))
chunk("DragonUI", addon)
addon.OverrideRegistry:DiscoverDeclarations()
addon.OverrideRegistry:SuppressDeclaredModules()
assert(addon.db.profile.modules.minimap.enabled == false, "declared minimap was not suppressed")
assert(addon.db.profile.modules.buttons.enabled == false, "declared buttons were not suppressed")
assert(addon.db.profile.buffs.enabled == false, "buffs config path was not suppressed")
assert(addon.db.profile.castbar.enabled == false, "castbar config path was not suppressed")
assert(addon.db.profile.unitframe.player.enabled == false, "player config path was not suppressed")
assert(addon.db.profile.unitframe.boss.enabled == false, "boss config path was not suppressed")
local activated = false
local provider = {}
function provider:Activate(dragon, moduleName)
assert(self == provider)
assert(dragon == addon)
assert(moduleName == "minimap")
activated = true
end
local ok, reason = addon:RegisterModuleOverride("minimap", "MyMinimap", provider, { priority = 100 })
assert(ok and reason == nil, "provider registration failed")
assert(addon:IsModuleOverridden("minimap"), "winner was not exposed")
assert(addon:GetModuleOverride("minimap") == "MyMinimap", "wrong winner")
local eventFrame = assert(eventFrames[1], "startup event frame was not created")
eventFrame.scripts.OnEvent(eventFrame, "PLAYER_LOGIN")
assert(activated, "provider was not activated at PLAYER_LOGIN")
assert(addon:GetModuleOverride("minimap") == "MyMinimap",
"working provider did not replace stale higher-priority declaration")
assert(addon.refreshed.buttons, "broken declaration did not fall back to DragonUI")
assert(addon.db.profile.modules.buttons.enabled == true, "fallback state was not restored")
assert(addon.db.profile.buffs.enabled == true, "buffs fallback state was not restored")
assert(addon.db.profile.castbar.enabled == true, "castbar fallback state was not restored")
assert(addon.db.profile.unitframe.player.enabled == true, "player fallback state was not restored")
assert(addon.db.profile.unitframe.boss.enabled == true, "boss fallback state was not restored")
eventFrame.scripts.OnEvent(eventFrame, "PLAYER_LOGOUT")
assert(addon.db.profile.modules.minimap.enabled == true, "saved module state was not restored")
print("DragonUI override contract: OK")