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
1 changed files with 21 additions and 14 deletions

View File

@ -2,6 +2,7 @@
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 @@ def test_global_namespace_completion(self):
@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 @@ def test_insert(self):
@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 @@ def test_push_with_keymap_in_keymap(self, mock_keymap):
@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 @@ def test_push_with_keymap_in_keymap_and_escape(self, mock_keymap):
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 @@ def test_push_special_key(self):
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("[")