# vim: ft=python fileencoding=utf-8 sw=4 et sts=4 """Tests eventhandler.py for vimiv's test suite.""" from unittest import main from gi import require_version require_version("Gtk", "3.0") from gi.repository import Gdk, Gtk from vimiv_testcase import VimivTestCase, refresh_gui class KeyHandlerTest(VimivTestCase): """KeyHandler Tests.""" @classmethod def setUpClass(cls): cls.init_test(cls, ["vimiv/testimages/"]) def test_key_press(self): """Press key.""" self.vimiv["library"].file_select(None, Gtk.TreePath(1), None, True) image_before = self.vimiv.get_path() event = Gdk.Event().new(Gdk.EventType.KEY_PRESS) event.keyval = Gdk.keyval_from_name("n") self.vimiv["main_window"].emit("key_press_event", event) image_after = self.vimiv.get_path() self.assertNotEqual(image_before, image_after) event.keyval = Gdk.keyval_from_name("O") self.vimiv["main_window"].emit("key_press_event", event) self.assertTrue(self.vimiv["library"].is_focus()) def test_button_click(self): """Click mouse button.""" self.vimiv["library"].file_select(None, Gtk.TreePath(1), None, True) image_before = self.vimiv.get_path() event = Gdk.Event().new(Gdk.EventType.BUTTON_PRESS) event.button = 1 self.vimiv["window"].emit("button_press_event", event) image_after = self.vimiv.get_path() self.assertNotEqual(image_before, image_after) # Double click should not work event = Gdk.Event().new(Gdk.EventType.DOUBLE_BUTTON_PRESS) event.button = 1 self.vimiv["window"].emit("button_press_event", event) self.assertEqual(image_after, self.vimiv.get_path()) # Focus library via mouse click event = Gdk.Event().new(Gdk.EventType.BUTTON_PRESS) event.button = 2 self.vimiv["window"].emit("button_press_event", event) self.assertTrue(self.vimiv["library"].is_focus()) def test_add_number(self): """Add number to the numstr and clear it.""" self.assertFalse(self.vimiv["eventhandler"].get_num_str()) # Add a number self.vimiv["eventhandler"].num_append("2") self.assertEqual(self.vimiv["eventhandler"].get_num_str(), "2") # Add another number, should change the timer_id self.vimiv["eventhandler"].num_append("3") self.assertEqual(self.vimiv["eventhandler"].get_num_str(), "23") # Clear manually, GLib timeout should definitely work as well if the # code runs without errors self.vimiv["eventhandler"].num_clear() self.assertFalse(self.vimiv["eventhandler"].get_num_str()) def test_receive_number(self): """Get a number from numstr and clear it.""" # Integer self.vimiv["eventhandler"].num_append("3") num = self.vimiv["eventhandler"].num_receive() self.assertEqual(num, 3) self.assertFalse(self.vimiv["eventhandler"].get_num_str()) # Float self.vimiv["eventhandler"].num_append("03") num = self.vimiv["eventhandler"].num_receive(to_float=True) self.assertEqual(num, 0.3) self.assertFalse(self.vimiv["eventhandler"].get_num_str()) # Empty should give default num = self.vimiv["eventhandler"].num_receive() self.assertEqual(num, 1) num = self.vimiv["eventhandler"].num_receive(5) self.assertEqual(num, 5) def test_add_number_via_keypress(self): """Add a number to the numstr by keypress.""" self.assertFalse(self.vimiv["eventhandler"].get_num_str()) event = Gdk.Event().new(Gdk.EventType.KEY_PRESS) event.keyval = Gdk.keyval_from_name("2") self.vimiv["library"].emit("key_press_event", event) self.assertEqual(self.vimiv["eventhandler"].get_num_str(), "2") # Clear as it might interfere self.vimiv["eventhandler"].num_clear() def test_key_press_modifier(self): """Press key with modifier.""" before = self.settings["show_hidden"].get_value() event = Gdk.Event().new(Gdk.EventType.KEY_PRESS) event.keyval = Gdk.keyval_from_name("h") event.state = Gdk.ModifierType.CONTROL_MASK self.vimiv["library"].emit("key_press_event", event) after = self.settings["show_hidden"].get_value() self.assertNotEqual(before, after) def test_touch(self): """Touch event.""" self.vimiv["library"].file_select(None, Gtk.TreePath(1), None, True) image_before = self.vimiv.get_path() event = Gdk.Event().new(Gdk.EventType.TOUCH_BEGIN) # Twice to check for exception self.vimiv["window"].emit("touch-event", event) self.vimiv["window"].emit("touch-event", event) image_after = self.vimiv.get_path() self.assertEqual(image_before, image_after) # Touch only disables self.vimiv["library"].toggle() self.assertTrue(self.vimiv["library"].is_focus()) refresh_gui() # Test again to see if it was re-activated properly self.test_button_click() if __name__ == "__main__": main()