Clients/Client2020/ExtraContent/LuaPackages/ErrorReporters/Backtrace/ProcessErrorStack.spec.lua

203 lines
5.5 KiB
Lua

return function()
local ProcessErrorStack = require(script.Parent.ProcessErrorStack)
local CorePackages = game:GetService("CorePackages")
local tutils = require(CorePackages.Packages.tutils)
local testCasesNormal = {
ScriptContextError = {
error = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame, line 98 - field testError\nCoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame, line 111 - field ?\nCorePackages.Packages._Index.roact.roact.SingleEventManager, line 83",
expectedOutput = {
stack = {
[1] = {
line = "98",
funcName = "field testError",
sourceCode = "1",
},
[2] = {
line = "111",
funcName = "field ?",
sourceCode = "1",
},
[3] = {
line = "83",
funcName = "SingleEventManager",
sourceCode = "2",
},
},
sourceCodeOutput = {
["1"] = {
path = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame",
},
["2"] = {
path = "CorePackages.Packages._Index.roact.roact.SingleEventManager",
},
},
},
},
ScriptContextErrorLuau = {
error = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame, line 98\nCoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame, line 111\nCorePackages.Packages._Index.roact.roact.SingleEventManager, line 83",
expectedOutput = {
stack = {
[1] = {
line = "98",
funcName = "HomePageWithAvatarViewportFrame",
sourceCode = "1",
},
[2] = {
line = "111",
funcName = "HomePageWithAvatarViewportFrame",
sourceCode = "1",
},
[3] = {
line = "83",
funcName = "SingleEventManager",
sourceCode = "2",
},
},
sourceCodeOutput = {
["1"] = {
path = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame",
},
["2"] = {
path = "CorePackages.Packages._Index.roact.roact.SingleEventManager",
},
},
},
},
DebugTraceback = {
error = "Stack Begin\nScript 'CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame', Line 100 - field testError\nScript 'CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame', Line 111 - field ?\nScript 'CorePackages.Packages._Index.roact.roact.SingleEventManager', Line 83\nStack End",
expectedOutput = {
stack = {
[1] = {
line = "100",
funcName = "field testError",
sourceCode = "1",
},
[2] = {
line = "111",
funcName = "field ?",
sourceCode = "1",
},
[3] = {
line = "83",
funcName = "SingleEventManager",
sourceCode = "2",
},
},
sourceCodeOutput = {
["1"] = {
path = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame",
},
["2"] = {
path = "CorePackages.Packages._Index.roact.roact.SingleEventManager",
},
},
},
},
DebugTracebackLuau = {
error = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame:100\nCoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame:111\nCorePackages.Packages._Index.roact.roact.SingleEventManager:83",
expectedOutput = {
stack = {
[1] = {
line = "100",
funcName = "HomePageWithAvatarViewportFrame",
sourceCode = "1",
},
[2] = {
line = "111",
funcName = "HomePageWithAvatarViewportFrame",
sourceCode = "1",
},
[3] = {
line = "83",
funcName = "SingleEventManager",
sourceCode = "2",
},
},
sourceCodeOutput = {
["1"] = {
path = "CoreGui.RobloxGui.Modules.LuaApp.Components.Home.HomePageWithAvatarViewportFrame",
},
["2"] = {
path = "CorePackages.Packages._Index.roact.roact.SingleEventManager",
},
},
},
},
OneLineError = {
error = "Script 'Workspace.Script', Line 3",
expectedOutput = {
stack = {
[1] = {
line = "3",
funcName = "Script",
sourceCode = "1",
},
},
sourceCodeOutput = {
["1"] = {
path = "Workspace.Script",
},
},
},
},
PathWithNumbers = {
error = "Script 'Workspace1.Script2', Line 3",
expectedOutput = {
stack = {
[1] = {
line = "3",
funcName = "Script2",
sourceCode = "1",
},
},
sourceCodeOutput = {
["1"] = {
path = "Workspace1.Script2",
},
},
},
},
}
it("should convert the error strings to the correct format", function()
for key, testCase in pairs(testCasesNormal) do
local stack, sourceCodeOutput = ProcessErrorStack(testCase.error)
expect(tutils.deepEqual(testCase.expectedOutput, {
stack = stack,
sourceCodeOutput = sourceCodeOutput,
}, true)).to.equal(true)
end
end)
local testCasesOther = {
{},
123,
function() error("test") end,
"",
" - ",
", line ",
", line - ",
":",
" - , line ",
}
it("should return empty results with inputs that are not valid stack trace", function()
for _, testCase in ipairs(testCasesOther) do
local stack, sourceCodeOutput = ProcessErrorStack(testCase)
expect(tutils.shallowEqual(stack, {})).to.equal(true)
expect(tutils.shallowEqual(sourceCodeOutput, {})).to.equal(true)
end
end)
it("should return empty results with nil input", function()
local stack, sourceCodeOutput = ProcessErrorStack(nil)
expect(tutils.shallowEqual(stack, {})).to.equal(true)
expect(tutils.shallowEqual(sourceCodeOutput, {})).to.equal(true)
end)
end