Files
Axel Meyer fa5bceb353 feat(input-test): migrate to test-lib (manifest.lib + run_tests) (Test-Opt Phase 3.2)
Per ADR-0037 Tests-as-Libs Convention. Renamed on Gitea + moved
locally. History preserved.
2026-05-16 01:19:40 +02:00

59 lines
2.9 KiB
Lua

-- lib-core.input-test — P.3.3 test-module
-- Validates engine.input mouse surface + lib-core.input v0.4.0 (BIND_MAP + was_action_released).
-- Headless via P.3.1 test-mode pattern. 17 assertions.
local input = require("lib-core.input")
local M = {}
function M.run_tests(ctx)
-- Engine surface present (7 assertions)
engine.test.assert(type(engine.input.MOUSE_LEFT) == "number",
"MOUSE_LEFT constant is integer")
engine.test.assert(type(engine.input.MOUSE_RIGHT) == "number",
"MOUSE_RIGHT constant is integer")
engine.test.assert(type(engine.input.MOUSE_MIDDLE) == "number",
"MOUSE_MIDDLE constant is integer")
engine.test.assert(type(engine.input.is_mouse_down) == "function",
"is_mouse_down function registered")
engine.test.assert(type(engine.input.was_mouse_pressed) == "function",
"was_mouse_pressed function registered")
engine.test.assert(type(engine.input.was_released) == "function",
"was_released function registered")
engine.test.assert(type(engine.input.was_mouse_released) == "function",
"was_mouse_released function registered")
-- bind() accepts mouse-strings (1 assertion)
input.bind("click", {"mouse_left"})
engine.test.equals(input.action_count(), 1, "action_count == 1 after mouse bind")
-- bind() accepts mixed key+mouse (1 assertion)
input.bind("interact", {"e", "mouse_left"})
engine.test.equals(input.action_count(), 2, "action_count == 2 after mixed bind")
-- bind() rejects unknown mouse-name (atomic) (3 assertions)
local ok, err = pcall(input.bind, "bad", {"mouse_xyz"})
engine.test.assert(not ok, "bind('bad', {'mouse_xyz'}) raises Lua error")
engine.test.assert(err and err:find("mouse_xyz", 1, true),
"error message mentions the bad string")
engine.test.equals(input.action_count(), 2,
"no partial state mutation on failed bind")
-- is_action_down / was_action_pressed / was_action_released return false in headless (4 assertions)
engine.test.equals(input.is_action_down("click"), false,
"headless: unpressed mouse_left is_action_down=false")
engine.test.equals(input.was_action_pressed("click"), false,
"headless: unpressed was_action_pressed=false")
engine.test.equals(input.was_action_released("click"), false,
"headless: unpressed was_action_released=false")
engine.test.equals(input.was_action_released("nonexistent_action"), false,
"was_action_released for unknown action returns false")
-- Existing key-only binding still works (regression-check) (1 assertion)
input.bind("walk_left", {"a", "left"})
engine.test.equals(input.action_count(), 3,
"key-only bind still works after BIND_MAP refactor")
end
return M