mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-22 21:46:51 +02:00
CLOSES #1570
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
-- Gold noop'd the raw joystick road, so a stick with no SDL game-controller-db
|
||||
-- entry pressed nothing in Gold while working in Gen 1 (#1570).
|
||||
package.path = "./?.lua;./?/init.lua;" .. package.path
|
||||
if not _G.love then _G.love = require("tests.love_stub") end
|
||||
|
||||
local T = require("tests.harness")
|
||||
local check = T.check
|
||||
local eq = T.eq
|
||||
|
||||
local Game = require("src.core.Game")
|
||||
local Game2 = require("src.core.Game2")
|
||||
local Input = require("src.core.Input")
|
||||
|
||||
local CALLBACKS = {
|
||||
"keypressed", "keyreleased",
|
||||
"gamepadpressed", "gamepadreleased", "gamepadaxis",
|
||||
"joystickpressed", "joystickreleased", "joystickaxis", "joystickhat",
|
||||
"joystickadded", "joystickremoved",
|
||||
}
|
||||
|
||||
for _, name in ipairs(CALLBACKS) do
|
||||
eq(type(Game[name]), "function", "Gen 1 routes " .. name)
|
||||
eq(type(Game2[name]), "function", "Gold routes " .. name)
|
||||
end
|
||||
|
||||
local rawJoy = { isGamepad = function() return false end }
|
||||
local gamepadJoy = { isGamepad = function() return true end }
|
||||
|
||||
local function newGold(top)
|
||||
return setmetatable({
|
||||
options = {},
|
||||
stack = { top = function() return top end },
|
||||
}, Game2)
|
||||
end
|
||||
|
||||
Input:init()
|
||||
local gold = newGold(nil)
|
||||
|
||||
gold:joystickpressed(rawJoy, 1)
|
||||
Input:step()
|
||||
check(Input:wasPressed("a"), "raw stick button 1 presses GB A in Gold")
|
||||
check(Input:isDown("a"), "raw stick hold survives the step in Gold")
|
||||
gold:joystickreleased(rawJoy, 1)
|
||||
Input:step()
|
||||
check(not Input:isDown("a"), "raw stick release clears the hold in Gold")
|
||||
|
||||
gold:joystickhat(rawJoy, 1, "l")
|
||||
Input:step()
|
||||
check(Input:wasPressed("left"), "raw hat left presses GB LEFT in Gold")
|
||||
gold:joystickhat(rawJoy, 1, "c")
|
||||
Input:step()
|
||||
check(not Input:isDown("left"), "raw hat centre clears GB LEFT in Gold")
|
||||
|
||||
gold:joystickaxis(rawJoy, 2, 1)
|
||||
Input:step()
|
||||
check(Input:wasPressed("down"), "raw axis 2 presses GB DOWN in Gold")
|
||||
gold:joystickaxis(rawJoy, 2, 0)
|
||||
Input:step()
|
||||
check(not Input:isDown("down"), "raw axis 2 back to centre clears GB DOWN")
|
||||
|
||||
-- A recognized pad raises BOTH roads for one press; the raw half must not
|
||||
-- re-assert the factory map underneath a rebind (#620, #632).
|
||||
Input:init()
|
||||
gold = newGold(nil)
|
||||
gold:gamepadpressed(gamepadJoy, "a")
|
||||
gold:joystickpressed(gamepadJoy, 1)
|
||||
gold:joystickpressed(gamepadJoy, 2)
|
||||
Input:step()
|
||||
check(Input:wasPressed("a"), "recognized pad A reaches Input in Gold")
|
||||
check(not Input:wasPressed("b"), "raw must not stack B onto a recognized pad")
|
||||
|
||||
-- src/ui/BindingsMenu.lua's capture slots: Gold now hands the top state first
|
||||
-- refusal on both roads, the way src/core/Game.lua does.
|
||||
Input:init()
|
||||
local captured = {}
|
||||
local capturingTop = {
|
||||
onJoystickPressed = function(_, button) captured.joy = button end,
|
||||
onGamepadPressed = function(_, button) captured.pad = button end,
|
||||
}
|
||||
gold = newGold(capturingTop)
|
||||
gold:joystickpressed(rawJoy, 3)
|
||||
gold:gamepadpressed(gamepadJoy, "y")
|
||||
Input:step()
|
||||
eq(captured.joy, 3, "an armed CONTROLS row captures the raw button")
|
||||
eq(captured.pad, "y", "an armed CONTROLS row captures the pad button")
|
||||
check(not Input:wasPressed("a"), "a captured press never reaches gameplay")
|
||||
|
||||
-- Hotplug: the reset+reconcile Gen 1 runs, so a pad that vanished mid-hold
|
||||
-- cannot strand a direction down (#799).
|
||||
Input:init()
|
||||
gold = newGold(nil)
|
||||
gold:joystickpressed(rawJoy, 1)
|
||||
Input:step()
|
||||
check(Input:isDown("a"), "held before the hotplug")
|
||||
gold:joystickadded(rawJoy)
|
||||
Input:step()
|
||||
check(not Input:isDown("a"), "joystickadded drops stranded holds in Gold")
|
||||
|
||||
gold:joystickpressed(rawJoy, 1)
|
||||
Input:step()
|
||||
gold:joystickremoved(rawJoy)
|
||||
Input:step()
|
||||
check(not Input:isDown("a"), "joystickremoved drops stranded holds in Gold")
|
||||
|
||||
T.finish()
|
||||
Reference in New Issue
Block a user