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