Files
FlexLove/testing/__tests__/input_event_test.lua
Michael Freno 472bf358f4 more testing
2025-11-15 02:02:02 -05:00

212 lines
5.7 KiB
Lua

-- Test suite for InputEvent module
package.path = package.path .. ";./?.lua;./modules/?.lua"
require("testing.loveStub")
local luaunit = require("testing.luaunit")
local InputEvent = require("modules.InputEvent")
TestInputEvent = {}
-- Test: new() creates click event with all properties
function TestInputEvent:test_new_creates_click_event()
local event = InputEvent.new({
type = "click",
button = 1,
x = 100,
y = 200,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertNotNil(event, "new() should return event")
luaunit.assertEquals(event.type, "click")
luaunit.assertEquals(event.button, 1)
luaunit.assertEquals(event.x, 100)
luaunit.assertEquals(event.y, 200)
luaunit.assertNotNil(event.modifiers)
luaunit.assertEquals(event.modifiers.shift, false)
end
-- Test: new() creates press event
function TestInputEvent:test_new_creates_press_event()
local event = InputEvent.new({
type = "press",
button = 1,
x = 50,
y = 75,
modifiers = { shift = true, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.type, "press")
luaunit.assertEquals(event.button, 1)
luaunit.assertEquals(event.x, 50)
luaunit.assertEquals(event.y, 75)
luaunit.assertEquals(event.modifiers.shift, true)
end
-- Test: new() creates release event
function TestInputEvent:test_new_creates_release_event()
local event = InputEvent.new({
type = "release",
button = 1,
x = 150,
y = 250,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.type, "release")
end
-- Test: new() creates rightclick event with button 2
function TestInputEvent:test_new_creates_rightclick_event()
local event = InputEvent.new({
type = "rightclick",
button = 2,
x = 100,
y = 100,
modifiers = { shift = false, ctrl = true, alt = false, super = false },
})
luaunit.assertEquals(event.type, "rightclick")
luaunit.assertEquals(event.button, 2)
luaunit.assertEquals(event.modifiers.ctrl, true)
end
-- Test: new() creates middleclick event with button 3
function TestInputEvent:test_new_creates_middleclick_event()
local event = InputEvent.new({
type = "middleclick",
button = 3,
x = 200,
y = 300,
modifiers = { shift = false, ctrl = false, alt = true, super = false },
})
luaunit.assertEquals(event.type, "middleclick")
luaunit.assertEquals(event.button, 3)
luaunit.assertEquals(event.modifiers.alt, true)
end
-- Test: new() creates drag event with dx and dy
function TestInputEvent:test_new_creates_drag_event_with_deltas()
local event = InputEvent.new({
type = "drag",
button = 1,
x = 100,
y = 100,
dx = 20,
dy = -15,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.type, "drag")
luaunit.assertEquals(event.dx, 20)
luaunit.assertEquals(event.dy, -15)
end
-- Test: new() defaults clickCount to 1 if not provided
function TestInputEvent:test_new_defaults_clickCount_to_one()
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.clickCount, 1)
end
-- Test: new() accepts custom clickCount for double-click
function TestInputEvent:test_new_accepts_custom_clickCount()
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
clickCount = 2,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.clickCount, 2)
end
-- Test: new() accepts custom clickCount for triple-click
function TestInputEvent:test_new_accepts_triple_click()
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
clickCount = 3,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.clickCount, 3)
end
-- Test: new() defaults timestamp to current time if not provided
function TestInputEvent:test_new_defaults_timestamp()
local before = love.timer.getTime()
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
local after = love.timer.getTime()
luaunit.assertNotNil(event.timestamp)
luaunit.assertTrue(event.timestamp >= before)
luaunit.assertTrue(event.timestamp <= after)
end
-- Test: new() accepts custom timestamp
function TestInputEvent:test_new_accepts_custom_timestamp()
local customTime = 12345.678
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
timestamp = customTime,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertEquals(event.timestamp, customTime)
end
-- Test: new() handles all modifier keys
function TestInputEvent:test_new_handles_all_modifier_keys()
local event = InputEvent.new({
type = "click",
button = 1,
x = 0,
y = 0,
modifiers = { shift = true, ctrl = true, alt = true, super = true },
})
luaunit.assertEquals(event.modifiers.shift, true)
luaunit.assertEquals(event.modifiers.ctrl, true)
luaunit.assertEquals(event.modifiers.alt, true)
luaunit.assertEquals(event.modifiers.super, true)
end
-- Test: new() handles nil dx/dy for non-drag events
function TestInputEvent:test_new_handles_nil_deltas()
local event = InputEvent.new({
type = "click",
button = 1,
x = 100,
y = 100,
modifiers = { shift = false, ctrl = false, alt = false, super = false },
})
luaunit.assertNil(event.dx)
luaunit.assertNil(event.dy)
end
if not _G.RUNNING_ALL_TESTS then
os.exit(luaunit.LuaUnit.run())
end