memory tooling, state handling changes

This commit is contained in:
Michael Freno
2025-11-25 09:50:57 -05:00
parent 9918df5ea8
commit d3014200da
25 changed files with 3528 additions and 1016 deletions

View File

@@ -864,6 +864,7 @@ function TestElementStyling:test_element_with_background_color()
end
function TestElementStyling:test_element_with_corner_radius_table()
-- Test uniform radius (should be stored as number for optimization)
local element = FlexLove.new({
id = "test",
x = 0,
@@ -874,10 +875,25 @@ function TestElementStyling:test_element_with_corner_radius_table()
})
luaunit.assertNotNil(element.cornerRadius)
luaunit.assertEquals(element.cornerRadius.topLeft, 10)
luaunit.assertEquals(element.cornerRadius.topRight, 10)
luaunit.assertEquals(element.cornerRadius.bottomLeft, 10)
luaunit.assertEquals(element.cornerRadius.bottomRight, 10)
luaunit.assertEquals(type(element.cornerRadius), "number")
luaunit.assertEquals(element.cornerRadius, 10)
-- Test non-uniform radius (should be stored as table)
local element2 = FlexLove.new({
id = "test2",
x = 0,
y = 0,
width = 100,
height = 100,
cornerRadius = { topLeft = 5, topRight = 10, bottomLeft = 15, bottomRight = 20 },
})
luaunit.assertNotNil(element2.cornerRadius)
luaunit.assertEquals(type(element2.cornerRadius), "table")
luaunit.assertEquals(element2.cornerRadius.topLeft, 5)
luaunit.assertEquals(element2.cornerRadius.topRight, 10)
luaunit.assertEquals(element2.cornerRadius.bottomLeft, 15)
luaunit.assertEquals(element2.cornerRadius.bottomRight, 20)
end
function TestElementStyling:test_element_with_margin_table()

View File

@@ -6,6 +6,9 @@ local luaunit = require("testing.luaunit")
local EventHandler = require("modules.EventHandler")
local InputEvent = require("modules.InputEvent")
local utils = require("modules.utils")
local ErrorHandler = require("modules.ErrorHandler")
ErrorHandler.init({})
EventHandler.init({ Performance = nil, ErrorHandler = ErrorHandler, InputEvent = InputEvent, utils = utils })
TestEventHandler = {}
@@ -77,14 +80,9 @@ function TestEventHandler:test_new_accepts_custom_config()
end
-- Test: initialize() sets element reference
function TestEventHandler:test_initialize_sets_element()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
luaunit.assertEquals(handler._element, element)
end
-- function TestEventHandler:test_initialize_sets_element()
-- Removed: _element field no longer exists
-- end
-- Test: getState() returns state data
function TestEventHandler:test_getState_returns_state()
@@ -184,18 +182,18 @@ function TestEventHandler:test_isButtonPressed_checks_specific_button()
end
-- Test: processMouseEvents() returns early if no element
function TestEventHandler:test_processMouseEvents_no_element()
local handler = createEventHandler()
-- Should not error
handler:processMouseEvents(50, 50, true, true)
end
-- function TestEventHandler:test_processMouseEvents_no_element()
-- local handler = createEventHandler()
--
-- -- Should not error
-- handler:processMouseEvents(element, 50, 50, true, true)
-- end
-- Test: processMouseEvents() handles press event
function TestEventHandler:test_processMouseEvents_press()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventReceived = nil
handler.onEvent = function(el, event)
@@ -209,7 +207,7 @@ function TestEventHandler:test_processMouseEvents_press()
end
-- First call - button just pressed
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
luaunit.assertNotNil(eventReceived)
luaunit.assertEquals(eventReceived.type, "press")
@@ -223,7 +221,7 @@ end
function TestEventHandler:test_processMouseEvents_drag()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -236,10 +234,10 @@ function TestEventHandler:test_processMouseEvents_drag()
end
-- First call - press at (50, 50)
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Second call - drag to (60, 70)
handler:processMouseEvents(60, 70, true, true)
handler:processMouseEvents(element, 60, 70, true, true)
luaunit.assertTrue(#eventsReceived >= 2)
-- Find drag event
@@ -262,7 +260,7 @@ end
function TestEventHandler:test_processMouseEvents_release_and_click()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -276,11 +274,11 @@ function TestEventHandler:test_processMouseEvents_release_and_click()
end
-- Press
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Release
isButtonDown = false
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Should have: press, click, release events
luaunit.assertTrue(#eventsReceived >= 3)
@@ -312,7 +310,7 @@ end
function TestEventHandler:test_processMouseEvents_double_click()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -327,15 +325,15 @@ function TestEventHandler:test_processMouseEvents_double_click()
-- First click
isButtonDown = true
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
isButtonDown = false
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Second click (quickly after first)
isButtonDown = true
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
isButtonDown = false
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Find click events
local clickEvents = {}
@@ -358,7 +356,7 @@ end
function TestEventHandler:test_processMouseEvents_rightclick()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -373,9 +371,9 @@ function TestEventHandler:test_processMouseEvents_rightclick()
-- Right click press and release
isButtonDown = true
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
isButtonDown = false
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
local hasRightClick = false
for _, event in ipairs(eventsReceived) do
@@ -394,7 +392,7 @@ end
function TestEventHandler:test_processMouseEvents_middleclick()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -409,9 +407,9 @@ function TestEventHandler:test_processMouseEvents_middleclick()
-- Middle click press and release
isButtonDown = true
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
isButtonDown = false
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
local hasMiddleClick = false
for _, event in ipairs(eventsReceived) do
@@ -431,7 +429,7 @@ function TestEventHandler:test_processMouseEvents_disabled()
local handler = createEventHandler()
local element = createMockElement()
element.disabled = true
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventReceived = false
handler.onEvent = function(el, event)
@@ -443,7 +441,7 @@ function TestEventHandler:test_processMouseEvents_disabled()
return button == 1
end
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Should not fire event for disabled element
luaunit.assertFalse(eventReceived)
@@ -455,7 +453,7 @@ end
function TestEventHandler:test_processTouchEvents()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local eventsReceived = {}
handler.onEvent = function(el, event)
@@ -482,7 +480,7 @@ function TestEventHandler:test_processTouchEvents()
return 50, 50 -- Inside element
end
end
handler:processTouchEvents()
handler:processTouchEvents(element)
-- Second call - touch moves outside
love.touch.getPosition = function(id)
@@ -490,7 +488,7 @@ function TestEventHandler:test_processTouchEvents()
return 150, 150 -- Outside element
end
end
handler:processTouchEvents()
handler:processTouchEvents(element)
-- Should receive touch event
luaunit.assertTrue(#eventsReceived >= 1)
@@ -500,21 +498,21 @@ function TestEventHandler:test_processTouchEvents()
end
-- Test: processTouchEvents() returns early if no element
function TestEventHandler:test_processTouchEvents_no_element()
local handler = createEventHandler()
-- Should not error
handler:processTouchEvents()
end
-- function TestEventHandler:test_processTouchEvents_no_element()
-- local handler = createEventHandler()
--
-- -- Should not error
-- handler:processTouchEvents(element)
-- end
-- Test: processTouchEvents() returns early if no onEvent
function TestEventHandler:test_processTouchEvents_no_onEvent()
local handler = createEventHandler()
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
-- Should not error (no onEvent callback)
handler:processTouchEvents()
handler:processTouchEvents(element)
end
-- Test: onEventDeferred flag defers callback execution
@@ -536,7 +534,7 @@ function TestEventHandler:test_onEventDeferred()
end,
})
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local originalIsDown = love.mouse.isDown
love.mouse.isDown = function(button)
@@ -544,11 +542,11 @@ function TestEventHandler:test_onEventDeferred()
end
-- Press and release mouse button
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
love.mouse.isDown = function()
return false
end
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Events should not be immediately executed
luaunit.assertEquals(#eventsReceived, 0)
@@ -588,7 +586,7 @@ function TestEventHandler:test_onEventDeferred_false()
end,
})
local element = createMockElement()
handler:initialize(element)
-- handler:initialize(element) -- Removed: element now passed as parameter
local originalIsDown = love.mouse.isDown
love.mouse.isDown = function(button)
@@ -596,11 +594,11 @@ function TestEventHandler:test_onEventDeferred_false()
end
-- Press and release mouse button
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
love.mouse.isDown = function()
return false
end
handler:processMouseEvents(50, 50, true, true)
handler:processMouseEvents(element, 50, 50, true, true)
-- Events should be immediately executed
luaunit.assertTrue(#eventsReceived > 0)

View File

@@ -475,9 +475,9 @@ function TestRendererMethods:testInitialize()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
renderer:initialize(mockElement)
luaunit.assertEquals(renderer._element, mockElement)
-- initialize() method has been removed - element is now passed to draw()
-- This test verifies that the renderer can be created without errors
luaunit.assertTrue(true)
end
function TestRendererMethods:testDestroy()
@@ -492,7 +492,7 @@ function TestRendererMethods:testGetFont()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
mockElement.fontSize = 16
renderer:initialize(mockElement)
local font = renderer:getFont(mockElement)
luaunit.assertNotNil(font)
@@ -510,26 +510,26 @@ function TestRendererDrawing:testDrawBasic()
}, createDeps())
local mockElement = createMockElement()
renderer:initialize(mockElement)
-- Should not error when drawing
renderer:draw()
renderer:draw(mockElement)
luaunit.assertTrue(true)
end
function TestRendererDrawing:testDrawWithNilBackdrop()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
renderer:initialize(mockElement)
renderer:draw(nil)
renderer:draw(mockElement, nil)
luaunit.assertTrue(true)
end
function TestRendererDrawing:testDrawPressedState()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
renderer:initialize(mockElement)
-- Should not error
renderer:drawPressedState(0, 0, 100, 100)
@@ -543,7 +543,7 @@ function TestRendererDrawing:testDrawScrollbars()
mockElement.scrollbarWidth = 8
mockElement.scrollbarPadding = 2
mockElement.scrollbarColor = Color.new(0.5, 0.5, 0.5, 1)
renderer:initialize(mockElement)
local dims = {
scrollX = 0,
@@ -579,7 +579,7 @@ function TestRendererText:testDrawText()
mockElement.text = "Hello World"
mockElement.fontSize = 14
mockElement.textAlign = "left"
renderer:initialize(mockElement)
-- Should not error
renderer:drawText(mockElement)
@@ -590,7 +590,7 @@ function TestRendererText:testDrawTextWithNilText()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
mockElement.text = nil
renderer:initialize(mockElement)
-- Should handle nil text gracefully
renderer:drawText(mockElement)
@@ -601,7 +601,7 @@ function TestRendererText:testDrawTextWithEmptyString()
local renderer = Renderer.new({}, createDeps())
local mockElement = createMockElement()
mockElement.text = ""
renderer:initialize(mockElement)
renderer:drawText(mockElement)
luaunit.assertTrue(true)

View File

@@ -168,14 +168,17 @@ end
function TestScrollManagerEdgeCases:testDetectOverflowWithoutElement()
local sm = createScrollManager({})
-- Should warn but not crash
sm:detectOverflow()
-- No assertion - just ensure no crash
-- Should crash when element is nil (no longer has error handling)
local success = pcall(function()
sm:detectOverflow(nil)
end)
luaunit.assertFalse(success)
end
function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithoutElement()
local sm = createScrollManager({})
local dims = sm:calculateScrollbarDimensions()
-- Should return empty result when element is nil (overflow defaults to "hidden")
local dims = sm:calculateScrollbarDimensions(nil)
luaunit.assertNotNil(dims)
luaunit.assertFalse(dims.vertical.visible)
luaunit.assertFalse(dims.horizontal.visible)
@@ -183,13 +186,13 @@ end
function TestScrollManagerEdgeCases:testGetScrollbarAtPositionWithoutElement()
local sm = createScrollManager({})
local result = sm:getScrollbarAtPosition(50, 50)
local result = sm:getScrollbarAtPosition(nil, 50, 50)
luaunit.assertNil(result)
end
function TestScrollManagerEdgeCases:testHandleMousePressWithoutElement()
local sm = createScrollManager({})
local consumed = sm:handleMousePress(50, 50, 1)
local consumed = sm:handleMousePress(nil, 50, 50, 1)
luaunit.assertFalse(consumed)
end
@@ -200,8 +203,7 @@ end
function TestScrollManagerEdgeCases:testDetectOverflowWithNoChildren()
local sm = createScrollManager({ overflow = "auto" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
sm:detectOverflow(element)
local hasOverflowX, hasOverflowY = sm:hasOverflow()
luaunit.assertFalse(hasOverflowX)
@@ -211,8 +213,7 @@ end
function TestScrollManagerEdgeCases:testDetectOverflowWithZeroDimensions()
local sm = createScrollManager({ overflow = "auto" })
local element = createMockElement(0, 0, {})
sm:initialize(element)
sm:detectOverflow()
sm:detectOverflow(element)
local contentW, contentH = sm:getContentSize()
luaunit.assertEquals(contentW, 0)
@@ -223,8 +224,8 @@ function TestScrollManagerEdgeCases:testDetectOverflowWithVisibleOverflow()
local sm = createScrollManager({ overflow = "visible" })
local child = createMockChild(0, 0, 500, 500)
local element = createMockElement(200, 300, { child })
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
-- Should skip detection for visible overflow
local hasOverflowX, hasOverflowY = sm:hasOverflow()
@@ -237,8 +238,8 @@ function TestScrollManagerEdgeCases:testDetectOverflowWithAbsolutelyPositionedCh
local child = createMockChild(0, 0, 500, 500)
child._explicitlyAbsolute = true -- Should be ignored in overflow calc
local element = createMockElement(200, 300, { child })
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local hasOverflowX, hasOverflowY = sm:hasOverflow()
luaunit.assertFalse(hasOverflowX) -- Absolute children don't contribute
@@ -250,8 +251,8 @@ function TestScrollManagerEdgeCases:testDetectOverflowWithNegativeChildMargins()
local child = createMockChild(10, 10, 100, 100)
child.margin = { top = -50, right = -50, bottom = -50, left = -50 }
local element = createMockElement(200, 300, { child })
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
-- Negative margins shouldn't cause negative overflow detection
local contentW, contentH = sm:getContentSize()
@@ -263,8 +264,8 @@ function TestScrollManagerEdgeCases:testDetectOverflowClampsExistingScroll()
local sm = createScrollManager({ overflow = "auto", _scrollX = 1000, _scrollY = 1000 })
local child = createMockChild(10, 10, 100, 100)
local element = createMockElement(200, 300, { child })
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
-- Scroll should be clamped to max bounds
local scrollX, scrollY = sm:getScroll()
@@ -395,10 +396,10 @@ end
function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithZeroTrackSize()
local sm = createScrollManager({ overflow = "scroll", scrollbarPadding = 150 }) -- Padding bigger than element
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local dims = sm:calculateScrollbarDimensions()
local dims = sm:calculateScrollbarDimensions(element)
-- Should handle zero or negative track sizes
luaunit.assertNotNil(dims.vertical)
luaunit.assertNotNil(dims.horizontal)
@@ -407,10 +408,10 @@ end
function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithScrollMode()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {}) -- No overflow
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local dims = sm:calculateScrollbarDimensions()
local dims = sm:calculateScrollbarDimensions(element)
-- Scrollbars should be visible in "scroll" mode even without overflow
luaunit.assertTrue(dims.vertical.visible)
luaunit.assertTrue(dims.horizontal.visible)
@@ -419,10 +420,10 @@ end
function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithAutoModeNoOverflow()
local sm = createScrollManager({ overflow = "auto" })
local element = createMockElement(200, 300, {}) -- No overflow
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local dims = sm:calculateScrollbarDimensions()
local dims = sm:calculateScrollbarDimensions(element)
-- Scrollbars should NOT be visible in "auto" mode without overflow
luaunit.assertFalse(dims.vertical.visible)
luaunit.assertFalse(dims.horizontal.visible)
@@ -431,10 +432,10 @@ end
function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithAxisSpecificOverflow()
local sm = createScrollManager({ overflowX = "scroll", overflowY = "hidden" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local dims = sm:calculateScrollbarDimensions()
local dims = sm:calculateScrollbarDimensions(element)
luaunit.assertTrue(dims.horizontal.visible) -- X is scroll
luaunit.assertFalse(dims.vertical.visible) -- Y is hidden
end
@@ -443,10 +444,10 @@ function TestScrollManagerEdgeCases:testCalculateScrollbarDimensionsWithMinThumb
local sm = createScrollManager({ overflow = "scroll" })
local child = createMockChild(10, 10, 100, 10000) -- Very tall child
local element = createMockElement(200, 300, { child })
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local dims = sm:calculateScrollbarDimensions()
local dims = sm:calculateScrollbarDimensions(element)
-- Thumb should have minimum size of 20px
luaunit.assertTrue(dims.vertical.thumbHeight >= 20)
end
@@ -458,60 +459,60 @@ end
function TestScrollManagerEdgeCases:testGetScrollbarAtPositionOutsideBounds()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local result = sm:getScrollbarAtPosition(-100, -100)
local result = sm:getScrollbarAtPosition(element, -100, -100)
luaunit.assertNil(result)
end
function TestScrollManagerEdgeCases:testGetScrollbarAtPositionWithHiddenScrollbars()
local sm = createScrollManager({ overflow = "scroll", hideScrollbars = true })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
-- Even though scrollbar exists, it's hidden so shouldn't be detected
local dims = sm:calculateScrollbarDimensions()
local result = sm:getScrollbarAtPosition(190, 50)
local dims = sm:calculateScrollbarDimensions(element)
local result = sm:getScrollbarAtPosition(element, 190, 50)
luaunit.assertNil(result)
end
function TestScrollManagerEdgeCases:testHandleMousePressWithRightButton()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local consumed = sm:handleMousePress(50, 50, 2) -- Right button
local consumed = sm:handleMousePress(element, 50, 50, 2) -- Right button
luaunit.assertFalse(consumed)
end
function TestScrollManagerEdgeCases:testHandleMousePressWithMiddleButton()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local consumed = sm:handleMousePress(50, 50, 3) -- Middle button
local consumed = sm:handleMousePress(element, 50, 50, 3) -- Middle button
luaunit.assertFalse(consumed)
end
function TestScrollManagerEdgeCases:testHandleMouseMoveWithoutDragging()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local consumed = sm:handleMouseMove(50, 50)
local consumed = sm:handleMouseMove(element, 50, 50)
luaunit.assertFalse(consumed)
end
function TestScrollManagerEdgeCases:testHandleMouseReleaseWithoutDragging()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
local consumed = sm:handleMouseRelease(1)
luaunit.assertFalse(consumed)
@@ -520,8 +521,8 @@ end
function TestScrollManagerEdgeCases:testHandleMouseReleaseWithWrongButton()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
sm._scrollbarDragging = true -- Simulate dragging
local consumed = sm:handleMouseRelease(2) -- Wrong button
@@ -965,13 +966,13 @@ end
function TestScrollManagerEdgeCases:testUpdateHoverStateOutsideScrollbar()
local sm = createScrollManager({ overflow = "scroll" })
local element = createMockElement(200, 300, {})
sm:initialize(element)
sm:detectOverflow()
-- sm:initialize(element) -- Removed: element now passed as parameter
sm:detectOverflow(element)
sm._scrollbarHoveredVertical = true
sm._scrollbarHoveredHorizontal = true
sm:updateHoverState(0, 0) -- Far from scrollbar
sm:updateHoverState(element, 0, 0) -- Far from scrollbar
luaunit.assertFalse(sm._scrollbarHoveredVertical)
luaunit.assertFalse(sm._scrollbarHoveredHorizontal)

File diff suppressed because it is too large Load Diff

View File

@@ -85,7 +85,7 @@ function TestTouchEvents:testEventHandler_TouchBegan()
-- Trigger touch event processing
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- Should have received at least one touchpress event
@@ -123,7 +123,7 @@ function TestTouchEvents:testEventHandler_TouchMoved()
-- First touch
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- Move touch
@@ -135,7 +135,7 @@ function TestTouchEvents:testEventHandler_TouchMoved()
end
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- Should have received touchpress and touchmove events
@@ -174,7 +174,7 @@ function TestTouchEvents:testEventHandler_TouchEnded()
-- First touch
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- End touch
@@ -183,7 +183,7 @@ function TestTouchEvents:testEventHandler_TouchEnded()
end
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- Should have received touchpress and touchrelease events
@@ -222,7 +222,7 @@ function TestTouchEvents:testEventHandler_MultiTouch()
end
FlexLove.beginFrame()
element._eventHandler:processTouchEvents()
element._eventHandler:processTouchEvents(element)
FlexLove.endFrame()
-- Should have received two touchpress events