mirror of
https://github.com/lowobservable/oec.git
synced 2026-01-11 23:53:04 +00:00
212 lines
13 KiB
Python
212 lines
13 KiB
Python
import unittest
|
|
|
|
import context
|
|
|
|
from oec.keyboard import KeyboardModifiers, Key, Keymap, Keyboard, get_character_for_key
|
|
from oec.keymap_3278_typewriter import KEYMAP as KEYMAP_3278_TYPEWRITER
|
|
from oec.keymap_ibm_typewriter import KEYMAP as KEYMAP_IBM_TYPEWRITER
|
|
|
|
class KeyboardModifiersTestCase(unittest.TestCase):
|
|
def test_is_shift(self):
|
|
for modifiers in [KeyboardModifiers.LEFT_SHIFT, KeyboardModifiers.RIGHT_SHIFT, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.LEFT_ALT, KeyboardModifiers.RIGHT_SHIFT | KeyboardModifiers.CAPS_LOCK]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertTrue(modifiers.is_shift())
|
|
|
|
def test_not_is_shift(self):
|
|
for modifiers in [KeyboardModifiers.NONE, KeyboardModifiers.LEFT_ALT, KeyboardModifiers.RIGHT_ALT, KeyboardModifiers.CAPS_LOCK]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertFalse(modifiers.is_shift())
|
|
|
|
def test_is_alt(self):
|
|
for modifiers in [KeyboardModifiers.LEFT_ALT, KeyboardModifiers.RIGHT_ALT, KeyboardModifiers.LEFT_ALT | KeyboardModifiers.RIGHT_ALT, KeyboardModifiers.LEFT_ALT | KeyboardModifiers.LEFT_SHIFT, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.CAPS_LOCK]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertTrue(modifiers.is_alt())
|
|
|
|
def test_not_is_alt(self):
|
|
for modifiers in [KeyboardModifiers.NONE, KeyboardModifiers.LEFT_SHIFT, KeyboardModifiers.RIGHT_SHIFT, KeyboardModifiers.CAPS_LOCK]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertFalse(modifiers.is_alt())
|
|
|
|
def test_is_caps_lock(self):
|
|
for modifiers in [KeyboardModifiers.CAPS_LOCK, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_ALT]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertTrue(modifiers.is_caps_lock())
|
|
|
|
def test_not_is_caps_lock(self):
|
|
for modifiers in [KeyboardModifiers.NONE, KeyboardModifiers.LEFT_SHIFT, KeyboardModifiers.RIGHT_SHIFT, KeyboardModifiers.LEFT_ALT, KeyboardModifiers.RIGHT_ALT]:
|
|
with self.subTest(modifiers=input):
|
|
self.assertFalse(modifiers.is_caps_lock())
|
|
|
|
class KeyboardGetKeySingleModifierReleaseTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.keyboard = Keyboard(KEYMAP_IBM_TYPEWRITER)
|
|
|
|
def test_single_modifier_release_is_true(self):
|
|
self.assertTrue(self.keyboard.single_modifier_release)
|
|
|
|
def test_default(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(50, Key.LOWER_B, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(33, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(35, Key.LOWER_D, KeyboardModifiers.NONE, False)
|
|
|
|
def test_shift(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(18, Key.LEFT_SHIFT, KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(50, Key.UPPER_B, KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(89, Key.RIGHT_SHIFT, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, True)
|
|
self._assert_get_key(33, Key.UPPER_C, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(18, None, KeyboardModifiers.RIGHT_SHIFT, True)
|
|
self._assert_get_key(35, Key.UPPER_D, KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(89, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(36, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
# TODO... include the additional ALT reset scan_code!
|
|
|
|
def test_mapped_alt(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(57, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(50, Key.LOWER_B, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(57, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(33, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_unmapped_alt(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(57, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(50, Key.LOWER_B, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(57, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(33, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_alt_and_shift(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(57, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(50, Key.LOWER_B, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(18, Key.LEFT_SHIFT, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(33, Key.UPPER_C, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(18, None, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(35, Key.LOWER_D, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(57, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(36, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
def test_caps_lock(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(20, Key.CAPS_LOCK, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(240, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(20, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(50, Key.UPPER_B, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(20, Key.CAPS_LOCK, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(240, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(20, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(33, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_caps_lock_and_shift(self):
|
|
self._assert_get_key(28, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(20, Key.CAPS_LOCK, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(240, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(20, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(50, Key.UPPER_B, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(18, Key.LEFT_SHIFT, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(33, Key.LOWER_C, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(240, None, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(18, None, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(35, Key.UPPER_D, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(20, Key.CAPS_LOCK, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(240, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(20, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(36, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
def _assert_get_key(self, scan_code, key, modifiers, modifiers_changed):
|
|
self.assertEqual(self.keyboard.get_key(scan_code), (key, modifiers, modifiers_changed))
|
|
|
|
class KeyboardGetKeyMultipleModifierReleaseTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.keyboard = Keyboard(KEYMAP_3278_TYPEWRITER)
|
|
|
|
def test_single_modifier_release_is_false(self):
|
|
self.assertFalse(self.keyboard.single_modifier_release)
|
|
|
|
def test_default(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(97, Key.LOWER_B, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(98, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(99, Key.LOWER_D, KeyboardModifiers.NONE, False)
|
|
|
|
def test_shift(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(77, Key.LEFT_SHIFT, KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(97, Key.UPPER_B, KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(78, Key.RIGHT_SHIFT, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, True)
|
|
self._assert_get_key(98, Key.UPPER_C, KeyboardModifiers.LEFT_SHIFT | KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(205, None, KeyboardModifiers.RIGHT_SHIFT, True)
|
|
self._assert_get_key(99, Key.UPPER_D, KeyboardModifiers.RIGHT_SHIFT, False)
|
|
self._assert_get_key(206, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(100, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
# TODO... include the additional ALT reset scan_code!
|
|
|
|
def test_mapped_alt(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(79, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(33, Key.PF1, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(207, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(98, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_unmapped_alt(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(79, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(97, Key.LOWER_B, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(207, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(98, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_alt_and_shift(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(79, Key.RIGHT_ALT, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(97, Key.LOWER_B, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(77, Key.LEFT_SHIFT, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(98, Key.UPPER_C, KeyboardModifiers.RIGHT_ALT | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(205, None, KeyboardModifiers.RIGHT_ALT, True)
|
|
self._assert_get_key(99, Key.LOWER_D, KeyboardModifiers.RIGHT_ALT, False)
|
|
self._assert_get_key(207, None, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(100, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
def test_caps_lock(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(76, Key.CAPS_LOCK, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(204, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(97, Key.UPPER_B, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(76, Key.CAPS_LOCK, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(204, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(98, Key.LOWER_C, KeyboardModifiers.NONE, False)
|
|
|
|
def test_caps_lock_and_shift(self):
|
|
self._assert_get_key(96, Key.LOWER_A, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(76, Key.CAPS_LOCK, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(204, None, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(97, Key.UPPER_B, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(77, Key.LEFT_SHIFT, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, True)
|
|
self._assert_get_key(98, Key.LOWER_C, KeyboardModifiers.CAPS_LOCK | KeyboardModifiers.LEFT_SHIFT, False)
|
|
self._assert_get_key(205, None, KeyboardModifiers.CAPS_LOCK, True)
|
|
self._assert_get_key(99, Key.UPPER_D, KeyboardModifiers.CAPS_LOCK, False)
|
|
self._assert_get_key(76, Key.CAPS_LOCK, KeyboardModifiers.NONE, True)
|
|
self._assert_get_key(204, None, KeyboardModifiers.NONE, False)
|
|
self._assert_get_key(100, Key.LOWER_E, KeyboardModifiers.NONE, False)
|
|
|
|
def _assert_get_key(self, scan_code, key, modifiers, modifiers_changed):
|
|
self.assertEqual(self.keyboard.get_key(scan_code), (key, modifiers, modifiers_changed))
|
|
|
|
class GetCharacterForKeyTestCase(unittest.TestCase):
|
|
def test_none(self):
|
|
self.assertIsNone(get_character_for_key(None))
|
|
|
|
def test_no_mapping(self):
|
|
self.assertIsNone(get_character_for_key(Key.ATTN))
|
|
|
|
def test_mapping(self):
|
|
self.assertEqual(get_character_for_key(Key.UPPER_A), 'A')
|