Files
TargetFrameBuff/tests/mock_wow.lua
T
2026-10-30 16:43:11 +00:00

111 lines
4.4 KiB
Lua

unpack = unpack or table.unpack
getglobal = function(n) return _G[n] end
now = 100
GetTime = function() return now end
SlashCmdList = {}
messages = {}
DEFAULT_CHAT_FRAME = {AddMessage=function(self,s) table.insert(messages,s) end}
DebuffTypeColor = {none={r=.8,g=0,b=0}, Magic={r=0,g=.5,b=1}, Poison={r=0,g=1,b=0}}
frames = {}
local M = {}
function M:GetName() return self.name end
function M:SetAllPoints(x) self.allPoints=x end
function M:GetFrameLevel() return self.level or 1 end
function M:SetFrameLevel(n) self.level=n end
function M:SetFont(path,size,flags) self.font=path; self.fontSize=size end
function M:SetPoint(...) self.point={...} end
function M:ClearAllPoints() self.point=nil end
function M:Show() self.shown=true end
function M:Hide() self.shown=false end
function M:IsShown() return self.shown end
function M:SetWidth(v) self.width=v end
function M:SetHeight(v) self.height=v end
function M:SetText(v) self.text=v end
function M:SetTextColor(...) self.color={...} end
function M:SetVertexColor(...) self.color={...} end
function M:SetTexture(v) self.texture=v end
function M:SetTexCoord(...) self.coords={...} end
function M:SetScript(k,v) self.scripts[k]=v end
function M:RegisterEvent(k) self.events[k]=true end
function M:UnregisterEvent(k) self.events[k]=nil end
function M:SetChecked(v) self.checked=v end
function M:GetChecked() return self.checked end
function M:SetMinMaxValues(a,b) self.min=a; self.max=b end
function M:SetValueStep(v) self.step=v end
function M:SetValue(v)
self.value=v
if self.scripts.OnValueChanged then local old=this; this=self; self.scripts.OnValueChanged(); this=old end
end
function M:GetValue() return self.value end
function M:SetCooldown(start,duration) self.start=start; self.duration=duration; self.calls=(self.calls or 0)+1; self:Show() end
function M:SetReverse(v) self.reverse=v end
function M:SetDrawEdge(v) self.edge=v end
function M:IsOwned(button) return self.owner==button end
function M:SetOwner(button) self.owner=button end
function M:SetUnitAura(unit,index,filter) self.tooltip={unit,index,filter} end
local function New(name)
local f=setmetatable({name=name,shown=true,scripts={},events={}}, {__index=M})
if name then _G[name]=f end
return f
end
function M:CreateFontString(name) return New(name) end
function M:CreateTexture(name) return New(name) end
function CreateFrame(kind,name,parent,template)
if kind=="Cooldown" and noCooldown then error("Unknown frame type") end
local f=New(name); f.parent=parent; f.kind=kind
table.insert(frames,f)
if template=="UICheckButtonTemplate" then New(name.."Text") end
if template=="OptionsSliderTemplate" then New(name.."Text"); New(name.."Low"); New(name.."High") end
return f
end
UIParent=New("UIParent")
GameTooltip=New("GameTooltip")
TargetFrame=New("TargetFrame")
TargetFrameBuffFrame=New("TargetFrameBuffFrame")
for i=1,32 do New("TargetFrameBuff"..i); New("TargetFrameBuff"..i.."Icon") end
for i=1,16 do New("TargetFrameDebuff"..i); New("TargetFrameDebuff"..i.."Icon"); New("TargetFrameDebuff"..i.."Count"); New("TargetFrameDebuff"..i.."Border") end
TargetDebuffButton_Update=function() end
auras={HELPFUL={},HARMFUL={}}
nativeBuffs={}
nativeDebuffs={}
UnitBuff=function(u,i) return nativeBuffs[i] end
UnitDebuff=function(u,i) local a=nativeDebuffs[i]; if a then return unpack(a) end end
calls={index=0,slots=0,bySlot=0}
local epoch=0
local slotMap={}
function Aura(icon,count,duration,expiration,removable,dispel)
return {icon,icon,count or 1,dispel or "Magic",duration or 30,expiration or 130,"player",removable or false}
end
function InstallAPI(batched)
C_UnitAuras={}
C_UnitAuras.UnitAura=function(u,i,filter)
calls.index=calls.index+1
local a=auras[filter][i]
if a then return unpack(a,1,8) end
end
if batched then
C_UnitAuras.GetAuraSlots=function(u,filter,max,token,buf)
calls.slots=calls.slots+1; epoch=epoch+1; slotMap={}
local n=table.getn(auras[filter])
for i=1,n do buf[i]=epoch*1000+i; slotMap[buf[i]]=auras[filter][i] end
for i=n+1,table.getn(buf) do buf[i]=nil end
buf.n=n
return nil,n
end
C_UnitAuras.UnitAuraBySlot=function(u,id)
calls.bySlot=calls.bySlot+1
assert(slotMap[id],"stale slot used")
return unpack(slotMap[id],1,8)
end
end
end
function LoadSettings()
for _,f in ipairs(frames) do
if f.events.ADDON_LOADED then
this=f; arg1="TargetFrameBuff"; f.scripts.OnEvent()
end
end
end
function Tick() TargetFrameBuff_Update(); TargetFrameBuff_OnUpdate(.2) end