util.promise: Add some missing test cases (found through mutation testing)
authorMatthew Wild <mwild1@gmail.com>
Fri, 07 Oct 2022 17:56:38 +0100
changeset 12755 2639e0e1c378
parent 12754 c882d2460bb1
child 12756 9ef8f248635c
util.promise: Add some missing test cases (found through mutation testing)
spec/util_promise_spec.lua
--- a/spec/util_promise_spec.lua	Fri Oct 07 17:45:23 2022 +0100
+++ b/spec/util_promise_spec.lua	Fri Oct 07 17:56:38 2022 +0100
@@ -7,6 +7,11 @@
 			assert(promise.new());
 		end);
 	end);
+	it("supplies a sensible tostring()", function ()
+		local s = tostring(promise.new());
+		assert.truthy(s:find("promise", 1, true));
+		assert.truthy(s:find("pending", 1, true));
+	end);
 	it("notifies immediately for fulfilled promises", function ()
 		local p = promise.new(function (resolve)
 			resolve("foo");
@@ -459,6 +464,26 @@
 				{ status = "rejected", reason = "this fails" };
 			}, result);
 		end);
+		it("works when all promises reject", function ()
+			local r1, r2;
+			local p1, p2 = promise.new(function (_, reject) r1 = reject end), promise.new(function (_, reject) r2 = reject end);
+			local p = promise.all_settled({ p1, p2 });
+
+			local result;
+			local cb = spy.new(function (v)
+				result = v;
+			end);
+			p:next(cb);
+			assert.spy(cb).was_called(0);
+			r2("this fails");
+			assert.spy(cb).was_called(0);
+			r1("this fails too");
+			assert.spy(cb).was_called(1);
+			assert.same({
+				{ status = "rejected", value = "this fails too" };
+				{ status = "rejected", reason = "this fails" };
+			}, result);
+		end);
 		it("works with non-numeric keys", function ()
 			local r1, r2;
 			local p1, p2 = promise.new(function (resolve) r1 = resolve end), promise.new(function (resolve) r2 = resolve end);