Software /
code /
prosody
Changeset
8614:bfbafeced0c4
util.async: Yet more tests
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 17 Mar 2018 11:47:07 +0000 |
parents | 8613:dbb4788db8e3 |
children | 8615:e77b37de482e |
files | spec/util_async_spec.lua |
diffstat | 1 files changed, 52 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/util_async_spec.lua Sat Mar 17 11:46:21 2018 +0000 +++ b/spec/util_async_spec.lua Sat Mar 17 11:47:07 2018 +0000 @@ -32,6 +32,58 @@ assert.equal(r.state, "ready"); end); + it("should do nothing if the queue is empty", function () + local did_run; + local r = async.runner(function (item) did_run = true end); + r:run(); + assert.equal(r.state, "ready"); + assert.is_nil(did_run); + r:run("hello"); + assert.is_true(did_run); + end); + + it("should support queuing work items without running", function () + local did_run; + local r = async.runner(function (item) did_run = true end); + r:enqueue("hello"); + assert.equal(r.state, "ready"); + assert.is_nil(did_run); + r:run(); + assert.is_true(did_run); + end); + + it("should support queuing multiple work items", function () + local last_item; + local s = spy(function (item) last_item = item; end); + local r = async.runner(s); + r:enqueue("hello"); + r:enqueue("there"); + r:enqueue("world"); + assert.equal(r.state, "ready"); + r:run(); + assert.equal(r.state, "ready"); + assert.spy(s).was.called(3); + assert.equal(last_item, "world"); + end); + + it("should support all simple data types", function () + local last_item; + local s = spy(function (item) last_item = item; end); + local r = async.runner(s); + local values = { {}, 123, "hello", true, false }; + for i = 1, #values do + r:enqueue(values[i]); + end + assert.equal(r.state, "ready"); + r:run(); + assert.equal(r.state, "ready"); + assert.spy(s).was.called(#values); + for i = 1, #values do + assert.spy(s).was.called_with(values[i]); + end + assert.equal(last_item, values[#values]); + end); + describe("#errors", function () local last_processed_item, last_error; local r;