Skip to content

Commit 5fd90f2

Browse files
committed
Test flushing bare Esc when timeout expires
1 parent b7466cf commit 5fd90f2

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

Lib/test/test_pyrepl/test_unix_console.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,20 @@ def test_restore_in_thread(self, _os_write):
399399
thread.start()
400400
thread.join() # this should not raise
401401

402+
def test_escape_timeout(self, _os_write):
403+
console = UnixConsole(term="xterm")
404+
console.prepare()
405+
console.event_queue.push(b"\x1b")
406+
self.assertTrue(console.event_queue.pending())
407+
# Simulate the read timing out before any follow-up bytes arrive.
408+
console.wait = Mock(return_value=False)
409+
event = console.get_event()
410+
self.assertIsNotNone(event)
411+
self.assertEqual(event.evt, "key")
412+
self.assertEqual(event.data, "\x0b")
413+
self.assertEqual(event.raw, b"\x1b")
414+
console.restore()
415+
402416

403417
@unittest.skipIf(sys.platform == "win32", "No Unix console on Windows")
404418
class TestUnixConsoleEIOHandling(TestCase):

Lib/test/test_pyrepl/test_windows_console.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,19 @@ def test_wait_not_empty(self):
648648
self.assertTrue(console.wait(0.0))
649649
self.assertEqual(console.wait_for_event.call_count, 0)
650650

651+
def test_escape_timeout(self):
652+
console = WindowsConsole()
653+
# Simulate the read timing out before any follow-up bytes arrive.
654+
console.wait_for_event = MagicMock(return_value=False)
655+
console.event_queue.push(b"\x1b")
656+
self.assertTrue(console.event_queue.pending())
657+
event = console.get_event()
658+
console.restore()
659+
self.assertIsNotNone(event)
660+
self.assertEqual(event.evt, "key")
661+
self.assertEqual(event.data, "\x1b")
662+
self.assertEqual(event.raw, b"\x1b")
663+
651664

652665
if __name__ == "__main__":
653666
unittest.main()

0 commit comments

Comments
 (0)