import unittest from _pyrepl.console import Event from _pyrepl.input import KeymapTranslator class KeymapTranslatorTests(unittest.TestCase): def test_push_single_key(self): keymap = [("a", "command_a")] translator = KeymapTranslator(keymap) evt = Event("key", "a") translator.push(evt) result = translator.get() self.assertEqual(result, ("command_a", ["a"])) def test_push_multiple_keys(self): keymap = [("ab", "command_ab")] translator = KeymapTranslator(keymap) evt1 = Event("key", "a") evt2 = Event("key", "b") translator.push(evt1) translator.push(evt2) result = translator.get() self.assertEqual(result, ("command_ab", ["a", "b"])) def test_push_invalid_key(self): keymap = [("a", "command_a")] translator = KeymapTranslator(keymap) evt = Event("key", "b") translator.push(evt) result = translator.get() self.assertEqual(result, (None, ["b"])) def test_push_invalid_key_with_stack(self): keymap = [("ab", "command_ab")] translator = KeymapTranslator(keymap) evt1 = Event("key", "a") evt2 = Event("key", "c") translator.push(evt1) translator.push(evt2) result = translator.get() self.assertEqual(result, (None, ["a", "c"])) def test_push_character_key(self): keymap = [("a", "command_a")] translator = KeymapTranslator(keymap) evt = Event("key", "a") translator.push(evt) result = translator.get() self.assertEqual(result, ("command_a", ["a"])) def test_push_character_key_with_stack(self): keymap = [("ab", "command_ab")] translator = KeymapTranslator(keymap) evt1 = Event("key", "a") evt2 = Event("key", "b") evt3 = Event("key", "c") translator.push(evt1) translator.push(evt2) translator.push(evt3) result = translator.get() self.assertEqual(result, ("command_ab", ["a", "b"])) def test_push_transition_key(self): keymap = [("a", {"b": "command_ab"})] translator = KeymapTranslator(keymap) evt1 = Event("key", "a") evt2 = Event("key", "b") translator.push(evt1) translator.push(evt2) result = translator.get() self.assertEqual(result, ("command_ab", ["a", "b"])) def test_push_transition_key_interrupted(self): keymap = [("a", {"b": "command_ab"})] translator = KeymapTranslator(keymap) evt1 = Event("key", "a") evt2 = Event("key", "c") evt3 = Event("key", "b") translator.push(evt1) translator.push(evt2) translator.push(evt3) result = translator.get() self.assertEqual(result, (None, ["a", "c"])) def test_push_invalid_key_with_unicode_category(self): keymap = [("a", "command_a")] translator = KeymapTranslator(keymap) evt = Event("key", "\u0003") # Control character translator.push(evt) result = translator.get() self.assertEqual(result, (None, ["\u0003"])) def test_empty(self): keymap = [("a", "command_a")] translator = KeymapTranslator(keymap) self.assertTrue(translator.empty()) evt = Event("key", "a") translator.push(evt) self.assertFalse(translator.empty()) translator.get() self.assertTrue(translator.empty())