mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
e91cf0f0c2
Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
2.3 KiB
Lua
50 lines
2.3 KiB
Lua
-- Select+face display chord digit map (NXMOD-06..09).
|
|
-- Spec: Nintendo UX A/B → keys 2/3; Y/X/L → 5/6/7. Map-only (Select held is Game's job).
|
|
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 GamepadMap = require("src.core.GamepadMap")
|
|
|
|
-- Desktop / default: SDL face labels map identity for A/B chords.
|
|
GamepadMap._setForceNXForTests(false)
|
|
eq(GamepadMap.displayChordDigit("a"), "2", "desktop SDL a (GB A) -> key 2")
|
|
eq(GamepadMap.displayChordDigit("b"), "3", "desktop SDL b (GB B) -> key 3")
|
|
eq(GamepadMap.displayChordDigit("y"), "5", "Y -> key 5")
|
|
eq(GamepadMap.displayChordDigit("x"), "6", "X -> key 6")
|
|
eq(GamepadMap.displayChordDigit("leftshoulder"), "7", "leftshoulder (L) -> key 7")
|
|
|
|
-- Unmapped buttons yield nil (no accidental digit).
|
|
eq(GamepadMap.displayChordDigit("start"), nil, "start is not a display chord")
|
|
eq(GamepadMap.displayChordDigit("back"), nil, "back/Select alone is not a digit")
|
|
eq(GamepadMap.displayChordDigit("dpup"), nil, "d-pad is not a display chord")
|
|
eq(GamepadMap.displayChordDigit("rightshoulder"), nil, "R is not a display chord")
|
|
eq(GamepadMap.displayChordDigit(nil), nil, "nil button -> nil")
|
|
|
|
-- NX Nintendo UX: GamepadMap swaps SDL a/b so physical A/B match docs.
|
|
-- Physical Nintendo A arrives as SDL "b" → GB a → key "2".
|
|
-- Physical Nintendo B arrives as SDL "a" → GB b → key "3".
|
|
GamepadMap._setForceNXForTests(true)
|
|
eq(GamepadMap.mapGamepadButton("b"), "a", "precondition: NX SDL east -> GB A")
|
|
eq(GamepadMap.mapGamepadButton("a"), "b", "precondition: NX SDL south -> GB B")
|
|
eq(GamepadMap.displayChordDigit("b"), "2",
|
|
"NX physical A (SDL b / GB a) -> key 2")
|
|
eq(GamepadMap.displayChordDigit("a"), "3",
|
|
"NX physical B (SDL a / GB b) -> key 3")
|
|
-- Y/X/L unchanged under NX face swap.
|
|
eq(GamepadMap.displayChordDigit("y"), "5", "NX Y -> key 5")
|
|
eq(GamepadMap.displayChordDigit("x"), "6", "NX X -> key 6")
|
|
eq(GamepadMap.displayChordDigit("leftshoulder"), "7", "NX L -> key 7")
|
|
GamepadMap._setForceNXForTests(false)
|
|
|
|
-- Edge: map alone never invents a digit for non-chord faces (NXMOD-09 map half)
|
|
for _, btn in ipairs({ "guide", "leftstick", "rightstick", "lefttrigger" }) do
|
|
eq(GamepadMap.displayChordDigit(btn), nil,
|
|
"edge: unmapped " .. btn .. " is not a display digit")
|
|
end
|
|
|
|
T.finish()
|