This commit is contained in:
Michael Freno
2025-09-18 18:27:57 -04:00
parent d869582b37
commit d5f85e82d1
14 changed files with 2511 additions and 17 deletions

View File

@@ -0,0 +1,142 @@
package.path = package.path .. ";?.lua"
local luaunit = require("testing/luaunit")
require("testing/loveStub") -- Required to mock LOVE functions
local FlexLove = require("FlexLove")
-- Create test cases
TestAbsolutePositioning = {}
function TestAbsolutePositioning:setUp()
-- Reset layout engine before each test
self.GUI = FlexLove.GUI
end
function TestAbsolutePositioning:testBasicAbsolutePositioning()
-- Test basic absolute positioning - similar to CSS position: absolute
local element = self.GUI.new({
x = 100,
y = 150,
w = 200,
h = 100,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
luaunit.assertEquals(element.x, 100)
luaunit.assertEquals(element.y, 150)
luaunit.assertEquals(element.width, 200)
luaunit.assertEquals(element.height, 100)
luaunit.assertEquals(element.positioning, FlexLove.enums.Positioning.ABSOLUTE)
end
function TestAbsolutePositioning:testAbsolutePositioningWithOffsets()
-- Test absolute positioning with top/left/right/bottom - like CSS absolute positioning
local container = self.GUI.new({
x = 0,
y = 0,
w = 500,
h = 500,
})
local child = self.GUI.new({
parent = container,
x = 50,
y = 75,
w = 100,
h = 50,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
-- Element should maintain its absolute position
luaunit.assertEquals(child.x, 50)
luaunit.assertEquals(child.y, 75)
luaunit.assertEquals(child.width, 100)
luaunit.assertEquals(child.height, 50)
end
function TestAbsolutePositioning:testAbsolutePositioningInContainer()
-- Test absolute positioning within a container - similar to CSS relative container
local container = self.GUI.new({
x = 100,
y = 100,
w = 500,
h = 500,
})
local child = self.GUI.new({
parent = container,
x = 50,
y = 50,
w = 100,
h = 100,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
-- Child should keep its absolute position
luaunit.assertEquals(child.x, 50)
luaunit.assertEquals(child.y, 50)
luaunit.assertEquals(child.width, 100)
luaunit.assertEquals(child.height, 100)
end
function TestAbsolutePositioning:testAbsolutePositioningWithRightBottom()
-- Test absolute positioning with right/bottom properties - like CSS
local container = self.GUI.new({
x = 0,
y = 0,
w = 1000,
h = 800,
})
local child = self.GUI.new({
parent = container,
x = 850,
y = 650,
w = 100,
h = 100,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
-- Child should maintain its position from right/bottom edges
luaunit.assertEquals(child.x, 850)
luaunit.assertEquals(child.y, 650)
luaunit.assertEquals(child.width, 100)
luaunit.assertEquals(child.height, 100)
end
function TestAbsolutePositioning:testAbsolutePositioningZIndex()
-- Test z-index with absolute positioning - like CSS z-index
local container = self.GUI.new({
x = 0,
y = 0,
w = 500,
h = 500,
})
local child1 = self.GUI.new({
parent = container,
x = 0,
y = 0,
w = 100,
h = 100,
z = 1,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
local child2 = self.GUI.new({
parent = container,
x = 50,
y = 50,
w = 100,
h = 100,
z = 2,
positioning = FlexLove.enums.Positioning.ABSOLUTE,
})
-- Elements should maintain their z-index order
luaunit.assertEquals(child1.z, 1)
luaunit.assertEquals(child2.z, 2)
luaunit.assertTrue(child1.z < child2.z)
end
luaunit.LuaUnit.run()