gh-111201: Fix event queue tests for pyrepl (#118635)

This commit is contained in:
Lysandros Nikolaou 2024-05-06 11:50:42 +02:00 committed by GitHub
parent 153b3f7530
commit 8e750b83a8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,6 +2,7 @@ import itertools
import os import os
import rlcompleter import rlcompleter
import sys import sys
import tempfile
import unittest import unittest
from code import InteractiveConsole from code import InteractiveConsole
from functools import partial from functools import partial
@ -603,26 +604,32 @@ class TestPyReplCompleter(TestCase):
@patch("_pyrepl.curses.tigetstr", lambda x: b"") @patch("_pyrepl.curses.tigetstr", lambda x: b"")
class TestUnivEventQueue(TestCase): class TestUnivEventQueue(TestCase):
def setUp(self):
self.file = tempfile.TemporaryFile()
def tearDown(self) -> None:
self.file.close()
def test_get(self): def test_get(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
event = Event("key", "a", b"a") event = Event("key", "a", b"a")
eq.insert(event) eq.insert(event)
self.assertEqual(eq.get(), event) self.assertEqual(eq.get(), event)
def test_empty(self): def test_empty(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
self.assertTrue(eq.empty()) self.assertTrue(eq.empty())
eq.insert(Event("key", "a", b"a")) eq.insert(Event("key", "a", b"a"))
self.assertFalse(eq.empty()) self.assertFalse(eq.empty())
def test_flush_buf(self): def test_flush_buf(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.buf.extend(b"test") eq.buf.extend(b"test")
self.assertEqual(eq.flush_buf(), b"test") self.assertEqual(eq.flush_buf(), b"test")
self.assertEqual(eq.buf, bytearray()) self.assertEqual(eq.buf, bytearray())
def test_insert(self): def test_insert(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
event = Event("key", "a", b"a") event = Event("key", "a", b"a")
eq.insert(event) eq.insert(event)
self.assertEqual(eq.events[0], event) self.assertEqual(eq.events[0], event)
@ -630,30 +637,30 @@ class TestUnivEventQueue(TestCase):
@patch("_pyrepl.unix_eventqueue.keymap") @patch("_pyrepl.unix_eventqueue.keymap")
def test_push_with_key_in_keymap(self, mock_keymap): def test_push_with_key_in_keymap(self, mock_keymap):
mock_keymap.compile_keymap.return_value = {"a": "b"} mock_keymap.compile_keymap.return_value = {"a": "b"}
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {b"a": "b"} eq.keymap = {b"a": "b"}
eq.push("a") eq.push("a")
self.assertTrue(mock_keymap.compile_keymap.called) mock_keymap.compile_keymap.assert_called()
self.assertEqual(eq.events[0].evt, "key") self.assertEqual(eq.events[0].evt, "key")
self.assertEqual(eq.events[0].data, "b") self.assertEqual(eq.events[0].data, "b")
@patch("_pyrepl.unix_eventqueue.keymap") @patch("_pyrepl.unix_eventqueue.keymap")
def test_push_without_key_in_keymap(self, mock_keymap): def test_push_without_key_in_keymap(self, mock_keymap):
mock_keymap.compile_keymap.return_value = {"a": "b"} mock_keymap.compile_keymap.return_value = {"a": "b"}
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {b"c": "d"} eq.keymap = {b"c": "d"}
eq.push("a") eq.push("a")
self.assertTrue(mock_keymap.compile_keymap.called) mock_keymap.compile_keymap.assert_called()
self.assertEqual(eq.events[0].evt, "key") self.assertEqual(eq.events[0].evt, "key")
self.assertEqual(eq.events[0].data, "a") self.assertEqual(eq.events[0].data, "a")
@patch("_pyrepl.unix_eventqueue.keymap") @patch("_pyrepl.unix_eventqueue.keymap")
def test_push_with_keymap_in_keymap(self, mock_keymap): def test_push_with_keymap_in_keymap(self, mock_keymap):
mock_keymap.compile_keymap.return_value = {"a": "b"} mock_keymap.compile_keymap.return_value = {"a": "b"}
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {b"a": {b"b": "c"}} eq.keymap = {b"a": {b"b": "c"}}
eq.push("a") eq.push("a")
self.assertTrue(mock_keymap.compile_keymap.called) mock_keymap.compile_keymap.assert_called()
self.assertTrue(eq.empty()) self.assertTrue(eq.empty())
eq.push("b") eq.push("b")
self.assertEqual(eq.events[0].evt, "key") self.assertEqual(eq.events[0].evt, "key")
@ -665,10 +672,10 @@ class TestUnivEventQueue(TestCase):
@patch("_pyrepl.unix_eventqueue.keymap") @patch("_pyrepl.unix_eventqueue.keymap")
def test_push_with_keymap_in_keymap_and_escape(self, mock_keymap): def test_push_with_keymap_in_keymap_and_escape(self, mock_keymap):
mock_keymap.compile_keymap.return_value = {"a": "b"} mock_keymap.compile_keymap.return_value = {"a": "b"}
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {b"a": {b"b": "c"}} eq.keymap = {b"a": {b"b": "c"}}
eq.push("a") eq.push("a")
self.assertTrue(mock_keymap.compile_keymap.called) mock_keymap.compile_keymap.assert_called()
self.assertTrue(eq.empty()) self.assertTrue(eq.empty())
eq.flush_buf() eq.flush_buf()
eq.push("\033") eq.push("\033")
@ -679,7 +686,7 @@ class TestUnivEventQueue(TestCase):
self.assertEqual(eq.events[1].data, "b") self.assertEqual(eq.events[1].data, "b")
def test_push_special_key(self): def test_push_special_key(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {} eq.keymap = {}
eq.push("\x1b") eq.push("\x1b")
eq.push("[") eq.push("[")
@ -688,7 +695,7 @@ class TestUnivEventQueue(TestCase):
self.assertEqual(eq.events[0].data, "\x1b") self.assertEqual(eq.events[0].data, "\x1b")
def test_push_unrecognized_escape_sequence(self): def test_push_unrecognized_escape_sequence(self):
eq = EventQueue(sys.stdout.fileno(), "utf-8") eq = EventQueue(self.file.fileno(), "utf-8")
eq.keymap = {} eq.keymap = {}
eq.push("\x1b") eq.push("\x1b")
eq.push("[") eq.push("[")