142 lines
4.7 KiB
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")
|