# HG changeset patch # User Matthew Wild # Date 1665161798 -3600 # Node ID 2639e0e1c3785660bb737aea52552484e4d1777c # Parent c882d2460bb13c31ba198042979789721d0b3b97 util.promise: Add some missing test cases (found through mutation testing) diff -r c882d2460bb1 -r 2639e0e1c378 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);