e.data += ch
return e
- def wait(self, timeout: float | None) -> bool:
+ def wait_for_event(self, timeout: float | None) -> bool:
"""Wait for an event."""
if timeout is None:
timeout = INFINITE
return False
return True
+ def wait(self, timeout: float | None) -> bool:
+ """
+ Wait for events on the console.
+ """
+ return (
+ not self.event_queue.empty()
+ or self.wait_for_event(timeout)
+ )
+
def repaint(self) -> None:
raise NotImplementedError("No repaint support")
Event(evt='key', data='up', raw=bytearray(b'\x1b[A')))
self.assertEqual(self.mock.call_count, 3)
+ # All tests above assume that there is always keyboard data to read,
+ # because for simplicity we just use
+ # self.console.wait = MagicMock(return_value=True)
+ def test_wait_empty(self):
+ console = WindowsConsole(encoding='utf-8')
+ console.wait_for_event = MagicMock(return_value=True)
+ self.assertTrue(console.event_queue.empty())
+ timeout = 2.0
+ self.assertTrue(console.wait(timeout))
+ self.assertEqual(console.wait_for_event.call_count, 1)
+ self.assertEqual(console.wait_for_event.mock_calls[0], call(timeout))
+
+ timeout = 1.1
+ console.wait_for_event = MagicMock(return_value=False)
+ self.assertFalse(console.wait(timeout))
+ self.assertEqual(console.wait_for_event.call_count, 1)
+ self.assertEqual(console.wait_for_event.mock_calls[0], call(timeout))
+
+ def test_wait_not_empty(self):
+ console = WindowsConsole(encoding='utf-8')
+ console.wait_for_event = MagicMock(return_value=True)
+ console.event_queue.push(b"a")
+ self.assertFalse(console.event_queue.empty())
+ self.assertTrue(console.wait(0.0))
+ self.assertEqual(console.wait_for_event.call_count, 0)
+
if __name__ == "__main__":
unittest.main()