-- 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") function init(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