memory tooling, state handling changes
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user