Add TestRunner for running asynchronous tests with update support Add test for Task.wait to verify concurrent task completion Add set method to Counter for explicit value assignment
47 lines
1.3 KiB
Lua
47 lines
1.3 KiB
Lua
--- @class Test
|
|
local test = {}
|
|
function test:run(complete) end
|
|
|
|
function test:update(dt) end
|
|
|
|
--- @class TestRunner
|
|
--- @field private tests Test[]
|
|
--- @field private state "loading" | "running" | "completed"
|
|
--- @field private completedCount integer
|
|
local runner = {}
|
|
runner.tests = {}
|
|
runner.state = "loading"
|
|
runner.completedCount = 0
|
|
|
|
--- глобальный update для тестов, нужен для тестирования фич, зависимых от времени
|
|
function runner:update(dt)
|
|
if self.state == "loading" then
|
|
print("[TestRunner]: running " .. #self.tests .. " tests")
|
|
|
|
for _, t in ipairs(self.tests) do
|
|
t:run(
|
|
function()
|
|
self.completedCount = self.completedCount + 1
|
|
if self.completedCount == #self.tests then
|
|
self.state = "completed"
|
|
print("[TestRunner]: tests completed")
|
|
end
|
|
end
|
|
)
|
|
end
|
|
self.state = "running"
|
|
end
|
|
|
|
for _, t in ipairs(self.tests) do
|
|
if t.update then t:update(dt) end
|
|
end
|
|
end
|
|
|
|
--- добавляет тест для прохождения
|
|
--- @param t Test
|
|
function runner:register(t)
|
|
table.insert(self.tests, t)
|
|
end
|
|
|
|
return runner
|