Files
FlexLove/testing/__tests__/init_queue_test.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