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;