Skip to content

Commit f174962

Browse files
committed
gh-111201: Add more tests to test_pyrepl to cover key translation
1 parent afbe5bf commit f174962

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

Lib/test/test_pyrepl.py

+98
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from _pyrepl.readline import ReadlineAlikeReader, ReadlineConfig
2424
from _pyrepl.simple_interact import _strip_final_indent
2525
from _pyrepl.unix_eventqueue import EventQueue
26+
from _pyrepl.input import KeymapTranslator
2627

2728

2829
def more_lines(unicodetext, namespace=None):
@@ -931,6 +932,103 @@ def test_setpos_fromxy_in_wrapped_line(self):
931932
reader.setpos_from_xy(0, 1)
932933
self.assertEqual(reader.pos, 9)
933934

935+
class KeymapTranslatorTests(unittest.TestCase):
936+
def test_push_single_key(self):
937+
keymap = [("a", "command_a")]
938+
translator = KeymapTranslator(keymap)
939+
evt = Event("key", "a")
940+
translator.push(evt)
941+
result = translator.get()
942+
self.assertEqual(result, ("command_a", ["a"]))
943+
944+
def test_push_multiple_keys(self):
945+
keymap = [("ab", "command_ab")]
946+
translator = KeymapTranslator(keymap)
947+
evt1 = Event("key", "a")
948+
evt2 = Event("key", "b")
949+
translator.push(evt1)
950+
translator.push(evt2)
951+
result = translator.get()
952+
self.assertEqual(result, ("command_ab", ["a", "b"]))
953+
954+
def test_push_invalid_key(self):
955+
keymap = [("a", "command_a")]
956+
translator = KeymapTranslator(keymap)
957+
evt = Event("key", "b")
958+
translator.push(evt)
959+
result = translator.get()
960+
self.assertEqual(result, (None, ["b"]))
961+
962+
def test_push_invalid_key_with_stack(self):
963+
keymap = [("ab", "command_ab")]
964+
translator = KeymapTranslator(keymap)
965+
evt1 = Event("key", "a")
966+
evt2 = Event("key", "c")
967+
translator.push(evt1)
968+
translator.push(evt2)
969+
result = translator.get()
970+
self.assertEqual(result, (None, ["a", "c"]))
971+
972+
def test_push_character_key(self):
973+
keymap = [("a", "command_a")]
974+
translator = KeymapTranslator(keymap)
975+
evt = Event("key", "a")
976+
translator.push(evt)
977+
result = translator.get()
978+
self.assertEqual(result, ("command_a", ["a"]))
979+
980+
def test_push_character_key_with_stack(self):
981+
keymap = [("ab", "command_ab")]
982+
translator = KeymapTranslator(keymap)
983+
evt1 = Event("key", "a")
984+
evt2 = Event("key", "b")
985+
evt3 = Event("key", "c")
986+
translator.push(evt1)
987+
translator.push(evt2)
988+
translator.push(evt3)
989+
result = translator.get()
990+
self.assertEqual(result, ("command_ab", ["a", "b"]))
991+
992+
def test_push_transition_key(self):
993+
keymap = [("a", {"b": "command_ab"})]
994+
translator = KeymapTranslator(keymap)
995+
evt1 = Event("key", "a")
996+
evt2 = Event("key", "b")
997+
translator.push(evt1)
998+
translator.push(evt2)
999+
result = translator.get()
1000+
self.assertEqual(result, ("command_ab", ["a", "b"]))
1001+
1002+
def test_push_transition_key_interrupted(self):
1003+
keymap = [("a", {"b": "command_ab"})]
1004+
translator = KeymapTranslator(keymap)
1005+
evt1 = Event("key", "a")
1006+
evt2 = Event("key", "c")
1007+
evt3 = Event("key", "b")
1008+
translator.push(evt1)
1009+
translator.push(evt2)
1010+
translator.push(evt3)
1011+
result = translator.get()
1012+
self.assertEqual(result, (None, ["a", "c"]))
1013+
1014+
def test_push_invalid_key_with_unicode_category(self):
1015+
keymap = [("a", "command_a")]
1016+
translator = KeymapTranslator(keymap)
1017+
evt = Event("key", "\u0003") # Control character
1018+
translator.push(evt)
1019+
result = translator.get()
1020+
self.assertEqual(result, (None, ["\u0003"]))
1021+
1022+
def test_empty(self):
1023+
keymap = [("a", "command_a")]
1024+
translator = KeymapTranslator(keymap)
1025+
self.assertTrue(translator.empty())
1026+
evt = Event("key", "a")
1027+
translator.push(evt)
1028+
self.assertFalse(translator.empty())
1029+
translator.get()
1030+
self.assertTrue(translator.empty())
1031+
9341032

9351033
if __name__ == "__main__":
9361034
unittest.main()

0 commit comments

Comments
 (0)