Observe QEMU swipe presses (#546)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user