Performance and reporting improvements
This commit is contained in:
156
testing/__tests__/performance_warnings_test.lua
Normal file
156
testing/__tests__/performance_warnings_test.lua
Normal file
@@ -0,0 +1,156 @@
|
||||
local luaunit = require("testing.luaunit")
|
||||
require("testing.loveStub")
|
||||
|
||||
local FlexLove = require("FlexLove")
|
||||
local Performance = require("modules.Performance")
|
||||
local Element = FlexLove.Element
|
||||
|
||||
TestPerformanceWarnings = {}
|
||||
|
||||
function TestPerformanceWarnings:setUp()
|
||||
-- Enable performance warnings
|
||||
Performance.setConfig("warningsEnabled", true)
|
||||
Performance.resetShownWarnings()
|
||||
end
|
||||
|
||||
function TestPerformanceWarnings:tearDown()
|
||||
-- Reset warnings
|
||||
Performance.resetShownWarnings()
|
||||
end
|
||||
|
||||
-- Test hierarchy depth warning
|
||||
function TestPerformanceWarnings:testHierarchyDepthWarning()
|
||||
-- Create a deep hierarchy (20 levels)
|
||||
local root = Element.new({
|
||||
id = "root",
|
||||
width = 100,
|
||||
height = 100,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
local current = root
|
||||
for i = 1, 20 do
|
||||
local child = Element.new({
|
||||
id = "child_" .. i,
|
||||
width = 50,
|
||||
height = 50,
|
||||
parent = current,
|
||||
}, Element.defaultDependencies)
|
||||
table.insert(current.children, child)
|
||||
current = child
|
||||
end
|
||||
|
||||
-- This should trigger a hierarchy depth warning
|
||||
root:layoutChildren()
|
||||
|
||||
-- Check that element was created successfully despite warning
|
||||
luaunit.assertNotNil(current)
|
||||
luaunit.assertEquals(current:getHierarchyDepth(), 20)
|
||||
end
|
||||
|
||||
-- Test element count warning
|
||||
function TestPerformanceWarnings:testElementCountWarning()
|
||||
-- Create a container with many children (simulating 1000+ elements)
|
||||
local root = Element.new({
|
||||
id = "root",
|
||||
width = 1000,
|
||||
height = 1000,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
-- Add many child elements
|
||||
for i = 1, 50 do -- Keep test fast, just verify the counting logic works
|
||||
local child = Element.new({
|
||||
id = "child_" .. i,
|
||||
width = 20,
|
||||
height = 20,
|
||||
parent = root,
|
||||
}, Element.defaultDependencies)
|
||||
table.insert(root.children, child)
|
||||
end
|
||||
|
||||
local count = root:countElements()
|
||||
luaunit.assertEquals(count, 51) -- root + 50 children
|
||||
end
|
||||
|
||||
-- Test animation count warning
|
||||
function TestPerformanceWarnings:testAnimationTracking()
|
||||
local root = Element.new({
|
||||
id = "root",
|
||||
width = 100,
|
||||
height = 100,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
-- Add some animated children
|
||||
for i = 1, 3 do
|
||||
local child = Element.new({
|
||||
id = "animated_child_" .. i,
|
||||
width = 20,
|
||||
height = 20,
|
||||
parent = root,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
-- Add mock animation
|
||||
child.animation = {
|
||||
update = function()
|
||||
return false
|
||||
end,
|
||||
interpolate = function()
|
||||
return { width = 20, height = 20 }
|
||||
end,
|
||||
}
|
||||
|
||||
table.insert(root.children, child)
|
||||
end
|
||||
|
||||
local animCount = root:_countActiveAnimations()
|
||||
luaunit.assertEquals(animCount, 3)
|
||||
end
|
||||
|
||||
-- Test warnings can be disabled
|
||||
function TestPerformanceWarnings:testWarningsCanBeDisabled()
|
||||
Performance.setConfig("warningsEnabled", false)
|
||||
|
||||
-- Create deep hierarchy
|
||||
local root = Element.new({
|
||||
id = "root",
|
||||
width = 100,
|
||||
height = 100,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
local current = root
|
||||
for i = 1, 20 do
|
||||
local child = Element.new({
|
||||
id = "child_" .. i,
|
||||
width = 50,
|
||||
height = 50,
|
||||
parent = current,
|
||||
}, Element.defaultDependencies)
|
||||
table.insert(current.children, child)
|
||||
current = child
|
||||
end
|
||||
|
||||
-- Should not trigger warning (but should still create elements)
|
||||
root:layoutChildren()
|
||||
luaunit.assertEquals(current:getHierarchyDepth(), 20)
|
||||
|
||||
-- Re-enable for other tests
|
||||
Performance.setConfig("warningsEnabled", true)
|
||||
end
|
||||
|
||||
-- Test layout recalculation tracking
|
||||
function TestPerformanceWarnings:testLayoutRecalculationTracking()
|
||||
local root = Element.new({
|
||||
id = "root",
|
||||
width = 100,
|
||||
height = 100,
|
||||
}, Element.defaultDependencies)
|
||||
|
||||
-- Layout multiple times (simulating layout thrashing)
|
||||
for i = 1, 5 do
|
||||
root:layoutChildren()
|
||||
end
|
||||
|
||||
-- Should complete without crashing
|
||||
luaunit.assertNotNil(root)
|
||||
end
|
||||
|
||||
return TestPerformanceWarnings
|
||||
Reference in New Issue
Block a user