127 lines
3.9 KiB
Lua
127 lines
3.9 KiB
Lua
-- make sure we are pointing to the local copas first
|
|
package.path = string.format("../src/?.lua;%s", package.path)
|
|
|
|
|
|
|
|
local copas = require "copas"
|
|
local gettime = require("socket").gettime
|
|
local timer = copas.timer
|
|
|
|
local successes = 0
|
|
|
|
copas.loop(function()
|
|
|
|
local count_t1 = 0
|
|
local t1 = timer.new({
|
|
delay = 0.5,
|
|
recurring = true,
|
|
params = "hello world",
|
|
callback = function(timer_obj, params)
|
|
-- let's ensure parameters get passed
|
|
assert(params == "hello world", "expected: hello world")
|
|
successes = successes + 1 -- 6 to come
|
|
count_t1 = count_t1 + 1
|
|
print(params .. " " .. count_t1)
|
|
end,
|
|
})
|
|
-- succes count = 6
|
|
|
|
local t2 = timer.new({
|
|
delay = 0.2, -- we'll override this with 0.1 below
|
|
recurring = false,
|
|
params = {
|
|
start_time = gettime()
|
|
},
|
|
initial_delay = 0.1, -- initial delay, only 0.1
|
|
callback = function(timer_obj, params)
|
|
assert(gettime() - params.start_time < 0.11, "didn't honour initial delay, or recurred")
|
|
print("this seems to go well, and should print only once")
|
|
successes = successes + 1 -- 1 to come
|
|
end,
|
|
})
|
|
-- succes count = 7
|
|
|
|
timer.new({
|
|
delay = 3.3, --> allows T1 to run 6 times
|
|
callback = function(timer_obj, params)
|
|
t1:cancel()
|
|
local _, err = t2:cancel()
|
|
assert(err == "not armed", "expected t2 to already be stopped")
|
|
successes = successes + 1 -- 1 to come
|
|
assert(count_t1 == 6, "expected t1 to run 6 times!")
|
|
successes = successes + 1 -- 1 to come
|
|
timer_obj:cancel() -- cancel myself
|
|
end,
|
|
})
|
|
-- succes count = 9
|
|
|
|
timer.new({
|
|
delay = 0.1,
|
|
recurring = true,
|
|
callback = function(timer_obj, params)
|
|
-- re-arm myself (recurring), should not be possible
|
|
local ok, err = timer_obj:arm(1)
|
|
assert(err == "already armed", "expected myself to be already armed")
|
|
assert(ok == nil, "expected 'ok' to be nil")
|
|
print("failed to re-arm a recurring timer, so that's ok")
|
|
successes = successes + 1 -- 1 to come
|
|
assert(timer_obj:cancel()) -- cancel myself
|
|
end,
|
|
})
|
|
-- succes count = 10
|
|
|
|
local touched = false
|
|
timer.new({
|
|
delay = 0.1,
|
|
recurring = false,
|
|
callback = function(timer_obj, params)
|
|
if touched == false then
|
|
-- re-arm myself (non-recurring), should be possible
|
|
local ok, err = timer_obj:arm(3)
|
|
assert(ok == timer_obj)
|
|
assert(err == nil, "expected 'err' to be nil")
|
|
touched = gettime()
|
|
print("re-armed a non-recurring timer, so that's ok")
|
|
successes = successes + 1 -- 1 to come
|
|
else
|
|
print("a re-armed non-recurring timer executed, so that's ok")
|
|
successes = successes + 1 -- 1 to come
|
|
local t = math.abs(gettime() - touched - 3)
|
|
assert(t < 0.01, "expected a 3 second delay for the rearmed timer. Got: "..(gettime() - touched))
|
|
successes = successes + 1 -- 1 to come
|
|
end
|
|
end,
|
|
})
|
|
-- succes count = 13
|
|
|
|
local count = 0
|
|
local params_in = {}
|
|
-- timer shouldn't be cancelled if its handler errors
|
|
timer.new({
|
|
name = "error-test",
|
|
delay = 0.1,
|
|
recurring = true,
|
|
params = params_in,
|
|
errorhandler = function(msg, co, skt)
|
|
local errmsg = copas.gettraceback(msg, co, skt)
|
|
assert(errmsg:find("error%-test"), "the threadname wasn't found")
|
|
assert(errmsg:find("error 1!") or errmsg:find("error 2!"), "the error message wasn't found")
|
|
--print(errmsg)
|
|
successes = successes + 1
|
|
end,
|
|
callback = function(timer_obj, params)
|
|
assert(params == params_in, "Params table wasn't passed along")
|
|
count = count + 1
|
|
if count == 2 then
|
|
-- 2nd call, so we're done
|
|
timer_obj:cancel()
|
|
end
|
|
error("error "..count.."!")
|
|
end,
|
|
})
|
|
-- succes count = 15
|
|
|
|
end)
|
|
|
|
assert(successes == 15, "number of successes didn't match! got: "..successes)
|
|
print("test success!")
|