197 lines
4.9 KiB
Lua
197 lines
4.9 KiB
Lua
return function()
|
|
local BacktraceReport = require(script.Parent.BacktraceReport)
|
|
local CorePackages = game:GetService("CorePackages")
|
|
|
|
local tutils = require(CorePackages.Packages.tutils)
|
|
|
|
describe(".new", function()
|
|
it("should return a valid report", function()
|
|
local report = BacktraceReport.new()
|
|
local isValid = report:validate()
|
|
|
|
expect(isValid).to.equal(true)
|
|
end)
|
|
end)
|
|
|
|
describe(":validate", function()
|
|
it("should return false if the report has registers but no arch information, true otherwise", function()
|
|
local report = BacktraceReport.new()
|
|
|
|
report.threads = {
|
|
default = {
|
|
stack = {
|
|
[1] = {
|
|
registers = {
|
|
rax = "16045690984833335023",
|
|
},
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
expect(report:validate()).to.equal(false)
|
|
|
|
-- invalid arch
|
|
report.arch = {
|
|
name = "x64",
|
|
regsiters = nil,
|
|
}
|
|
|
|
expect(report:validate()).to.equal(false)
|
|
|
|
-- correct arch
|
|
report.arch = {
|
|
name = "x64",
|
|
registers = {
|
|
rax = "u64",
|
|
},
|
|
}
|
|
|
|
expect(report:validate()).to.equal(true)
|
|
end)
|
|
end)
|
|
|
|
describe("IAnnotations", function()
|
|
local IAnnotations = BacktraceReport.IAnnotations
|
|
|
|
it("should return false if not a table", function()
|
|
local result = IAnnotations("string")
|
|
expect(result).to.equal(false)
|
|
end)
|
|
|
|
it("should return false if a non-table value is not string, number, or boolean", function()
|
|
local result = IAnnotations({
|
|
Value = function() end,
|
|
})
|
|
expect(result).to.equal(false)
|
|
|
|
result = IAnnotations({
|
|
Value = "ha",
|
|
Value2 = 1,
|
|
Value3 = false,
|
|
Recursive = {
|
|
Value11 = "haha",
|
|
MoreRecursive = {
|
|
Value12 = "hahaha",
|
|
Value22 = function() end,
|
|
},
|
|
},
|
|
})
|
|
expect(result).to.equal(false)
|
|
end)
|
|
|
|
it("should return true for an empty table", function()
|
|
expect(IAnnotations({})).to.equal(true)
|
|
end)
|
|
|
|
it("should return true if a non-table value is either string, number, or boolean", function()
|
|
local result = IAnnotations({
|
|
Value = "ha",
|
|
Value2 = 1,
|
|
Value3 = false,
|
|
Recursive = {
|
|
Value11 = "haha",
|
|
Value21 = 2,
|
|
Array = {
|
|
[1] = "hahaha",
|
|
[2] = 3,
|
|
[3] = true,
|
|
},
|
|
},
|
|
})
|
|
expect(result).to.equal(true)
|
|
end)
|
|
end)
|
|
|
|
describe(":addAttributes", function()
|
|
it("should correctly add attributes", function()
|
|
local report = BacktraceReport.new()
|
|
report:addAttributes({
|
|
att1 = 1,
|
|
})
|
|
expect(tutils.fieldCount(report.attributes)).to.equal(1)
|
|
expect(report.attributes.att1).to.equal(1)
|
|
report:addAttributes({
|
|
att1 = 2,
|
|
att2 = false,
|
|
att3 = "test",
|
|
})
|
|
expect(tutils.fieldCount(report.attributes)).to.equal(3)
|
|
expect(report.attributes.att1).to.equal(2)
|
|
expect(report.attributes.att2).to.equal(false)
|
|
expect(report.attributes.att3).to.equal("test")
|
|
end)
|
|
end)
|
|
|
|
describe(":addAnnotations", function()
|
|
it("should correctly add annotations", function()
|
|
local environmentVariables = {
|
|
ENV_VAR_EXAMPLE = "example",
|
|
}
|
|
local dependencies = {
|
|
Roact = {
|
|
version = "0.2.0",
|
|
},
|
|
Otter = {
|
|
version = "0.1.0",
|
|
},
|
|
}
|
|
|
|
local report = BacktraceReport.new()
|
|
|
|
report:addAnnotations({
|
|
EnvironmentVariables = environmentVariables,
|
|
})
|
|
expect(tutils.fieldCount(report.annotations)).to.equal(1)
|
|
expect(tutils.deepEqual(report.annotations.EnvironmentVariables, environmentVariables)).to.equal(true)
|
|
|
|
report:addAnnotations({
|
|
SomeProperty = true,
|
|
Dependencies = dependencies,
|
|
})
|
|
expect(tutils.fieldCount(report.annotations)).to.equal(3)
|
|
expect(tutils.deepEqual(report.annotations.EnvironmentVariables, environmentVariables)).to.equal(true)
|
|
expect(report.annotations.SomeProperty).to.equal(true)
|
|
expect(tutils.deepEqual(report.annotations.Dependencies, dependencies)).to.equal(true)
|
|
end)
|
|
end)
|
|
|
|
describe(":addStackToThread", function()
|
|
it("should correctly add stack to the thread with the name provided", function()
|
|
local stack1 = {
|
|
[1] = {
|
|
line = "100",
|
|
funcName = "field testError",
|
|
sourceCode = "1",
|
|
}
|
|
}
|
|
local stack2 = {
|
|
[1] = {
|
|
line = "110",
|
|
funcName = "field ?",
|
|
sourceCode = "2",
|
|
}
|
|
}
|
|
|
|
local report = BacktraceReport.new()
|
|
|
|
report:addStackToThread(stack1, "main")
|
|
expect(tutils.fieldCount(report.threads)).to.equal(1)
|
|
expect(tutils.deepEqual(report.threads.main.stack, stack1)).to.equal(true)
|
|
|
|
report:addStackToThread(stack2, "1")
|
|
expect(tutils.fieldCount(report.threads)).to.equal(2)
|
|
expect(tutils.deepEqual(report.threads.main.stack, stack1)).to.equal(true)
|
|
expect(tutils.deepEqual(report.threads["1"].stack, stack2)).to.equal(true)
|
|
end)
|
|
end)
|
|
|
|
describe(".fromMessageAndStack", function()
|
|
it("should return a valid report", function()
|
|
local report = BacktraceReport.fromMessageAndStack("index nil", "Script 'Workspace.Script', Line 3")
|
|
local isValid = report:validate()
|
|
|
|
expect(isValid).to.equal(true)
|
|
end)
|
|
end)
|
|
end |