# HG changeset patch # User Matthew Wild # Date 1521287227 0 # Node ID bfbafeced0c47edf75a6508f298aa039a914d504 # Parent dbb4788db8e35fd2bc5f8c71b39a3bbe2ba0ad41 util.async: Yet more tests diff -r dbb4788db8e3 -r bfbafeced0c4 spec/util_async_spec.lua --- 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;