add dora-joy node publishing gamepad axes and buttons
validate / validate (pull_request) Successful in 58m42s
validate / test (pull_request) Successful in 58m47s
validate / markdownlint (pull_request) Successful in 58m40s

This commit is contained in:
2026-09-16 05:10:33 -05:00
parent 9f56aa8f75
commit 3624c63ead
24 changed files with 1478 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
"""The probe: what it draws, without a pad or a terminal."""
from dora_joy.gamepad import Sample
from dora_joy.probe import bar, render
from tests.conftest import stick
def test_a_centred_stick_puts_the_marker_in_the_middle():
drawn = bar(0.0)
assert drawn[len(drawn) // 2] == "#"
def test_the_bar_leans_the_way_the_stick_is_pushed():
left = bar(-1.0)
right = bar(1.0)
assert left.index("#") < left.index("|")
assert right.index("#") > right.index("|")
def test_a_reading_beyond_full_deflection_stays_on_the_bar():
# SDL has been known to report slightly outside -1..1 on a worn stick.
assert "#" in bar(-4.0)
assert "#" in bar(4.0)
def test_no_gamepad_says_so_and_names_the_index_it_looked_for(config):
config.joystick_index = 2
drawn = render(Sample(present=False), config)
assert "no gamepad found" in drawn
assert "index 2" in drawn
def test_every_axis_the_pad_reports_is_shown(config):
# A pad whose sticks land on unexpected indices is what this is for, so
# nothing may be hidden.
drawn = render(Sample(axes=[0.0] * 8, buttons=[], present=True), config)
assert "axes (8 reported)" in drawn
for index in range(8):
assert f" {index} " in drawn
def test_the_buttons_being_held_are_listed_by_index(config):
drawn = render(stick(buttons=[False, True, False, True]), config)
assert "1, 3" in drawn
def test_a_pad_with_nothing_pressed_says_so(config):
assert "none pressed" in render(stick(), config)