189 lines
5.3 KiB
Lua
189 lines
5.3 KiB
Lua
return function()
|
|
local CorePackages = game:GetService("CorePackages")
|
|
local PromiseUtilities = require(CorePackages.AppTempCommon.LuaApp.PromiseUtilities)
|
|
local Promise = require(CorePackages.AppTempCommon.LuaApp.Promise)
|
|
local Result = require(CorePackages.AppTempCommon.LuaApp.Result)
|
|
local TableUtilities = require(CorePackages.AppTempCommon.LuaApp.TableUtilities)
|
|
|
|
describe("PromiseUtilities.Batch", function()
|
|
it("should assert if input is not a list of Promises", function()
|
|
expect(function()
|
|
PromiseUtilities.Batch()
|
|
end).to.throw()
|
|
|
|
expect(function()
|
|
PromiseUtilities.Batch(Promise.resolve(), Promise.resolve())
|
|
end).to.throw()
|
|
|
|
expect(function()
|
|
PromiseUtilities.Batch({
|
|
Promise.resolve(),
|
|
"something else"
|
|
})
|
|
end).to.throw()
|
|
end)
|
|
|
|
it("should invoke the given resolve callback when all promises are finished", function()
|
|
local promises = {
|
|
[1] = Promise.resolve(),
|
|
["Home"] = Promise.resolve()
|
|
}
|
|
local callCount = 0
|
|
|
|
local batchedPromise = PromiseUtilities.Batch(promises):andThen(
|
|
function()
|
|
callCount = callCount + 1
|
|
end
|
|
)
|
|
|
|
expect(batchedPromise).to.be.ok()
|
|
expect(callCount).to.equal(1)
|
|
expect(batchedPromise._status).to.equal(Promise.Status.Resolved)
|
|
end)
|
|
|
|
it("should not invoke any callbacks when one of the promises are not finished", function()
|
|
local promises = {
|
|
[1] = Promise.resolve(),
|
|
["Home"] = Promise.new(function() end)
|
|
}
|
|
local callCount = 0
|
|
|
|
local batchedPromise = PromiseUtilities.Batch(promises):andThen(
|
|
function()
|
|
callCount = callCount + 1
|
|
end,
|
|
|
|
function()
|
|
callCount = callCount + 1
|
|
end
|
|
)
|
|
|
|
expect(batchedPromise).to.be.ok()
|
|
expect(callCount).to.equal(0)
|
|
expect(batchedPromise._status).to.equal(Promise.Status.Started)
|
|
end)
|
|
|
|
it("should return the correct results of each individual promise", function()
|
|
local promises = {
|
|
[1] = Promise.resolve(5),
|
|
["Home"] = Promise.reject("failed")
|
|
}
|
|
local promiseResults = nil
|
|
|
|
local batchedPromise = PromiseUtilities.Batch(promises):andThen(
|
|
function(results)
|
|
promiseResults = results
|
|
end
|
|
)
|
|
|
|
expect(batchedPromise).to.be.ok()
|
|
expect(batchedPromise._status).to.equal(Promise.Status.Resolved)
|
|
expect(TableUtilities.FieldCount(promiseResults)).to.equal(2)
|
|
|
|
expect(Result.is(promiseResults[1])).to.equal(true)
|
|
local success1, value1 = promiseResults[1]:unwrap()
|
|
expect(success1).to.equal(true)
|
|
expect(value1).to.equal(5)
|
|
local isMatchCalled1 = false
|
|
promiseResults[1]:match(function(result)
|
|
expect(result).to.equal(5)
|
|
isMatchCalled1 = true
|
|
end,
|
|
function()
|
|
error("should not be called")
|
|
end)
|
|
expect(isMatchCalled1).to.equal(true)
|
|
|
|
|
|
expect(Result.is(promiseResults["Home"])).to.equal(true)
|
|
local success2, value2 = promiseResults["Home"]:unwrap()
|
|
expect(success2).to.equal(false)
|
|
expect(value2).to.equal("failed")
|
|
local isMatchCalled2 = false
|
|
promiseResults["Home"]:match(function()
|
|
error("should not be called")
|
|
end,
|
|
function(err)
|
|
expect(err).to.equal("failed")
|
|
isMatchCalled2 = true
|
|
end)
|
|
expect(isMatchCalled2).to.equal(true)
|
|
end)
|
|
|
|
it("should return the correct results of each individual promise that resolved later", function()
|
|
local resolveLater
|
|
local rejectLater
|
|
|
|
local promises = {
|
|
[1] = Promise.new(function(resolve)
|
|
resolveLater = resolve
|
|
end),
|
|
["Home"] = Promise.new(function(_, reject)
|
|
rejectLater = reject
|
|
end)
|
|
}
|
|
local promiseResults = nil
|
|
|
|
local batchedPromise = PromiseUtilities.Batch(promises):andThen(
|
|
function(results)
|
|
promiseResults = results
|
|
end
|
|
)
|
|
|
|
resolveLater(5)
|
|
rejectLater("failed")
|
|
|
|
expect(batchedPromise).to.be.ok()
|
|
expect(batchedPromise._status).to.equal(Promise.Status.Resolved)
|
|
expect(TableUtilities.FieldCount(promiseResults)).to.equal(2)
|
|
|
|
expect(Result.is(promiseResults[1])).to.equal(true)
|
|
local success1, value1 = promiseResults[1]:unwrap()
|
|
expect(success1).to.equal(true)
|
|
expect(value1).to.equal(5)
|
|
|
|
expect(Result.is(promiseResults["Home"])).to.equal(true)
|
|
local success2, value2 = promiseResults["Home"]:unwrap()
|
|
expect(success2).to.equal(false)
|
|
expect(value2).to.equal("failed")
|
|
end)
|
|
|
|
it("should resolve if given an empty list of promises", function()
|
|
local emptyPromises = {}
|
|
local callCount = 0
|
|
|
|
local batchedPromise = PromiseUtilities.Batch(emptyPromises):andThen(
|
|
function(results)
|
|
callCount = callCount + 1
|
|
end
|
|
)
|
|
|
|
expect(batchedPromise).to.be.ok()
|
|
expect(callCount).to.equal(1)
|
|
expect(batchedPromise._status).to.equal(Promise.Status.Resolved)
|
|
end)
|
|
end)
|
|
|
|
describe("PromiseUtilities.CountResults", function()
|
|
it("should count the results correctly", function()
|
|
local emptyResults = {}
|
|
|
|
local countResult = PromiseUtilities.CountResults(emptyResults)
|
|
|
|
expect(countResult).to.be.ok()
|
|
expect(countResult.successCount).to.equal(0)
|
|
expect(countResult.failureCount).to.equal(0)
|
|
expect(countResult.totalCount).to.equal(0)
|
|
|
|
local promiseResults = { Result.success(0), Result.success(0), Result.error(1) }
|
|
|
|
countResult = PromiseUtilities.CountResults(promiseResults)
|
|
|
|
expect(countResult).to.be.ok()
|
|
expect(countResult.successCount).to.equal(2)
|
|
expect(countResult.failureCount).to.equal(1)
|
|
expect(countResult.totalCount).to.equal(3)
|
|
end)
|
|
end)
|
|
end
|