mirror of
https://github.com/imezx/Warp.git
synced 2025-04-24 23:20:02 +00:00
112 lines
No EOL
2.2 KiB
Lua
112 lines
No EOL
2.2 KiB
Lua
--[[
|
|
Represents a tree of test results.
|
|
|
|
Each node in the tree corresponds directly to a node in a corresponding
|
|
TestPlan, accessible via the 'planNode' field.
|
|
|
|
TestResults objects are produced by TestRunner using TestSession as state.
|
|
]]
|
|
|
|
local TestEnum = require(script.Parent.TestEnum)
|
|
|
|
local STATUS_SYMBOLS = {
|
|
[TestEnum.TestStatus.Success] = "+",
|
|
[TestEnum.TestStatus.Failure] = "-",
|
|
[TestEnum.TestStatus.Skipped] = "~"
|
|
}
|
|
|
|
local TestResults = {}
|
|
|
|
TestResults.__index = TestResults
|
|
|
|
--[[
|
|
Create a new TestResults tree that's linked to the given TestPlan.
|
|
]]
|
|
function TestResults.new(plan)
|
|
local self = {
|
|
successCount = 0,
|
|
failureCount = 0,
|
|
skippedCount = 0,
|
|
planNode = plan,
|
|
children = {},
|
|
errors = {}
|
|
}
|
|
|
|
setmetatable(self, TestResults)
|
|
|
|
return self
|
|
end
|
|
|
|
--[[
|
|
Create a new result node that can be inserted into a TestResult tree.
|
|
]]
|
|
function TestResults.createNode(planNode)
|
|
local node = {
|
|
planNode = planNode,
|
|
children = {},
|
|
errors = {},
|
|
status = nil
|
|
}
|
|
|
|
return node
|
|
end
|
|
|
|
--[[
|
|
Visit all test result nodes, depth-first.
|
|
]]
|
|
function TestResults:visitAllNodes(callback, root)
|
|
root = root or self
|
|
|
|
for _, child in ipairs(root.children) do
|
|
callback(child)
|
|
|
|
self:visitAllNodes(callback, child)
|
|
end
|
|
end
|
|
|
|
--[[
|
|
Creates a debug visualization of the test results.
|
|
]]
|
|
function TestResults:visualize(root, level)
|
|
root = root or self
|
|
level = level or 0
|
|
|
|
local buffer = {}
|
|
|
|
for _, child in ipairs(root.children) do
|
|
if child.planNode.type == TestEnum.NodeType.It then
|
|
local symbol = STATUS_SYMBOLS[child.status] or "?"
|
|
local str = ("%s[%s] %s"):format(
|
|
(" "):rep(3 * level),
|
|
symbol,
|
|
child.planNode.phrase
|
|
)
|
|
|
|
if child.messages and #child.messages > 0 then
|
|
str = str .. "\n " .. (" "):rep(3 * level) .. table.concat(child.messages, "\n " .. (" "):rep(3 * level))
|
|
end
|
|
|
|
table.insert(buffer, str)
|
|
else
|
|
local str = ("%s%s"):format(
|
|
(" "):rep(3 * level),
|
|
child.planNode.phrase or ""
|
|
)
|
|
|
|
if child.status then
|
|
str = str .. (" (%s)"):format(child.status)
|
|
end
|
|
|
|
table.insert(buffer, str)
|
|
|
|
if #child.children > 0 then
|
|
local text = self:visualize(child, level + 1)
|
|
table.insert(buffer, text)
|
|
end
|
|
end
|
|
end
|
|
|
|
return table.concat(buffer, "\n")
|
|
end
|
|
|
|
return TestResults |