You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
6.4 KiB

5 years ago
dofile("wow_api.lua")
dofile("LibStub.lua")
dofile("../CallbackHandler-1.0/CallbackHandler-1.0.lua")
dofile("../AceEvent-3.0/AceEvent-3.0.lua")
local AceEvent = LibStub("AceEvent-3.0")
local addon = {}
AceEvent:Embed(addon)
-- Test embedding and then registering and unregistering and seeing that things are caught and NOT caught correctly
do
local eventResult
function addon:EVENT_TEST(event,arg1)
assert(self==addon)
assert(event=="EVENT_TEST")
eventResult = arg1
end
eventResult = 1
addon:RegisterEvent("EVENT_TEST") -- simple reg & test
WoWAPI_FireEvent("EVENT_TEST", 2)
assert(eventResult==2)
eventResult = 3
addon:UnregisterEvent("SOMETHINGELSE") -- unreg something that doesn't exist
WoWAPI_FireEvent("SOMETHINGELSE", 4) -- fire something with no handler
assert(eventResult==3)
eventResult = 5
addon:UnregisterEvent("SOMETHINGELSE") -- again unregister something that doesn't exist (why? ohwell)
WoWAPI_FireEvent("EVENT_TEST", 6) -- this should still fire
assert(eventResult==6)
eventResult = 7
addon:UnregisterAllEvents() -- test unregging everything
WoWAPI_FireEvent("EVENT_TEST", 8) -- this should NOT fire
assert(eventResult==7)
addon:RegisterEvent("EVENT_TEST") -- re-register
WoWAPI_FireEvent("EVENT_TEST", 9)
assert(eventResult==9) -- should fire again!
local switched=0
function addon:EVENT_TEST() -- overwrite handler, should work with self["methodname"] syntax
switched=switched+1
end
WoWAPI_FireEvent("EVENT_TEST", 10)
assert(switched==1)
assert(eventResult==9)
local woot=0
addon:RegisterEvent("EVENT_TEST", function(event, arg)
assert(event=="EVENT_TEST")
assert(arg=="woot", dump(event,arg))
woot=woot+1
end) -- CHANGE registration (to a funcref even!)
WoWAPI_FireEvent("EVENT_TEST", "woot")
assert(switched==1)
assert(eventResult==9)
assert(woot==1)
addon:UnregisterAllEvents()
WoWAPI_FireEvent("EVENT_TEST")
assert(switched==1)
assert(eventResult==9)
assert(woot==1)
end
-- Test nonembedded funcref calling style, two events to same handler
do
local eventName
local eventCount=0
local function handler(event, ...)
eventName=event
eventCount=eventCount+1
end
AceEvent:RegisterEvent("EVENT1", handler)
AceEvent:RegisterEvent("EVENT2", handler)
WoWAPI_FireEvent("EVENT1")
assert(eventName=="EVENT1" and eventCount==1)
WoWAPI_FireEvent("EVENT2")
assert(eventName=="EVENT2" and eventCount==2)
end
-- Test "addonID" instead of self
do
local eventName
local eventCount=0
local function handler(event, ...)
eventName=event
eventCount=eventCount+1
end
local event3Count=0
local function handler3(event, ...)
event3Count=event3Count+1
end
AceEvent.RegisterEvent("myAddon", "EVENT1", handler)
AceEvent.RegisterEvent("myOtherAddon", "EVENT2", handler)
AceEvent.RegisterEvent("myOtherAddon", "EVENT3", handler3)
WoWAPI_FireEvent("EVENT1")
assert(eventName=="EVENT1" and eventCount==1)
WoWAPI_FireEvent("EVENT2")
assert(eventName=="EVENT2" and eventCount==2)
WoWAPI_FireEvent("EVENT3")
assert(event3Count==1)
AceEvent.UnregisterAllEvents("myAddon") -- note "." calling style
WoWAPI_FireEvent("EVENT1") -- should not fire
assert(eventCount==2)
WoWAPI_FireEvent("EVENT2")
assert(eventCount==3)
WoWAPI_FireEvent("EVENT3")
assert(event3Count==2)
AceEvent:UnregisterAllEvents("myOtherAddon") -- now ":" calling style
WoWAPI_FireEvent("EVENT1") -- should not fire
assert(eventCount==3)
WoWAPI_FireEvent("EVENT2") -- should not fire
assert(eventCount==3)
WoWAPI_FireEvent("EVENT3") -- should not fire
assert(event3Count==2)
end
-- Test multiple args, different types
do
local arg3={}
local args
local function handler(event, ...)
args = { ... }
end
AceEvent:RegisterEvent("ARGZZ", handler) -- ":" calling style, self=AceEvent
WoWAPI_FireEvent("ARGZZ", "arg1", 2, arg3)
assert(#args==3)
assert(args[1]=="arg1")
assert(args[2]==2)
assert(args[3]==arg3)
end
-- Test user-supplied args, all styles
do
local addon={}
local n=0
AceEvent:Embed(addon)
-- test self["methodname"]
function addon:HANDLER(userarg, event, a1,a2)
assert(self==addon)
assert(userarg=="userarg")
assert(event=="EVENT")
assert(a1==1 and a2==2, dump(a1,a2))
n=n+1
end
addon:RegisterEvent("EVENT", "HANDLER", "userarg")
WoWAPI_FireEvent("EVENT",1,2)
assert(n==1)
-- test functionref
local function handler(userarg, event, a1,a2)
assert(userarg==nil)
assert(event=="EVENT")
assert(a1==1 and a2==2, dump(a1,a2))
n=n+1
end
addon:RegisterEvent("EVENT", handler, nil) -- look, a nil that should still be passed!
WoWAPI_FireEvent("EVENT",1,2)
assert(n==2)
-- test functionref with self="addonId"
AceEvent.RegisterEvent("myAddon", "EVENT", handler, nil) -- look, a nil that should still be passed!
WoWAPI_FireEvent("EVENT",1,2)
assert(n==4) -- should have fired twice, once for the addon table, once for "myAddon"
addon:UnregisterAllEvents("myAddon") -- unregs BOTH for addon and "myAddon"
WoWAPI_FireEvent("EVENT",1,2)
assert(n==4) -- shouldnt have fired
end
-- Register a methodname on AceEvent itself -- should error
do
local addon={}
local ok,res = pcall(AceEvent.RegisterEvent, AceEvent, "whatever")
assert(not ok and res=="Usage: RegisterEvent(\"eventname\", \"methodname\"): do not use Library:RegisterEvent(), use your own 'self'", dump(ok,res))
end
-- Register a nonexistant methodname -- should error
do
local addon={}
local ok,res = pcall(AceEvent.RegisterEvent, addon, "THISDOESNTEXIST")
assert(not ok and res=="Usage: RegisterEvent(\"eventname\", \"methodname\"): 'methodname' - method 'THISDOESNTEXIST' not found on self.", dump(ok,res))
end
-- Don't give UnregAll an arg -- should error
do
local ok,res = pcall(AceEvent.UnregisterAllEvents)
assert(not ok and res==[[Usage: UnregisterAllEvents([whatFor]): missing 'self' or "addonId" to unregister events for.]], dump(ok,res))
end
-- Attempt to unregister everything on the library itself -- should error
do
local ok,res = pcall(AceEvent.UnregisterAllEvents, AceEvent)
assert(not ok and res==[[Usage: UnregisterAllEvents([whatFor]): supply a meaningful 'self' or "addonId"]], dump(ok,res))
end
-- These should be ok though (note '.' rather than ':' )
AceEvent.UnregisterAllEvents(AceEvent, "BLAH")
AceEvent.UnregisterAllEvents("BLAH")
AceEvent.UnregisterAllEvents("BLAH", AceEvent)
AceEvent.UnregisterAllEvents({})
do -- Tests on messages.
local messageResult
function addon:MESSAGE_TEST(message,...)
end
-- TODO
end
------------------------------------------------
print "OK"