Software /
code /
prosody
Changeset
8209:39f24de4f53f
tests: Add failing tests for util.async
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 12 Sep 2017 16:16:28 +0100 |
parents | 8208:b69b40a828fd |
children | 8210:352d605b1178 |
files | tests/test_util_async.lua |
diffstat | 1 files changed, 160 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/test_util_async.lua Mon Sep 04 10:08:04 2017 +0200 +++ b/tests/test_util_async.lua Tue Sep 12 16:16:28 2017 +0100 @@ -6,12 +6,12 @@ -- Multiple runners function runner(new_runner, async) - local function new(func) + local function new(func, name) local log = {}; return new_runner(func, setmetatable({}, { __index = function (_, event) return function (runner, err) - print("event", event, err) + print(name, "event", event, err) table.insert(log, { event = event, err = err }); end; end; @@ -22,7 +22,7 @@ local r, l = new(function (item) assert(type(item) == "number") end); r:run(1); r:run(2); - for k, v in ipairs(l) do print(k,v) end + --for k, v in ipairs(l) do print(k,v) end -------------------- local wait, done; @@ -43,7 +43,7 @@ assert(r.state == "waiting"); done(); assert(r.state == "ready"); - for k, v in ipairs(l) do print(k,v) end + --for k, v in ipairs(l) do print(k,v) end -------------------- local wait, done; @@ -68,7 +68,7 @@ assert(r.state == "waiting"); done(); assert(r.state == "ready"); - for k, v in ipairs(l) do print(k,v) end + --for k, v in ipairs(l) do print(k,v) end -------------------- local wait, done; @@ -106,7 +106,7 @@ end assert(r.state == "ready"); - for k, v in ipairs(l) do print(k,v) end + --for k, v in ipairs(l) do print(k,v) end -------------------- local wait, done; @@ -144,5 +144,158 @@ assert(r.state == "ready"); assert(r.state == "ready"); - for k, v in ipairs(l) do print(k,v) end + --for k, v in ipairs(l) do print(k,v) end + + -- Now with multiple runners + -------------------- + local wait1, done1; + local last_item1 = 0; + local r1, l1 = new(function (item) + assert(type(item) == "number") + assert((item == last_item1 + 1) or item == 3); + last_item1 = item; + if item == 3 then + wait1, done1 = async.waiter(); + wait1(); + end + end, "r1"); + + local wait2, done2; + local last_item2 = 0; + local r2, l2 = new(function (item) + assert(type(item) == "number") + assert((item == last_item2 + 1) or item == 3); + last_item2 = item; + if item == 3 then + wait2, done2 = async.waiter(); + wait2(); + end + end, "r2"); + + r1:run(1); + assert(r1.state == "ready"); + r1:run(2); + assert(r1.state == "ready"); + + local dones = {}; + r1:run(3); + assert(r1.state == "waiting"); + r1:run(3); + assert(r1.state == "waiting"); + + r2:run(1); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + r2:run(2); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + r2:run(3); + assert(r1.state == "waiting"); + assert(r2.state == "waiting"); + done2(); + + r2:run(3); + assert(r1.state == "waiting"); + assert(r2.state == "waiting"); + done2(); + + r2:run(2); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + for i = 1, 2 do + done1(); + if i < 2 then + assert(r1.state == "waiting"); + end + end + + assert(r1.state == "ready"); + r1:run(4); + assert(r1.state == "ready"); + + assert(r1.state == "ready"); + --for k, v in ipairs(l1) do print(k,v) end + + + -------------------- + local wait1, done1; + local last_item1 = 0; + local r1, l1 = new(function (item) + assert(type(item) == "number") + assert((item == last_item1 + 1) or item == 3); + last_item1 = item; + if item == 3 then + wait1, done1 = async.waiter(); + wait1(); + end + end, "r1"); + + local wait2, done2; + local last_item2 = 0; + local r2, l2 = new(function (item) + assert(type(item) == "number") + assert((item == last_item2 + 1) or item == 3); + last_item2 = item; + if item == 3 then + wait2, done2 = async.waiter(); + wait2(); + end + end, "r2"); + + r1:run(1); + assert(r1.state == "ready"); + r1:run(2); + assert(r1.state == "ready"); + + r1:run(5); + assert(r1.state == "ready"); + + local dones = {}; + r1:run(3); + assert(r1.state == "waiting"); + r1:run(5); -- Will error, when we get to it + assert(r1.state == "waiting"); + r1:run(3); + assert(r1.state == "waiting"); + + r2:run(1); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + r2:run(2); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + r2:run(3); + assert(r1.state == "waiting"); + assert(r2.state == "waiting"); + done2(); + + r2:run(3); + assert(r1.state == "waiting"); + assert(r2.state == "waiting"); + done2(); + + r2:run(2); + assert(r1.state == "waiting"); + assert(r2.state == "ready"); + + for i = 1, 2 do + done1(); + if i < 2 then + assert_equal(r1.state, "waiting"); + end + end + + assert(r1.state == "ready"); + r1:run(4); + assert(r1.state == "ready"); + + assert(r1.state == "ready"); + --for k, v in ipairs(l1) do print(k,v) end + + end