• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import unittest
2
3from _pyrepl.console import Event
4from _pyrepl.input import KeymapTranslator
5
6
7class KeymapTranslatorTests(unittest.TestCase):
8    def test_push_single_key(self):
9        keymap = [("a", "command_a")]
10        translator = KeymapTranslator(keymap)
11        evt = Event("key", "a")
12        translator.push(evt)
13        result = translator.get()
14        self.assertEqual(result, ("command_a", ["a"]))
15
16    def test_push_multiple_keys(self):
17        keymap = [("ab", "command_ab")]
18        translator = KeymapTranslator(keymap)
19        evt1 = Event("key", "a")
20        evt2 = Event("key", "b")
21        translator.push(evt1)
22        translator.push(evt2)
23        result = translator.get()
24        self.assertEqual(result, ("command_ab", ["a", "b"]))
25
26    def test_push_invalid_key(self):
27        keymap = [("a", "command_a")]
28        translator = KeymapTranslator(keymap)
29        evt = Event("key", "b")
30        translator.push(evt)
31        result = translator.get()
32        self.assertEqual(result, (None, ["b"]))
33
34    def test_push_invalid_key_with_stack(self):
35        keymap = [("ab", "command_ab")]
36        translator = KeymapTranslator(keymap)
37        evt1 = Event("key", "a")
38        evt2 = Event("key", "c")
39        translator.push(evt1)
40        translator.push(evt2)
41        result = translator.get()
42        self.assertEqual(result, (None, ["a", "c"]))
43
44    def test_push_character_key(self):
45        keymap = [("a", "command_a")]
46        translator = KeymapTranslator(keymap)
47        evt = Event("key", "a")
48        translator.push(evt)
49        result = translator.get()
50        self.assertEqual(result, ("command_a", ["a"]))
51
52    def test_push_character_key_with_stack(self):
53        keymap = [("ab", "command_ab")]
54        translator = KeymapTranslator(keymap)
55        evt1 = Event("key", "a")
56        evt2 = Event("key", "b")
57        evt3 = Event("key", "c")
58        translator.push(evt1)
59        translator.push(evt2)
60        translator.push(evt3)
61        result = translator.get()
62        self.assertEqual(result, ("command_ab", ["a", "b"]))
63
64    def test_push_transition_key(self):
65        keymap = [("a", {"b": "command_ab"})]
66        translator = KeymapTranslator(keymap)
67        evt1 = Event("key", "a")
68        evt2 = Event("key", "b")
69        translator.push(evt1)
70        translator.push(evt2)
71        result = translator.get()
72        self.assertEqual(result, ("command_ab", ["a", "b"]))
73
74    def test_push_transition_key_interrupted(self):
75        keymap = [("a", {"b": "command_ab"})]
76        translator = KeymapTranslator(keymap)
77        evt1 = Event("key", "a")
78        evt2 = Event("key", "c")
79        evt3 = Event("key", "b")
80        translator.push(evt1)
81        translator.push(evt2)
82        translator.push(evt3)
83        result = translator.get()
84        self.assertEqual(result, (None, ["a", "c"]))
85
86    def test_push_invalid_key_with_unicode_category(self):
87        keymap = [("a", "command_a")]
88        translator = KeymapTranslator(keymap)
89        evt = Event("key", "\u0003")  # Control character
90        translator.push(evt)
91        result = translator.get()
92        self.assertEqual(result, (None, ["\u0003"]))
93
94    def test_empty(self):
95        keymap = [("a", "command_a")]
96        translator = KeymapTranslator(keymap)
97        self.assertTrue(translator.empty())
98        evt = Event("key", "a")
99        translator.push(evt)
100        self.assertFalse(translator.empty())
101        translator.get()
102        self.assertTrue(translator.empty())
103