diff --git a/keymapper/X.py b/keymapper/X.py index 4dbe4f32..c9932cab 100644 --- a/keymapper/X.py +++ b/keymapper/X.py @@ -91,10 +91,11 @@ class Mapping: Parameters ---------- previous_keycode : int or None + If None, will not remove any previous mapping. new_keycode : int character : string """ - if new_keycode and character and new_keycode != previous_keycode: + if new_keycode and character: self._mapping[new_keycode] = character if new_keycode != previous_keycode: # clear previous mapping of that code, because the line @@ -113,21 +114,6 @@ class Mapping: if self._mapping.get(keycode) is not None: del self._mapping[keycode] - def add(self, keycode, character): - """Add a mapping for a hardware key to a character. - - Parameters - ---------- - keycode : int - character : string - """ - if self._mapping.get(keycode) is not None: - raise KeyError( - f'Keycode {keycode} is already mapped ' - f'to {self._mapping.get(keycode)}' - ) - self._mapping[keycode] = character - def get(self, keycode): """Read the character that is mapped to this keycode. diff --git a/tests/testcases/X.py b/tests/testcases/X.py index e9426266..f9ddc688 100644 --- a/tests/testcases/X.py +++ b/tests/testcases/X.py @@ -21,10 +21,50 @@ import unittest +from keymapper.X import Mapping -class TestX(unittest.TestCase): - # TODO test the mapping object - pass + +class TestMapping(unittest.TestCase): + def setUp(self): + self.mapping = Mapping() + + def test_change(self): + # 1 is not assigned yet, just add it + self.mapping.change(1, 2, 'a') + self.assertIsNone(self.mapping.get(1)) + self.assertEqual(self.mapping.get(2), 'a') + self.assertEqual(len(self.mapping), 1) + + # change 2 to 3 and change a to b + self.mapping.change(2, 3, 'b') + self.assertIsNone(self.mapping.get(2)) + self.assertEqual(self.mapping.get(3), 'b') + self.assertEqual(len(self.mapping), 1) + + # add 4 + self.mapping.change(None, 4, 'c') + self.assertEqual(self.mapping.get(3), 'b') + self.assertEqual(self.mapping.get(4), 'c') + self.assertEqual(len(self.mapping), 2) + + # change the mapping of 4 to d + self.mapping.change(None, 4, 'd') + self.assertEqual(self.mapping.get(4), 'd') + self.assertEqual(len(self.mapping), 2) + + # this also works in the same way + self.mapping.change(4, 4, 'e') + self.assertEqual(self.mapping.get(4), 'e') + self.assertEqual(len(self.mapping), 2) + + def test_clear(self): + self.mapping.change(None, 10, 'NUM1') + self.mapping.change(None, 20, 'NUM2') + self.mapping.change(None, 30, 'NUM3') + self.mapping.clear(20) + self.assertEqual(self.mapping.get(10), 'NUM1') + self.assertIsNone(self.mapping.get(20)) + self.assertEqual(self.mapping.get(30), 'NUM3') if __name__ == "__main__":