171 lines
4.5 KiB
Lua
171 lines
4.5 KiB
Lua
package.path = package.path .. ";./?.lua;./modules/?.lua"
|
|
local originalSearchers = package.searchers or package.loaders
|
|
table.insert(originalSearchers, 2, function(modname)
|
|
if modname:match("^FlexLove%.modules%.") then
|
|
local moduleName = modname:gsub("^FlexLove%.modules%.", "")
|
|
return function()
|
|
return require("modules." .. moduleName)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Test automatic initialization queue functionality
|
|
require("testing.loveStub")
|
|
local luaunit = require("testing.luaunit")
|
|
local FlexLove = require("FlexLove")
|
|
|
|
TestInitQueue = {}
|
|
|
|
function TestInitQueue:setUp()
|
|
-- Reset FlexLove state before each test
|
|
FlexLove.destroy()
|
|
-- Reset initialization state
|
|
FlexLove._initState = "uninitialized"
|
|
FlexLove.initialized = false
|
|
FlexLove._initQueue = {}
|
|
end
|
|
|
|
function TestInitQueue:tearDown()
|
|
FlexLove.destroy()
|
|
end
|
|
|
|
function TestInitQueue:test_elementCreationIsQueuedBeforeInit()
|
|
-- Element creation before init should be queued
|
|
local element = FlexLove.new({ text = "Test" })
|
|
|
|
-- Should return nil when queued
|
|
luaunit.assertNil(element)
|
|
|
|
-- Queue should have one item
|
|
luaunit.assertEquals(#FlexLove._initQueue, 1)
|
|
luaunit.assertEquals(FlexLove._initQueue[1].props.text, "Test")
|
|
end
|
|
|
|
function TestInitQueue:test_queuedElementsCreatedAfterInit()
|
|
local createdElement = nil
|
|
|
|
-- Create element before init with callback
|
|
FlexLove.new({
|
|
text = "Queued Element",
|
|
width = 100,
|
|
height = 50,
|
|
}, function(element)
|
|
createdElement = element
|
|
end)
|
|
|
|
-- Should be queued
|
|
luaunit.assertNil(createdElement)
|
|
luaunit.assertEquals(#FlexLove._initQueue, 1)
|
|
|
|
-- Initialize FlexLove
|
|
FlexLove.init()
|
|
|
|
-- Callback should have been called with created element
|
|
luaunit.assertNotNil(createdElement)
|
|
luaunit.assertEquals(createdElement.text, "Queued Element")
|
|
luaunit.assertEquals(createdElement.width, 100)
|
|
luaunit.assertEquals(createdElement.height, 50)
|
|
|
|
-- Queue should be empty after init
|
|
luaunit.assertEquals(#FlexLove._initQueue, 0)
|
|
end
|
|
|
|
function TestInitQueue:test_multipleElementsQueuedAndCreated()
|
|
local elements = {}
|
|
|
|
-- Queue multiple elements
|
|
for i = 1, 5 do
|
|
FlexLove.new({
|
|
text = "Element " .. i,
|
|
width = i * 10,
|
|
}, function(element)
|
|
table.insert(elements, element)
|
|
end)
|
|
end
|
|
|
|
-- All should be queued
|
|
luaunit.assertEquals(#FlexLove._initQueue, 5)
|
|
luaunit.assertEquals(#elements, 0)
|
|
|
|
-- Initialize
|
|
FlexLove.init()
|
|
|
|
-- All should be created
|
|
luaunit.assertEquals(#elements, 5)
|
|
luaunit.assertEquals(#FlexLove._initQueue, 0)
|
|
|
|
-- Verify properties
|
|
for i = 1, 5 do
|
|
luaunit.assertEquals(elements[i].text, "Element " .. i)
|
|
luaunit.assertEquals(elements[i].width, i * 10)
|
|
end
|
|
end
|
|
|
|
function TestInitQueue:test_elementCreatedImmediatelyAfterInit()
|
|
-- Initialize first
|
|
FlexLove.init()
|
|
|
|
-- Element creation after init should work immediately
|
|
local element = FlexLove.new({ text = "Immediate" })
|
|
|
|
-- Should return element, not nil
|
|
luaunit.assertNotNil(element)
|
|
luaunit.assertEquals(element.text, "Immediate")
|
|
|
|
-- Queue should remain empty
|
|
luaunit.assertEquals(#FlexLove._initQueue, 0)
|
|
end
|
|
|
|
function TestInitQueue:test_isReadyReturnsFalseBeforeInit()
|
|
luaunit.assertFalse(FlexLove.isReady())
|
|
luaunit.assertEquals(FlexLove._initState, "uninitialized")
|
|
end
|
|
|
|
function TestInitQueue:test_isReadyReturnsTrueAfterInit()
|
|
FlexLove.init()
|
|
|
|
luaunit.assertTrue(FlexLove.isReady())
|
|
luaunit.assertEquals(FlexLove._initState, "ready")
|
|
end
|
|
|
|
function TestInitQueue:test_callbackErrorDoesNotStopQueue()
|
|
local elements = {}
|
|
|
|
-- First element with failing callback
|
|
FlexLove.new({ text = "Element 1" }, function(element)
|
|
table.insert(elements, element)
|
|
error("Intentional error")
|
|
end)
|
|
|
|
-- Second element with working callback
|
|
FlexLove.new({ text = "Element 2" }, function(element)
|
|
table.insert(elements, element)
|
|
end)
|
|
|
|
-- Initialize (errors should be caught and logged)
|
|
FlexLove.init()
|
|
|
|
-- Both elements should have been created despite error
|
|
luaunit.assertEquals(#elements, 2)
|
|
luaunit.assertEquals(elements[1].text, "Element 1")
|
|
luaunit.assertEquals(elements[2].text, "Element 2")
|
|
end
|
|
|
|
function TestInitQueue:test_queueWithoutCallback()
|
|
-- Element without callback
|
|
FlexLove.new({ text = "No Callback" })
|
|
|
|
luaunit.assertEquals(#FlexLove._initQueue, 1)
|
|
luaunit.assertNil(FlexLove._initQueue[1].callback)
|
|
|
|
-- Should still be created after init
|
|
FlexLove.init()
|
|
|
|
luaunit.assertEquals(#FlexLove._initQueue, 0)
|
|
-- Element was created, just no way to reference it without callback
|
|
end
|
|
|
|
if not _G.RUNNING_ALL_TESTS then
|
|
os.exit(luaunit.LuaUnit.run())
|
|
end
|