trace('added event {event}', event=event)
self.events.append(event)
- def push(self, char: int | bytes) -> None:
+ def push(self, char: int | bytes | str) -> None:
"""
Processes a character by updating the buffer and handling special key mappings.
"""
ord_char = char if isinstance(char, int) else ord(char)
- char = bytes(bytearray((ord_char,)))
- self.buf.append(ord_char)
+ if ord_char > 255:
+ assert isinstance(char, str)
+ char = bytes(char.encode(self.encoding, "replace"))
+ self.buf.extend(char)
+ else:
+ char = bytes(bytearray((ord_char,)))
+ self.buf.append(ord_char)
+
if char in self.keymap:
if self.keymap is self.compiled_keymap:
# sanity check, buffer is empty when a special key comes
self.assertEqual(eq.events[2].evt, "key")
self.assertEqual(eq.events[2].data, "Z")
+ def test_push_unicode_character(self):
+ eq = self.make_eventqueue()
+ eq.keymap = {}
+ eq.push("ч")
+ self.assertEqual(eq.events[0].evt, "key")
+ self.assertEqual(eq.events[0].data, "ч")
+
@unittest.skipIf(support.MS_WINDOWS, "No Unix event queue on Windows")
class TestUnixEventQueue(EventQueueTestBase, unittest.TestCase):