Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
print '1..20'
local src_dir, build_dir = ...
package.path = src_dir .. "?.lua;" .. package.path
package.cpath = build_dir .. "?.so;" .. package.cpath
local tap = require("tap")
local ev = require("ev")
local help = require("help")
local dump = require("dumper").dump
local ok = tap.ok
local noleaks = help.collect_and_assert_no_watchers
local loop = ev.Loop.default
-- Simply see if we can do a simple one second timer:
function test_basic()
local timer1 = ev.Timer.new(
function(loop, timer, revents)
ok(true, 'one second timer')
ok(ev.TIMEOUT == revents, 'ev.TIMEOUT(' .. ev.TIMEOUT .. ') == revents (' .. revents .. ')')
end,
0.01)
timer1:start(loop)
loop:loop()
end
-- Test daemon=true on timer()
function test_daemon_true()
local timer1_count = 0
local timer1 = ev.Timer.new(
function(loop, timer)
timer1_count = timer1_count + 1
ok(timer1_count == 1, 'once and only once')
end, 0.1)
timer1:start(loop)
local timer2_count = 0
local timer2 = ev.Timer.new(
function(loop, timer)
timer2_count = timer2_count + 1
ok(timer2_count == 1, 'once and only once')
end, 0.01)
timer2:start(loop, true)
loop:loop()
local timer3 = ev.Timer.new(
function(loop, timer)
ok(false, 'Should never be called!')
end, 0.01)
timer3:start(loop, true)
loop:loop()
-- TODO: Should we make it so timer3 is automatically stopped if it is never executed in the event loop?
timer3:stop(loop)
end
-- Test again() method
function test_again()
local timer1_count = 0
local timer1 = ev.Timer.new(
function(loop, timer)
timer1_count = timer1_count + 1
if timer1_count == 3 then
timer:stop(loop)
else
timer:again(loop, 0.1)
end
end, 0.1)
timer1:start(loop)
loop:loop()
ok(timer1_count == 3, 'timer1 called thrice')
end
-- Test stop(), start(), and is_active()
function test_start_stop_active()
local timer1_count = 0
local timer1 = ev.Timer.new(
function(loop, timer)
timer1_count = timer1_count + 1
ok(timer1_count == 1, 'once and only once')
end, 0.01)
ok(not timer1:is_active(), 'not active')
timer1:start(loop)
ok(timer1:is_active(), 'active')
timer1:stop(loop)
loop:loop()
timer1:start(loop)
loop:loop()
end
-- Test invoke()
function test_callback()
local timer1_count1 = 0
local timer1 = ev.Timer.new(
function()
timer1_count1 = timer1_count1 + 1
ok(timer1_count1 == 1, 'once and only once A')
end, 0.01)
-- Test calling the callback manually:
timer1:callback()()
local timer1_count2 = 0
-- Test setting the callback:
timer1:callback(
function(loop, timer)
timer1_count2 = timer1_count2 + 1
ok(timer1_count2 == 1, 'once and only once B')
end)
-- Register it and have it get called:
timer1:start(loop)
loop:loop()
end
-- Test is_pending()
function test_is_pending()
local num_pending = 0
local num_called = 0
local timer2
local timer1 = ev.Timer.new(
function(loop, timer)
if ( timer2:is_pending() ) then
num_pending = num_pending + 1
end
num_called = num_called + 1
end, 0.01)
timer1:start(loop)
timer2 = ev.Timer.new(
function(loop, timer)
if ( timer1:is_pending() ) then
num_pending = num_pending + 1
end
num_called = num_called + 1
end, 0.01)
timer2:start(loop)
loop:loop()
ok(num_pending == 1, 'exactly one timer was pending')
ok(num_called == 2, 'both timers got called')
end
-- Test clear_pending()
function test_clear_pending()
local num_called = 0
local timer2
local timer1 = ev.Timer.new(
function(loop, timer)
if ( timer2:is_pending() ) then
timer2:clear_pending(loop)
end
num_called = num_called + 1
end, 0.01)
timer1:start(loop)
timer2 = ev.Timer.new(
function(loop, timer)
if ( timer1:is_pending() ) then
timer1:clear_pending(loop)
end
num_called = num_called + 1
end, 0.01)
timer2:start(loop)
loop:loop()
ok(num_called == 1, 'exactly one timer was called')
end
noleaks(test_basic, "test_basic")
noleaks(test_daemon_true, "test_daemon_true")
noleaks(test_again, "test_again")
noleaks(test_start_stop_active, "test_start_stop_active")
noleaks(test_callback, "test_callback")
noleaks(test_is_pending, "test_is_pending")
noleaks(test_clear_pending, "test_clear_pending")
--print(dump("registry", debug.getregistry()[1]));
-- test_is_pending()
-- noleaks("test_is_pending")
-- test_clear_pending()
-- noleaks("test_clear_pending")