Performance and reporting improvements
This commit is contained in:
@@ -639,6 +639,99 @@ function TestFlexLove:testGetElementAtPositionOutside()
|
||||
luaunit.assertNil(found)
|
||||
end
|
||||
|
||||
-- Test: deferCallback() queues callback
|
||||
function TestFlexLove:testDeferCallbackQueuesCallback()
|
||||
FlexLove.setMode("retained")
|
||||
|
||||
local called = false
|
||||
FlexLove.deferCallback(function()
|
||||
called = true
|
||||
end)
|
||||
|
||||
-- Callback should not be called immediately
|
||||
luaunit.assertFalse(called)
|
||||
|
||||
-- Callback should be called after executeDeferredCallbacks
|
||||
FlexLove.draw()
|
||||
luaunit.assertFalse(called) -- Still not called
|
||||
|
||||
FlexLove.executeDeferredCallbacks()
|
||||
luaunit.assertTrue(called) -- Now called
|
||||
end
|
||||
|
||||
-- Test: deferCallback() with multiple callbacks
|
||||
function TestFlexLove:testDeferCallbackMultiple()
|
||||
FlexLove.setMode("retained")
|
||||
|
||||
local order = {}
|
||||
FlexLove.deferCallback(function()
|
||||
table.insert(order, 1)
|
||||
end)
|
||||
FlexLove.deferCallback(function()
|
||||
table.insert(order, 2)
|
||||
end)
|
||||
FlexLove.deferCallback(function()
|
||||
table.insert(order, 3)
|
||||
end)
|
||||
|
||||
FlexLove.draw()
|
||||
FlexLove.executeDeferredCallbacks()
|
||||
|
||||
luaunit.assertEquals(#order, 3)
|
||||
luaunit.assertEquals(order[1], 1)
|
||||
luaunit.assertEquals(order[2], 2)
|
||||
luaunit.assertEquals(order[3], 3)
|
||||
end
|
||||
|
||||
-- Test: deferCallback() with non-function argument
|
||||
function TestFlexLove:testDeferCallbackInvalidArgument()
|
||||
FlexLove.setMode("retained")
|
||||
|
||||
-- Should warn but not crash
|
||||
FlexLove.deferCallback("not a function")
|
||||
FlexLove.deferCallback(123)
|
||||
FlexLove.deferCallback(nil)
|
||||
|
||||
FlexLove.draw()
|
||||
luaunit.assertTrue(true)
|
||||
end
|
||||
|
||||
-- Test: deferCallback() clears queue after execution
|
||||
function TestFlexLove:testDeferCallbackClearsQueue()
|
||||
FlexLove.setMode("retained")
|
||||
|
||||
local callCount = 0
|
||||
FlexLove.deferCallback(function()
|
||||
callCount = callCount + 1
|
||||
end)
|
||||
|
||||
FlexLove.draw()
|
||||
FlexLove.executeDeferredCallbacks() -- First execution
|
||||
luaunit.assertEquals(callCount, 1)
|
||||
|
||||
FlexLove.draw()
|
||||
FlexLove.executeDeferredCallbacks() -- Second execution should not call again
|
||||
luaunit.assertEquals(callCount, 1)
|
||||
end
|
||||
|
||||
-- Test: deferCallback() handles callback errors gracefully
|
||||
function TestFlexLove:testDeferCallbackWithError()
|
||||
FlexLove.setMode("retained")
|
||||
|
||||
local called = false
|
||||
FlexLove.deferCallback(function()
|
||||
error("Intentional error")
|
||||
end)
|
||||
FlexLove.deferCallback(function()
|
||||
called = true
|
||||
end)
|
||||
|
||||
-- Should not crash, second callback should still execute
|
||||
FlexLove.draw()
|
||||
FlexLove.executeDeferredCallbacks()
|
||||
luaunit.assertTrue(called)
|
||||
end
|
||||
|
||||
-- Test: External modules are exposed
|
||||
function TestFlexLove:testExternalModulesExposed()
|
||||
luaunit.assertNotNil(FlexLove.Animation)
|
||||
|
||||
Reference in New Issue
Block a user