8000 gh-111201: Add more tests to test_pyrepl to cover key translation · python/cpython@f174962 · GitHub
[go: up one dir, main page]

Skip to content
Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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

Lines changed: 98 additions & 0 deletions
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)
0