spec/util_async_spec.lua
changeset 8617 bfbafeced0c4
parent 8612 9f6ab206d741
child 8618 e77b37de482e
--- 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;