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