Observe QEMU swipe presses (#546)

This commit is contained in:
Noah
2026-09-11 10:31:09 -06:00
parent 7e0089826b
commit 55660b7c01
2 changed files with 103 additions and 14 deletions
+52
View File
@@ -282,6 +282,58 @@ class PureHelpers(unittest.TestCase):
self.assertFalse(observed)
self.assertEqual(calls[-1], [qmp.btn_ev(False)])
def test_observed_swipe_moves_after_guest_consumes_press(self):
calls = []
class ObservingCtl:
def __init__(self):
self.calls = 0
def send(self, cmd):
self.calls += 1
return f"presses: {0 if self.calls < 3 else 1}"
saved_send, saved_sleep = qmp.send_events, qmp.time.sleep
qmp.send_events = lambda _s, _f, events: calls.append(events)
qmp.time.sleep = lambda _seconds: None
try:
observed = qmp.do_observed_swipe(
SimpleNamespace(s=None, f=None, ctl=ObservingCtl(), size=720),
10, 20, 110, 120, ms=50, steps=2)
finally:
qmp.send_events, qmp.time.sleep = saved_send, saved_sleep
self.assertTrue(observed)
self.assertEqual(calls[0][-1], qmp.btn_ev(True))
self.assertEqual(calls[-1], [qmp.btn_ev(False)])
self.assertEqual(len(calls), 4)
def test_observed_swipe_timeout_still_releases_press(self):
calls = []
clock = iter((0.0, 0.0, qmp.TAP_OBSERVE_TIMEOUT_S + 0.1))
class UnobservingCtl:
def send(self, cmd):
return "presses: 0"
saved_send, saved_sleep, saved_monotonic = (
qmp.send_events, qmp.time.sleep, qmp.time.monotonic)
qmp.send_events = lambda _s, _f, events: calls.append(events)
qmp.time.sleep = lambda _seconds: None
qmp.time.monotonic = lambda: next(clock)
try:
observed = qmp.do_observed_swipe(
SimpleNamespace(s=None, f=None, ctl=UnobservingCtl(), size=720),
10, 20, 110, 120, ms=50, steps=2)
finally:
qmp.send_events = saved_send
qmp.time.sleep = saved_sleep
qmp.time.monotonic = saved_monotonic
self.assertFalse(observed)
self.assertEqual(len(calls), 2)
self.assertEqual(calls[-1], [qmp.btn_ev(False)])
def test_every_pixel_round_trips_through_lvgl_calibration(self):
# lv_evdev.c _evdev_calibrate: px = axis * (width - 1) / AXIS_MAX,
# integer division. A tap requested at px must land at px, for every