diff options
Diffstat (limited to '3rdparty/luv/tests/test-timer.lua')
-rw-r--r-- | 3rdparty/luv/tests/test-timer.lua | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/3rdparty/luv/tests/test-timer.lua b/3rdparty/luv/tests/test-timer.lua new file mode 100644 index 00000000000..f9eb9d89c5f --- /dev/null +++ b/3rdparty/luv/tests/test-timer.lua @@ -0,0 +1,87 @@ +return require('lib/tap')(function (test) + + -- This tests using timers for a simple timeout. + -- It also tests the handle close callback and + test("simple timeout", function (print, p, expect, uv) + local timer = uv.new_timer() + local function onclose() + p("closed", timer) + end + local function ontimeout() + p("timeout", timer) + uv.close(timer, expect(onclose)) + end + uv.timer_start(timer, 10, 0, expect(ontimeout)) + end) + + -- This is like the previous test, but using repeat. + test("simple interval", function (print, p, expect, uv) + local timer = uv.new_timer() + local count = 3 + local onclose = expect(function () + p("closed", timer) + end) + local function oninterval() + p("interval", timer) + count = count - 1 + if count == 0 then + uv.close(timer, onclose) + end + end + uv.timer_start(timer, 10, 10, oninterval) + end) + + -- Test two concurrent timers + -- There is a small race condition, but there are 100ms of wiggle room. + -- 400ms is halfway between 100+200ms and 100+400ms + test("timeout with interval", function (print, p, expect, uv) + local a = uv.new_timer() + local b = uv.new_timer() + uv.timer_start(a, 400, 0, expect(function () + p("timeout", a) + uv.timer_stop(b) + uv.close(a) + uv.close(b) + end)) + uv.timer_start(b, 100, 200, expect(function () + p("interval", b) + end, 2)) + end) + + -- This advanced test uses the rest of the uv_timer_t functions + -- to create an interval that shrinks over time. + test("shrinking interval", function (print, p, expect, uv) + local timer = uv.new_timer() + uv.timer_start(timer, 10, 0, expect(function () + local r = uv.timer_get_repeat(timer) + p("interval", timer, r) + if r == 0 then + uv.timer_set_repeat(timer, 8) + uv.timer_again(timer) + elseif r == 2 then + uv.timer_stop(timer) + uv.close(timer) + else + uv.timer_set_repeat(timer, r / 2) + end + end, 4)) + end) + + test("shrinking interval using methods", function (print, p, expect, uv) + local timer = uv.new_timer() + timer:start(10, 0, expect(function () + local r = timer:get_repeat() + p("interval", timer, r) + if r == 0 then + timer:set_repeat(8) + timer:again() + elseif r == 2 then + timer:stop() + timer:close() + else + timer:set_repeat(r / 2) + end + end, 4)) + end) + +end) |