immediate mode state management cleanup

This commit is contained in:
Michael Freno
2025-11-06 00:11:43 -05:00
parent 0177195061
commit 3a82bcee8e
6 changed files with 629 additions and 638 deletions

View File

@@ -119,8 +119,9 @@ function TestStateManager:test_updateState_updatesFrameNumber()
StateManager.updateState("test-element", { hover = true })
-- State should exist and be accessible
local state = StateManager.getState("test-element")
luaunit.assertEquals(state.lastUpdateFrame, currentFrame)
luaunit.assertNotNil(state)
end
-- ====================
@@ -251,57 +252,46 @@ function TestStateManager:test_isActive_returnsTrueWhenActive()
end
-- ====================
-- State Change Events Tests
-- ID Generation Tests
-- ====================
function TestStateManager:test_subscribe_receivesStateChangeEvents()
local callbackInvoked = false
local receivedId = nil
local receivedProperty = nil
local receivedOldValue = nil
local receivedNewValue = nil
function TestStateManager:test_generateID_createsUniqueID()
local id1 = StateManager.generateID({ test = "value1" })
local id2 = StateManager.generateID({ test = "value2" })
local callback = function(id, property, oldValue, newValue)
callbackInvoked = true
receivedId = id
receivedProperty = property
receivedOldValue = oldValue
receivedNewValue = newValue
end
StateManager.subscribe("test-element", callback)
StateManager.updateState("test-element", { hover = true })
luaunit.assertTrue(callbackInvoked)
luaunit.assertEquals(receivedId, "test-element")
luaunit.assertEquals(receivedProperty, "hover")
luaunit.assertEquals(receivedOldValue, false)
luaunit.assertEquals(receivedNewValue, true)
luaunit.assertNotNil(id1)
luaunit.assertNotNil(id2)
luaunit.assertTrue(type(id1) == "string")
luaunit.assertTrue(type(id2) == "string")
end
function TestStateManager:test_subscribe_multipleListeners()
local callback1Invoked = false
local callback2Invoked = false
function TestStateManager:test_generateID_withoutProps()
local id = StateManager.generateID(nil)
StateManager.subscribe("test-element", function() callback1Invoked = true end)
StateManager.subscribe("test-element", function() callback2Invoked = true end)
StateManager.updateState("test-element", { hover = true })
luaunit.assertTrue(callback1Invoked)
luaunit.assertTrue(callback2Invoked)
luaunit.assertNotNil(id)
luaunit.assertTrue(type(id) == "string")
end
function TestStateManager:test_unsubscribe_removesListener()
local callbackInvoked = false
local callback = function() callbackInvoked = true end
-- ====================
-- Scroll Position Tests
-- ====================
function TestStateManager:test_scrollPosition_initialization()
local state = StateManager.getState("test-element")
StateManager.subscribe("test-element", callback)
StateManager.unsubscribe("test-element", callback)
luaunit.assertEquals(state.scrollX, 0)
luaunit.assertEquals(state.scrollY, 0)
end
function TestStateManager:test_scrollPosition_updates()
StateManager.updateState("test-element", {
scrollX = 100,
scrollY = 200,
})
StateManager.updateState("test-element", { hover = true })
luaunit.assertFalse(callbackInvoked)
local state = StateManager.getState("test-element")
luaunit.assertEquals(state.scrollX, 100)
luaunit.assertEquals(state.scrollY, 200)
end
-- ====================