mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			103 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | 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()) |