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.
136 lines
3.8 KiB
136 lines
3.8 KiB
|
|
-- AceTimer test suite 2: Errors
|
|
|
|
|
|
dofile("wow_api.lua")
|
|
dofile("LibStub.lua")
|
|
|
|
local MAJOR = "AceTimer-3.0"
|
|
|
|
dofile("../"..MAJOR.."/"..MAJOR..".lua")
|
|
|
|
local AceTimer,minor = LibStub:GetLibrary(MAJOR)
|
|
|
|
-- NOTE, the below pcalls should NOT contain error position information.
|
|
-- The reason is that if the error level is correctly set, it will point to _inside_ the pcall(), which does not have a position
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
-- Test ScheduleTimer errorchecking of method
|
|
|
|
obj = {}
|
|
|
|
ok,msg = pcall(AceTimer.ScheduleTimer, obj, "method", 4, "arg") -- This should fail - method not defined
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": ScheduleTimer(\"methodName\", delay, arg): 'methodName' - method not found on target object.", msg)
|
|
|
|
|
|
obj.method = "hi, i'm NOT a function, i'm something else"
|
|
|
|
ok,msg = pcall(AceTimer.ScheduleTimer, obj, "method", 4, "arg") -- This should fail - obj["method"] is not a function
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": ScheduleTimer(\"methodName\", delay, arg): 'methodName' - method not found on target object.", msg)
|
|
|
|
|
|
ok,msg = pcall(AceTimer.ScheduleTimer, obj, nil, 4, "arg") -- This should fail (method is nil)
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": ScheduleTimer(callback, delay, arg): 'callback' - function or method name expected.", msg)
|
|
|
|
|
|
ok,msg = pcall(AceTimer.ScheduleTimer, obj, {}, 4, "arg") -- This should fail (method is table)
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": ScheduleTimer(callback, delay, arg): 'callback' - function or method name expected.", msg)
|
|
|
|
|
|
-- (Note: ScheduleRepeatingTimer here just to check naming)
|
|
ok,msg = pcall(AceTimer.ScheduleRepeatingTimer, obj, 123, 4, "arg") -- This should fail too (method is integer)
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": ScheduleRepeatingTimer(callback, delay, arg): 'callback' - function or method name expected.", msg)
|
|
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
-- Check AceTimer:CancelAllTimers() -- not allowed
|
|
|
|
ok,msg = pcall(AceTimer.CancelAllTimers, AceTimer)
|
|
assert(not ok)
|
|
assert(msg == MAJOR..": CancelAllTimers(): supply a meaningful 'self'", dump(msg))
|
|
|
|
|
|
-------------------------------------------------------------------
|
|
-- Scheduling a timer on a member function that later becomes a nonfunction
|
|
|
|
cnt=0
|
|
obj.method = function() cnt=cnt+1 end
|
|
|
|
AceTimer.ScheduleRepeatingTimer(obj, "method", 1, "arg")
|
|
|
|
WoWAPI_FireUpdate(2) -- Border case: at this exact bucket, we should be able to convince the timer to fire twice even though it only gets a single onupdate
|
|
assert(cnt==2, cnt) -- This should have worked nicely
|
|
|
|
errors=0
|
|
function geterrorhandler()
|
|
return function(msg)
|
|
errors=errors+1
|
|
assert(strmatch(msg, "a string value"))
|
|
end
|
|
end
|
|
|
|
obj.method = "this should cause errors"
|
|
WoWAPI_FireUpdate(4)
|
|
|
|
assert(errors==2) -- timer should have run twice
|
|
|
|
|
|
-----------------------------------------------------------------------
|
|
-- :CancelTimer() on something that's already cancelled / never existed
|
|
|
|
local handle = AceTimer.ScheduleTimer(obj, function() assert("this shouldnt run") end, 1)
|
|
|
|
AceTimer.CancelTimer(obj, handle) -- Should work
|
|
|
|
|
|
errors=0
|
|
function geterrorhandler()
|
|
return function(msg)
|
|
errors=errors+1
|
|
assert(strmatch(msg, "already cancelled"))
|
|
end
|
|
end
|
|
|
|
AceTimer.CancelTimer(obj, handle) -- Should error -- already cancelled
|
|
assert(errors==1)
|
|
|
|
|
|
WoWAPI_FireUpdate(6) -- Let the timer disappear from the buckets
|
|
|
|
|
|
errors=0
|
|
function geterrorhandler()
|
|
return function(msg)
|
|
errors=errors+1
|
|
assert(strmatch(msg, "no such timer"))
|
|
end
|
|
end
|
|
|
|
AceTimer.CancelTimer(obj, handle) -- Should error -- doesnt exist at all
|
|
assert(errors==1)
|
|
|
|
|
|
function geterrorhandler()
|
|
return function(msg)
|
|
error("This shouldn't have errored! -- "..msg)
|
|
end
|
|
end
|
|
AceTimer.CancelTimer(obj, handle, true) -- silent: shouldn't error
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
print "OK"
|
|
|