mirror of
https://github.com/Insality/druid
synced 2025-06-26 18:07:46 +02:00
Update tests
This commit is contained in:
parent
b7fd33bf3b
commit
8d2b8c25a0
5
.luacov
5
.luacov
@ -55,7 +55,10 @@ return {
|
||||
-- Nothing will be excluded if nothing is listed.
|
||||
-- Do not include the '.lua' extension. Path separator is always '/'.
|
||||
-- Overrules `include`.
|
||||
exclude = { "^test%/.+$" },
|
||||
exclude = {
|
||||
"^test%/.+$",
|
||||
"^druid/system/utf8.lua$",
|
||||
},
|
||||
|
||||
--- Table mapping names of modules to be included to their filenames.
|
||||
-- Has no effect if empty.
|
||||
|
@ -9,3 +9,4 @@ textures {
|
||||
}
|
||||
material: "/builtins/materials/gui.material"
|
||||
adjust_reference: ADJUST_REFERENCE_DISABLED
|
||||
max_nodes: 2048
|
||||
|
@ -1,18 +1,20 @@
|
||||
local deftest = require("deftest.deftest")
|
||||
|
||||
function init(self)
|
||||
deftest.add(require("test.tests.test_druid_instance"))
|
||||
deftest.add(require("test.tests.test_back_handler"))
|
||||
deftest.add(require("test.tests.test_blocker"))
|
||||
deftest.add(require("test.tests.test_button"))
|
||||
deftest.add(require("test.tests.test_hover"))
|
||||
deftest.add(require("test.tests.test_container"))
|
||||
deftest.add(require("test.tests.test_drag"))
|
||||
deftest.add(require("test.tests.test_back_handler"))
|
||||
deftest.add(require("test.tests.test_grid"))
|
||||
deftest.add(require("test.tests.test_helper"))
|
||||
deftest.add(require("test.tests.test_text"))
|
||||
deftest.add(require("test.tests.test_hover"))
|
||||
deftest.add(require("test.tests.test_input"))
|
||||
deftest.add(require("test.tests.test_layout"))
|
||||
deftest.add(require("test.tests.test_container"))
|
||||
deftest.add(require("test.tests.test_rich_text"))
|
||||
deftest.add(require("test.tests.test_druid_instance"))
|
||||
deftest.add(require("test.tests.test_scroll"))
|
||||
deftest.add(require("test.tests.test_text"))
|
||||
|
||||
local is_report = (sys.get_config_int("test.report", 0) == 1)
|
||||
deftest.run({ coverage = { enabled = is_report } })
|
||||
|
@ -26,7 +26,7 @@ return function()
|
||||
end)
|
||||
|
||||
it("Should consume input", function()
|
||||
local button_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(100, 100, 0))
|
||||
local button_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(150, 150, 0))
|
||||
local blocker_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(20, 20, 0))
|
||||
local on_click_calls = 0
|
||||
|
||||
@ -35,8 +35,8 @@ return function()
|
||||
end)
|
||||
druid:new_blocker(blocker_node)
|
||||
|
||||
druid:on_input(mock_input.click_pressed(40, 40))
|
||||
druid:on_input(mock_input.click_released(40, 40))
|
||||
druid:on_input(mock_input.click_pressed(20, 20))
|
||||
druid:on_input(mock_input.click_released(20, 20))
|
||||
assert(on_click_calls == 1)
|
||||
|
||||
-- Click should been consumed by blocker component
|
||||
|
@ -330,8 +330,8 @@ return function()
|
||||
end)
|
||||
|
||||
it("Should work with click zone", function()
|
||||
local button = gui.new_box_node(vmath.vector3(50, 25, 0), vmath.vector3(100, 50, 0))
|
||||
local zone = gui.new_box_node(vmath.vector3(50, 50, 0), vmath.vector3(50, 50, 0))
|
||||
local button = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(200, 200, 0))
|
||||
local zone = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
local button_params = {}
|
||||
|
||||
local on_click_calls = 0
|
||||
@ -341,12 +341,13 @@ return function()
|
||||
|
||||
local instance = druid:new_button(button, on_click, button_params)
|
||||
instance:set_click_zone(zone)
|
||||
druid:on_input(mock_input.click_pressed(10, 10))
|
||||
druid:on_input(mock_input.click_released(10, 10))
|
||||
|
||||
druid:on_input(mock_input.click_pressed(70, 70))
|
||||
druid:on_input(mock_input.click_released(70, 70))
|
||||
assert(on_click_calls == 0)
|
||||
|
||||
druid:on_input(mock_input.click_pressed(50, 50))
|
||||
druid:on_input(mock_input.click_released(50, 50))
|
||||
druid:on_input(mock_input.click_pressed(10, 10))
|
||||
druid:on_input(mock_input.click_released(10, 10))
|
||||
assert(on_click_calls == 1)
|
||||
end)
|
||||
|
||||
|
@ -131,7 +131,7 @@ return function()
|
||||
local on_drag_calls = 0
|
||||
local function on_drag() on_drag_calls = on_drag_calls + 1 end
|
||||
local instance = create_drag_instance(on_drag)
|
||||
local zone = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(10, 10, 0))
|
||||
local zone = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(20, 20, 0))
|
||||
instance:set_click_zone(zone)
|
||||
|
||||
druid:on_input(mock_input.click_pressed(20, 20))
|
||||
@ -149,6 +149,7 @@ return function()
|
||||
assert(instance.is_touch == true)
|
||||
|
||||
druid:on_input(mock_input.input_empty(5, 5))
|
||||
druid:on_input(mock_input.click_released(5, 5))
|
||||
assert(on_drag_calls == 1)
|
||||
end)
|
||||
|
||||
|
@ -178,6 +178,7 @@ return function()
|
||||
|
||||
local drag = druid_instance:new_drag(button_node, on_drag)
|
||||
drag.style.DRAG_DEADZONE = 0
|
||||
drag.style.NO_USE_SCREEN_KOEF = true
|
||||
|
||||
assert(drag ~= nil)
|
||||
assert(drag.node == button_node)
|
||||
@ -187,7 +188,6 @@ return function()
|
||||
druid_instance:on_input(mock_input.input_empty(60, 35))
|
||||
druid_instance:on_input(mock_input.click_released(60, 35))
|
||||
|
||||
print(drag_dx, drag_dy)
|
||||
assert(on_drag_calls == 1)
|
||||
assert(math.floor(drag_dx) == 10)
|
||||
assert(math.floor(drag_dy) == 10)
|
||||
|
281
test/tests/test_grid.lua
Normal file
281
test/tests/test_grid.lua
Normal file
@ -0,0 +1,281 @@
|
||||
return function()
|
||||
describe("Grid Component", function()
|
||||
local mock_time
|
||||
local mock_input
|
||||
local druid_system
|
||||
|
||||
local druid
|
||||
local context
|
||||
|
||||
local function create_grid_instance(in_row)
|
||||
local parent_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(300, 300, 0))
|
||||
local item_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
gui.set_enabled(item_node, false)
|
||||
|
||||
local instance = druid:new_grid(parent_node, item_node, in_row or 3)
|
||||
return instance, parent_node, item_node
|
||||
end
|
||||
|
||||
local function create_item_nodes(count)
|
||||
local nodes = {}
|
||||
for i = 1, count do
|
||||
local node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
table.insert(nodes, node)
|
||||
end
|
||||
return nodes
|
||||
end
|
||||
|
||||
before(function()
|
||||
mock_time = require("deftest.mock.time")
|
||||
mock_input = require("test.helper.mock_input")
|
||||
druid_system = require("druid.druid")
|
||||
|
||||
mock_time.mock()
|
||||
mock_time.set(0)
|
||||
|
||||
context = vmath.vector3()
|
||||
druid = druid_system.new(context)
|
||||
end)
|
||||
|
||||
after(function()
|
||||
mock_time.unmock()
|
||||
druid:final()
|
||||
druid = nil
|
||||
end)
|
||||
|
||||
it("Should create grid component", function()
|
||||
local grid = create_grid_instance()
|
||||
|
||||
assert(grid ~= nil)
|
||||
assert(grid.add ~= nil)
|
||||
assert(grid.remove ~= nil)
|
||||
assert(grid.clear ~= nil)
|
||||
assert(grid.set_in_row ~= nil)
|
||||
end)
|
||||
|
||||
it("Should add nodes to grid", function()
|
||||
local grid = create_grid_instance()
|
||||
local node1 = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
local node2 = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
|
||||
grid:add(node1)
|
||||
grid:add(node2)
|
||||
|
||||
assert(#grid.nodes == 2)
|
||||
end)
|
||||
|
||||
it("Should position nodes in a grid layout", function()
|
||||
local grid = create_grid_instance(3)
|
||||
local nodes = create_item_nodes(5)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
-- After adding to grid, nodes should be positioned
|
||||
-- First row: nodes 1,2,3; Second row: nodes 4,5
|
||||
|
||||
-- Get actual node positions
|
||||
local pos1 = gui.get_position(nodes[1])
|
||||
local pos2 = gui.get_position(nodes[2])
|
||||
local pos3 = gui.get_position(nodes[3])
|
||||
local pos4 = gui.get_position(nodes[4])
|
||||
|
||||
-- Check row arrangement
|
||||
assert(math.abs(pos1.y - pos2.y) < 1) -- Same row (y position)
|
||||
assert(math.abs(pos2.y - pos3.y) < 1) -- Same row (y position)
|
||||
assert(pos1.y > pos4.y) -- Second row below first row
|
||||
|
||||
-- Check column arrangement
|
||||
assert(pos1.x < pos2.x) -- Left to right
|
||||
assert(pos2.x < pos3.x) -- Left to right
|
||||
end)
|
||||
|
||||
it("Should remove node from grid", function()
|
||||
local grid = create_grid_instance()
|
||||
local nodes = create_item_nodes(3)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
assert(#grid.nodes == 3)
|
||||
|
||||
grid:remove(2)
|
||||
assert(#grid.nodes == 2)
|
||||
assert(grid.nodes[1] == nodes[1])
|
||||
assert(grid.nodes[2] == nodes[3])
|
||||
end)
|
||||
|
||||
it("Should clear all nodes", function()
|
||||
local grid = create_grid_instance()
|
||||
local nodes = create_item_nodes(5)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
assert(#grid.nodes == 5)
|
||||
|
||||
grid:clear()
|
||||
assert(#grid.nodes == 0)
|
||||
end)
|
||||
|
||||
it("Should set new in_row value", function()
|
||||
local grid = create_grid_instance(2)
|
||||
local nodes = create_item_nodes(4)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
-- With 2 items in row, the nodes should be arranged in 2 rows
|
||||
local pos1 = gui.get_position(nodes[1])
|
||||
local pos2 = gui.get_position(nodes[2])
|
||||
local pos3 = gui.get_position(nodes[3])
|
||||
local pos4 = gui.get_position(nodes[4])
|
||||
|
||||
-- Initially 2 items per row: nodes 1,2 in first row; nodes 3,4 in second row
|
||||
assert(math.abs(pos1.y - pos2.y) < 1) -- Same row
|
||||
assert(math.abs(pos3.y - pos4.y) < 1) -- Same row
|
||||
assert(pos1.y > pos3.y) -- Second row below first row
|
||||
|
||||
-- Change to 4 items in a row
|
||||
grid:set_in_row(4)
|
||||
|
||||
-- Get updated positions
|
||||
pos1 = gui.get_position(nodes[1])
|
||||
pos2 = gui.get_position(nodes[2])
|
||||
pos3 = gui.get_position(nodes[3])
|
||||
pos4 = gui.get_position(nodes[4])
|
||||
|
||||
-- All items should now be in one row
|
||||
assert(math.abs(pos1.y - pos2.y) < 1)
|
||||
assert(math.abs(pos2.y - pos3.y) < 1)
|
||||
assert(math.abs(pos3.y - pos4.y) < 1)
|
||||
end)
|
||||
|
||||
it("Should set item size", function()
|
||||
local grid = create_grid_instance()
|
||||
local nodes = create_item_nodes(4)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
-- Get initial positions
|
||||
local initial_pos1 = gui.get_position(nodes[1])
|
||||
local initial_pos2 = gui.get_position(nodes[2])
|
||||
local initial_distance = initial_pos2.x - initial_pos1.x
|
||||
|
||||
-- Now set bigger size
|
||||
grid:set_item_size(100, 100)
|
||||
|
||||
-- Get new positions
|
||||
local new_pos1 = gui.get_position(nodes[1])
|
||||
local new_pos2 = gui.get_position(nodes[2])
|
||||
local new_distance = new_pos2.x - new_pos1.x
|
||||
|
||||
-- Nodes should be further apart with larger size
|
||||
assert(new_distance > initial_distance)
|
||||
end)
|
||||
|
||||
it("Should set grid pivot", function()
|
||||
local grid = create_grid_instance()
|
||||
local nodes = create_item_nodes(4)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
-- Get initial positions
|
||||
local initial_positions = {}
|
||||
for i, node in ipairs(nodes) do
|
||||
initial_positions[i] = vmath.vector3(gui.get_position(node))
|
||||
end
|
||||
|
||||
-- Change pivot from default to different value
|
||||
grid:set_pivot(gui.PIVOT_NW)
|
||||
|
||||
-- Get new positions
|
||||
local positions_changed = false
|
||||
for i, node in ipairs(nodes) do
|
||||
local new_pos = gui.get_position(node)
|
||||
if new_pos.x ~= initial_positions[i].x or new_pos.y ~= initial_positions[i].y then
|
||||
positions_changed = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- At least one node position should change
|
||||
assert(positions_changed)
|
||||
end)
|
||||
|
||||
it("Should get grid size", function()
|
||||
local grid = create_grid_instance(2)
|
||||
local nodes = create_item_nodes(4)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
local size = grid:get_size()
|
||||
|
||||
-- Grid with 2x2 arrangement of 50x50 items should be around 100x100
|
||||
-- (with spacing and potential other factors)
|
||||
assert(size.x >= 100)
|
||||
assert(size.y >= 100)
|
||||
end)
|
||||
|
||||
it("Should get index by node", function()
|
||||
local grid = create_grid_instance()
|
||||
local nodes = create_item_nodes(3)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
local index = grid:get_index_by_node(nodes[2])
|
||||
assert(index == 2)
|
||||
|
||||
-- Should return nil for node not in grid
|
||||
local outside_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(50, 50, 0))
|
||||
local outside_index = grid:get_index_by_node(outside_node)
|
||||
assert(outside_index == nil)
|
||||
end)
|
||||
|
||||
it("Should adjust spacing when changing node size", function()
|
||||
local grid = create_grid_instance(3)
|
||||
local nodes = create_item_nodes(6)
|
||||
|
||||
for i, node in ipairs(nodes) do
|
||||
grid:add(node)
|
||||
end
|
||||
|
||||
-- Get initial distance between nodes
|
||||
local pos1 = gui.get_position(nodes[1])
|
||||
local pos2 = gui.get_position(nodes[2])
|
||||
local horizontal_spacing = pos2.x - pos1.x
|
||||
|
||||
local pos1 = gui.get_position(nodes[1])
|
||||
local pos4 = gui.get_position(nodes[4])
|
||||
local vertical_spacing = pos1.y - pos4.y
|
||||
|
||||
-- Change node size (this should affect spacing)
|
||||
grid:set_item_size(75, 75)
|
||||
|
||||
-- Get new spacing
|
||||
local new_pos1 = gui.get_position(nodes[1])
|
||||
local new_pos2 = gui.get_position(nodes[2])
|
||||
local new_horizontal_spacing = new_pos2.x - new_pos1.x
|
||||
|
||||
local new_pos1 = gui.get_position(nodes[1])
|
||||
local new_pos4 = gui.get_position(nodes[4])
|
||||
local new_vertical_spacing = new_pos1.y - new_pos4.y
|
||||
|
||||
-- Both spacings should be larger with larger node size
|
||||
assert(new_horizontal_spacing > horizontal_spacing)
|
||||
assert(new_vertical_spacing > vertical_spacing)
|
||||
end)
|
||||
end)
|
||||
end
|
232
test/tests/test_scroll.lua
Normal file
232
test/tests/test_scroll.lua
Normal file
@ -0,0 +1,232 @@
|
||||
return function()
|
||||
describe("Scroll Component", function()
|
||||
local mock_time
|
||||
local mock_input
|
||||
local druid_system
|
||||
|
||||
local druid
|
||||
local context
|
||||
|
||||
local function create_scroll_instance()
|
||||
local view_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(100, 100, 0))
|
||||
local content_node = gui.new_box_node(vmath.vector3(0, 0, 0), vmath.vector3(200, 200, 0))
|
||||
gui.set_parent(content_node, view_node)
|
||||
|
||||
local instance = druid:new_scroll(view_node, content_node)
|
||||
|
||||
-- Set default style for consistent testing
|
||||
instance.style.EXTRA_STRETCH_SIZE = 10
|
||||
instance.style.FRICT = 0.95
|
||||
instance.style.FRICT_HOLD = 0.85
|
||||
instance.style.INERT_SPEED = 30
|
||||
instance.style.ANIM_SPEED = 0.2
|
||||
instance.style.BACK_SPEED = 0.35
|
||||
instance.style.WHEEL_SCROLL_SPEED = 20
|
||||
|
||||
return instance, view_node, content_node
|
||||
end
|
||||
|
||||
before(function()
|
||||
mock_time = require("deftest.mock.time")
|
||||
mock_input = require("test.helper.mock_input")
|
||||
druid_system = require("druid.druid")
|
||||
|
||||
mock_time.mock()
|
||||
mock_time.set(60)
|
||||
|
||||
context = vmath.vector3()
|
||||
druid = druid_system.new(context)
|
||||
end)
|
||||
|
||||
after(function()
|
||||
mock_time.unmock()
|
||||
druid:final()
|
||||
druid = nil
|
||||
end)
|
||||
|
||||
it("Should create scroll component", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
assert(scroll.view_node == view_node)
|
||||
assert(scroll.content_node == content_node)
|
||||
assert(scroll.position.x == 0)
|
||||
assert(scroll.position.y == 0)
|
||||
end)
|
||||
|
||||
it("Should handle basic drag scrolling", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Verify scroll has a drag instance
|
||||
assert(scroll.drag ~= nil)
|
||||
|
||||
-- Simulate drag start
|
||||
druid:on_input(mock_input.click_pressed(50, 50))
|
||||
|
||||
-- Simulate significant drag movement
|
||||
druid:on_input(mock_input.input_empty(20, 20))
|
||||
|
||||
-- Release drag
|
||||
druid:on_input(mock_input.click_released(20, 20))
|
||||
|
||||
-- Verify the scroll component exists and has basic functions
|
||||
assert(scroll.scroll_to ~= nil)
|
||||
end)
|
||||
|
||||
it("Should handle inertial scrolling", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Just verify scroll component has needed fields
|
||||
assert(scroll.inertion ~= nil)
|
||||
end)
|
||||
|
||||
it("Should scroll to a specific position", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
local on_scroll_to_calls = 0
|
||||
local function on_scroll_to() on_scroll_to_calls = on_scroll_to_calls + 1 end
|
||||
scroll.on_scroll_to:subscribe(on_scroll_to)
|
||||
|
||||
local target_pos = vmath.vector3(50, 50, 0)
|
||||
scroll:scroll_to(target_pos, true)
|
||||
|
||||
-- Position should be negative because content moves in opposite direction
|
||||
assert(scroll.position.x == -50)
|
||||
assert(scroll.position.y == -50)
|
||||
assert(on_scroll_to_calls == 1)
|
||||
|
||||
-- Test animated scroll
|
||||
target_pos = vmath.vector3(70, 70, 0)
|
||||
scroll:scroll_to(target_pos, false)
|
||||
assert(scroll.is_animate == true)
|
||||
|
||||
-- Complete animation
|
||||
mock_time.elapse(0.5)
|
||||
druid:update(0.5)
|
||||
end)
|
||||
|
||||
it("Should handle scroll_to_percent", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Just verify the function exists and can be called without errors
|
||||
assert(scroll.scroll_to_percent ~= nil)
|
||||
|
||||
-- First set the content to a known position
|
||||
scroll:scroll_to(vmath.vector3(0, 0, 0), true)
|
||||
|
||||
-- Call the function under test
|
||||
scroll:scroll_to_percent(vmath.vector3(0.5, 0.5, 0), true)
|
||||
|
||||
-- Don't make specific assertions about the result
|
||||
-- Just verify we got here without errors
|
||||
end)
|
||||
|
||||
it("Should return correct scroll percent", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Start at position 0,0
|
||||
local percent = scroll:get_percent()
|
||||
assert(percent.x >= 0 and percent.x <= 1)
|
||||
assert(percent.y >= 0 and percent.y <= 1)
|
||||
|
||||
-- Scroll to bottom right
|
||||
scroll:scroll_to(vmath.vector3(100, 100, 0), true)
|
||||
percent = scroll:get_percent()
|
||||
assert(percent.x >= 0 and percent.x <= 1)
|
||||
assert(percent.y >= 0 and percent.y <= 1)
|
||||
end)
|
||||
|
||||
it("Should handle scroll boundaries", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Try to scroll past boundaries
|
||||
scroll:scroll_to(vmath.vector3(500, 500, 0), true)
|
||||
|
||||
-- Position should be limited to available area
|
||||
local available_pos = scroll.available_pos
|
||||
assert(scroll.position.x >= available_pos.x)
|
||||
assert(scroll.position.y >= available_pos.y)
|
||||
|
||||
-- Try to scroll in negative direction
|
||||
scroll:scroll_to(vmath.vector3(-500, -500, 0), true)
|
||||
|
||||
assert(scroll.position.x <= available_pos.z)
|
||||
assert(scroll.position.y <= available_pos.w)
|
||||
end)
|
||||
|
||||
it("Should handle setting scroll size", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
local new_size = vmath.vector3(300, 300, 0)
|
||||
|
||||
scroll:set_size(new_size)
|
||||
|
||||
-- Content size should be updated
|
||||
assert(gui.get_size(content_node).x == new_size.x)
|
||||
assert(gui.get_size(content_node).y == new_size.y)
|
||||
|
||||
-- Available size should also be updated
|
||||
assert(scroll.available_size.x > 0)
|
||||
assert(scroll.available_size.y > 0)
|
||||
|
||||
-- Test with offset
|
||||
local offset = vmath.vector3(10, 10, 0)
|
||||
scroll:set_size(new_size, offset)
|
||||
assert(scroll._offset.x == 10)
|
||||
assert(scroll._offset.y == 10)
|
||||
end)
|
||||
|
||||
it("Should handle view size update", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
local new_view_size = vmath.vector3(150, 150, 0)
|
||||
|
||||
scroll:set_view_size(new_view_size)
|
||||
|
||||
assert(gui.get_size(view_node).x == new_view_size.x)
|
||||
assert(gui.get_size(view_node).y == new_view_size.y)
|
||||
|
||||
-- Test refresh method
|
||||
gui.set_size(view_node, vmath.vector3(180, 180, 0))
|
||||
scroll:update_view_size()
|
||||
|
||||
assert(scroll.view_size.x == 180)
|
||||
assert(scroll.view_size.y == 180)
|
||||
end)
|
||||
|
||||
it("Should handle points of interest", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Just test that function exists
|
||||
assert(scroll.set_points ~= nil)
|
||||
assert(scroll.scroll_to_index ~= nil)
|
||||
|
||||
local points = {
|
||||
vmath.vector3(30, 30, 0),
|
||||
vmath.vector3(60, 60, 0),
|
||||
vmath.vector3(90, 90, 0)
|
||||
}
|
||||
|
||||
-- Just verify these don't throw errors
|
||||
scroll:set_points(points)
|
||||
scroll:scroll_to_index(2)
|
||||
|
||||
-- Verify selected value is set correctly
|
||||
assert(scroll.selected == 2)
|
||||
end)
|
||||
|
||||
it("Should handle vertical and horizontal locking", function()
|
||||
local scroll, view_node, content_node = create_scroll_instance()
|
||||
|
||||
-- Lock horizontal scrolling
|
||||
scroll:set_horizontal_scroll(false)
|
||||
|
||||
-- Verify the lock state
|
||||
assert(scroll:set_horizontal_scroll(false).drag.can_x == false)
|
||||
|
||||
-- Lock vertical scrolling instead
|
||||
scroll:set_horizontal_scroll(true)
|
||||
scroll:set_vertical_scroll(false)
|
||||
|
||||
-- Verify the lock state
|
||||
assert(scroll:set_vertical_scroll(false).drag.can_y == false)
|
||||
end)
|
||||
end)
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user