more tests

pull/14/head
sezanzeb 4 years ago
parent 6ff5c29d1e
commit 77ab8ba47b

@ -38,7 +38,7 @@ from keymapper.dev.reader import keycode_reader
from keymapper.daemon import get_dbus_interface from keymapper.daemon import get_dbus_interface
from keymapper.config import config from keymapper.config import config
from keymapper.dev.macros import is_this_a_macro, parse from keymapper.dev.macros import is_this_a_macro, parse
from keymapper.dev.permissions import can_read_devices from keymapper.dev import permissions
def gtk_iteration(): def gtk_iteration():
@ -110,14 +110,13 @@ class Window:
# already visible (without content) to make it look more responsive. # already visible (without content) to make it look more responsive.
gtk_iteration() gtk_iteration()
permission_errors = can_read_devices() permission_errors = permissions.can_read_devices()
if len(permission_errors) > 0: if len(permission_errors) > 0:
# TODO test cmd = 'sudo key-mapper-service --setup-permissions'
permission_errors = [( permission_errors = [(
'You can also try `sudo key-mapper-service --setup-permiss' f'You can also try `{cmd}` to setup all needed permissions '
'ions` to setup all needed permissions for you. All ' f'for you. All commands mentioned here are also printed to '
'commands mentioned here are also printed to the console ' f'the console for you to copy.'
'for you to copy.'
)] + permission_errors )] + permission_errors
self.show_status( self.show_status(
CTX_ERROR, CTX_ERROR,
@ -294,7 +293,6 @@ class Window:
def check_macro_syntax(self): def check_macro_syntax(self):
"""Check if the programmed macros are allright.""" """Check if the programmed macros are allright."""
# TODO test
for (ev_type, keycode), output in custom_mapping: for (ev_type, keycode), output in custom_mapping:
if not is_this_a_macro(output): if not is_this_a_macro(output):
continue continue

@ -37,10 +37,11 @@ gi.require_version('Gtk', '3.0')
from gi.repository import Gtk from gi.repository import Gtk
from keymapper.state import custom_mapping, system_mapping from keymapper.state import custom_mapping, system_mapping
from keymapper.paths import CONFIG, get_config_path, USER from keymapper.paths import CONFIG, get_config_path
from keymapper.config import config from keymapper.config import config
from keymapper.dev.reader import keycode_reader from keymapper.dev.reader import keycode_reader
from keymapper.gtk.row import to_string from keymapper.gtk.row import to_string
from keymapper.dev import permissions
from tests.test import tmp, pending_events, InputEvent, uinput_write_history_pipe, \ from tests.test import tmp, pending_events, InputEvent, uinput_write_history_pipe, \
clear_write_history clear_write_history
@ -382,6 +383,22 @@ class TestIntegration(unittest.TestCase):
self.assertTrue(os.path.exists(f'{CONFIG}/device 1/asdf.json')) self.assertTrue(os.path.exists(f'{CONFIG}/device 1/asdf.json'))
self.assertEqual(custom_mapping.get_character(EV_KEY, 14), 'b') self.assertEqual(custom_mapping.get_character(EV_KEY, 14), 'b')
def test_check_macro_syntax(self):
status = self.window.get('status_bar')
custom_mapping.change((EV_KEY, 9), 'k(1))', (None, None))
self.window.on_save_preset_clicked(None)
tooltip = status.get_tooltip_text().lower()
self.assertIn('brackets', tooltip)
custom_mapping.change((EV_KEY, 9), 'k(1)', (None, None))
self.window.on_save_preset_clicked(None)
tooltip = status.get_tooltip_text().lower()
self.assertNotIn('brackets', tooltip)
self.assertIn('saved', tooltip)
self.assertEqual(custom_mapping.get_character(EV_KEY, 9), 'k(1)')
def test_select_device_and_preset(self): def test_select_device_and_preset(self):
# created on start because the first device is selected and some empty # created on start because the first device is selected and some empty
# preset prepared. # preset prepared.
@ -505,76 +522,48 @@ class TestIntegration(unittest.TestCase):
original_access = os.access original_access = os.access
original_getgrnam = grp.getgrnam original_getgrnam = grp.getgrnam
original_can_read_devices = permissions.can_read_devices
class TestPermissions(unittest.TestCase): class TestPermissions(unittest.TestCase):
def tearDown(self): def tearDown(self):
os.access = original_access os.access = original_access
os.getgrnam = original_getgrnam os.getgrnam = original_getgrnam
permissions.can_read_devices = original_can_read_devices
self.window.on_close() if self.window is not None:
self.window.window.destroy() self.window.on_close()
gtk_iteration() self.window.window.destroy()
shutil.rmtree('/tmp/key-mapper-test') gtk_iteration()
self.window = None
def test_check_groups_missing(self):
# TODO modify test
class Grnam:
def __init__(self, group):
self.gr_mem = []
grp.getgrnam = Grnam
self.window = launch()
status = self.window.get('status_bar')
labels = '' shutil.rmtree('/tmp/key-mapper-test')
for label in status.get_message_area():
labels += label.get_text()
self.assertIn('input', labels)
self.assertIn('plugdev', labels)
def test_check_plugdev_missing(self): def test_fails(self):
# TODO modify test def fake():
class Grnam: return ['error1', 'error2', 'error3']
def __init__(self, group):
if group == 'input':
self.gr_mem = [USER]
else:
self.gr_mem = []
grp.getgrnam = Grnam permissions.can_read_devices = fake
self.window = launch() self.window = launch()
status = self.window.get('status_bar') status = self.window.get('status_bar')
labels = '' tooltip = status.get_tooltip_text()
for label in status.get_message_area(): self.assertIn('sudo key-mapper-service --setup-permissions', tooltip)
labels += label.get_text() self.assertIn('error1', tooltip)
self.assertNotIn('input', labels) self.assertIn('error2', tooltip)
self.assertIn('plugdev', labels) self.assertIn('error3', tooltip)
def test_check_write_uinput(self):
# TODO modify test
class Grnam:
def __init__(self, group):
self.gr_mem = [USER]
grp.getgrnam = Grnam
def access(path, mode): def test_good(self):
return False def fake():
return []
os.access = access permissions.can_read_devices = fake
self.window = launch() self.window = launch()
status = self.window.get('status_bar') status = self.window.get('status_bar')
labels = '' self.assertIsNone(status.get_tooltip_text())
for label in status.get_message_area():
labels += label.get_text()
self.assertNotIn('plugdev', labels)
self.assertIn('Insufficient permissions on /dev/uinput', labels)
if __name__ == "__main__": if __name__ == "__main__":

@ -47,6 +47,8 @@ class TestKeycodeMapper(unittest.TestCase):
for key in keys: for key in keys:
del active_macros[key] del active_macros[key]
system_mapping.populate()
def test_should_map_event_as_btn(self): def test_should_map_event_as_btn(self):
self.assertTrue(should_map_event_as_btn(EV_ABS, ABS_HAT0X)) self.assertTrue(should_map_event_as_btn(EV_ABS, ABS_HAT0X))
self.assertTrue(should_map_event_as_btn(EV_KEY, KEY_A)) self.assertTrue(should_map_event_as_btn(EV_KEY, KEY_A))

Loading…
Cancel
Save