def test_handle_scrollwheel(self, mock_get_scroll): """Scroll wheel produces events.""" pipe = mock.MagicMock() listener = inputs.QuartzMouseBaseListener(pipe) # We begin with no evdev events self.assertEqual(listener.events, []) # We (pretend that we) have a Quartz event event = mock.MagicMock() # Let's call the method that we care about listener.handle_scrollwheel(event) # Now let's see what happened # get_scroll was called mock_get_scroll.assert_called_once() # Do we have events self.assertEqual(len(listener.events), 2) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (2, 6, 2)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (2, 8, 2))
def test_handle_relative(self, mock_get_deltas): """Relative position is processed.""" pipe = mock.MagicMock() listener = inputs.AppKitMouseBaseListener(pipe) # Events begin empty self.assertEqual(listener.events, []) event = mock.MagicMock() # Run the method under test listener.handle_relative(event) # Check that we have events self.assertEqual(len(listener.events), 3) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (2, 0, 5)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (2, 1, 5)) third_event = next(inputs.iter_unpack( listener.events[2])) self.assertEqual(third_event[2:], (2, 2, 5)) mock_get_deltas.assert_called_once_with(event)
def test_handle_relative(self, mock_get_relative): """Relative mouse movement produces events.""" pipe = mock.MagicMock() listener = inputs.QuartzMouseBaseListener(pipe) # We begin with no evdev events self.assertEqual(listener.events, []) # We have a Quartz event event = mock.MagicMock() # Let's call the method that we care about listener.handle_relative(event) # Now let's see what happened # get_relative was called mock_get_relative.assert_called_once() # Do we have events self.assertEqual(len(listener.events), 2) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (2, 0, 600)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (2, 1, 400))
def test_handle_middle_button(self, mock_get_mouse_button_number, mock_get_click_state): """Convert quartz events to evdev events.""" pipe = mock.MagicMock() listener = inputs.QuartzMouseBaseListener(pipe) # We begin with no events self.assertEqual(listener.events, []) event = mock.MagicMock() listener.handle_button(event, 26) # _get_mouse_button_number was called mock_get_mouse_button_number.assert_called_once() # get_click_state was called mock_get_click_state.assert_called_once() # Now there are three events self.assertEqual(len(listener.events), 3) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (4, 4, 589827)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (1, 274, 0)) third_event = next(inputs.iter_unpack( listener.events[2])) self.assertEqual(third_event[2:], (20, 2, 1))
def test_emulate_abs(self): """Returns absolute mouse event.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) x_list, y_list = listener.emulate_abs(1324, 246, (100, 1)) x_info = next(inputs.iter_unpack(x_list)) self.assertEqual(x_info, (100, 1, 3, 0, 1324)) y_info = next(inputs.iter_unpack(y_list)) self.assertEqual(y_info, (100, 1, 3, 1, 246))
def test_emulate_wheel_x(self): """Returns an event list for the x mouse wheel turn.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.emulate_wheel(20, 'x', (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 6, 20)) eventlist = listener.emulate_wheel(-20, 'x', (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 6, -20))
def test_sync_marker(self): """Returns a sync marker.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) sync_list = listener.sync_marker((100, 1)) sync_info = next(inputs.iter_unpack(sync_list)) self.assertEqual(sync_info, (100, 1, 0, 0, 0)) sync_list = listener.sync_marker((200, 2)) sync_info = next(inputs.iter_unpack(sync_list)) self.assertEqual(sync_info, (200, 2, 0, 0, 0))
def test_emulate_press_up(self): """Returns an event list for button.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) scan_list, button_list = listener.emulate_press( 272, 589825, 0, (100, 1)) scan_info = next(inputs.iter_unpack(scan_list)) button_info = next(inputs.iter_unpack(button_list)) self.assertEqual(scan_info, (100, 1, 4, 4, 589825)) self.assertEqual(button_info, (100, 1, 1, 272, 0))
def test_emulate_wheel_win(self): """Returns an event list for the mouse wheel turn on Windows.""" inputs.WIN = True pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.emulate_wheel(240, 'x', (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 6, 2)) eventlist = listener.emulate_wheel(-240, 'x', (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 6, -2)) inputs.WIN = False
def test_handle_button(self, mock_get_mouse_button_number): """Mouse click produces an event.""" pipe = mock.MagicMock() listener = inputs.AppKitMouseBaseListener(pipe) # Events begin empty self.assertEqual(listener.events, []) event = mock.MagicMock(return_value=1) listener.handle_button(event, 25) self.assertEqual(len(listener.events), 2) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (4, 4, 589827)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (1, 274, 1))
def test_emulate_repeat(self): """Returns a repeat event, e.g. doubleclick, triple click.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) repeat_list = listener.emulate_repeat(1, (100, 1)) repeat_info = next(inputs.iter_unpack(repeat_list)) self.assertEqual(repeat_info, (100, 1, 20, 2, 1)) repeat_list = listener.emulate_repeat(2, (100, 1)) repeat_info = next(inputs.iter_unpack(repeat_list)) self.assertEqual(repeat_info, (100, 1, 20, 2, 2)) repeat_list = listener.emulate_repeat(3, (100, 1)) repeat_info = next(inputs.iter_unpack(repeat_list)) self.assertEqual(repeat_info, (100, 1, 20, 2, 3))
def test_create_key_event_object(self): """It should create an evdev object.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.create_event_object("Key", 30, 1, (100, 0)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 0, 1, 30, 1))
def test_create_mouse_event_object(self): """It also should create an evdev object.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.create_event_object("Absolute", 0, 285, (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 3, 0, 285))
def _do_iter(self): read_size = self._get_total_read_size() data = self._get_data(read_size) if not data: time.sleep(0.0001) return None evdev_objects = iter_unpack(data) events = [self._make_event(*event) for event in evdev_objects] return events
def test_create_ev_wo_timeval(self): """It should create an evdev object.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.create_event_object("Key", 30, 1) event_info = next(inputs.iter_unpack(eventlist)) self.assertTrue(event_info[0] > 0) self.assertTrue(event_info[1] > 0) self.assertEqual(event_info[2:], (1, 30, 1))
def test_emulate_rel(self): """Returns an event list for relative mouse movement.""" pipe = mock.MagicMock() listener = inputs.BaseListener(pipe) eventlist = listener.emulate_rel(0, 1, (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 0, 1)) eventlist = listener.emulate_rel(0, -5, (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 0, -5)) eventlist = listener.emulate_rel(1, 44, (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 1, 44)) eventlist = listener.emulate_rel(1, -10, (100, 1)) event_info = next(inputs.iter_unpack(eventlist)) self.assertEqual(event_info, (100, 1, 2, 1, -10))
def test_led_make_event(self, mock_write_device): """inputs.LED._make_event sends an event to the write device.""" led = inputs.LED(None, PATH, NAME) led._make_event(1, 2, 3) self.assertEqual(len(mock_write_device.method_calls), 2) flush_call = mock_write_device.method_calls[1] self.assertEqual(flush_call[0], 'flush') write_call = mock_write_device.method_calls[0] self.assertEqual(write_call[0], 'write') eventlist = write_call[1][0] event_info = next(inputs.iter_unpack(eventlist)) self.assertTrue(event_info[0] > 0) self.assertTrue(event_info[1] > 0) self.assertEqual(event_info[2:], (1, 2, 3))
def test_sled_make_event(self, mock_write_device): """inputs.SLED._make_event sends an event to the write device.""" manager = setup_mock_manager() led = inputs.SystemLED(manager, SLED_PATH, SLED_NAME) led._make_event(1) self.assertEqual(len(mock_write_device.method_calls), 2) flush_call = mock_write_device.method_calls[1] self.assertEqual(flush_call[0], 'flush') write_call = mock_write_device.method_calls[0] self.assertEqual(write_call[0], 'write') eventlist = write_call[1][0] event_info = next(inputs.iter_unpack(eventlist)) self.assertTrue(event_info[0] > 0) self.assertTrue(event_info[1] > 0) self.assertEqual(event_info[2:], (17, 1, 1))
def test_handle_absolute(self, mock_get_absolute): """Absolute mouse event is processed.""" pipe = mock.MagicMock() listener = inputs.AppKitMouseBaseListener(pipe) # Events begin empty self.assertEqual(listener.events, []) event = mock.MagicMock() # Run the method under test listener.handle_absolute(event) # Check that we have events self.assertEqual(len(listener.events), 2) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (3, 0, 600)) second_event = next(inputs.iter_unpack( listener.events[1])) self.assertEqual(second_event[2:], (3, 1, 400)) mock_get_absolute.assert_called_once_with(event)
def test_handle_input_unknown_code(self, mock_get_event_key_code, mock_get_event_type, mock_get_flags, mock_write_to_pipe): """Mac Keyboard events are processed.""" pipe = mock.MagicMock() listener = inputs.AppKitKeyboardListener(pipe) event = mock.MagicMock() listener.handle_input(event) self.assertEqual(len(listener.events), 3) event_info = inputs.iter_unpack(listener.events[1]) self.assertEqual(next(event_info)[2:], (1, 0, 1)) mock_get_event_key_code.assert_called_once_with(event) mock_get_event_type.assert_called_once_with(event) mock_write_to_pipe.assert_called_once_with(listener.events)
def test_handle_input(self, mock_handle_button, mock_handle_absolute, mock_handle_relative): """Input events from Quartz are handled with the correct method.""" pipe = mock.MagicMock() listener = inputs.QuartzMouseBaseListener(pipe) event = mock.MagicMock() listener.handle_input(None, 1, event, None) # So what happened? # The functions were called mock_handle_button.assert_called_once_with(event, 1) mock_handle_absolute.assert_called_once_with(event) mock_handle_relative.assert_called_once_with(event) # The sync marker was added self.assertEqual(len(listener.events), 1) first_event = next(inputs.iter_unpack( listener.events[0])) self.assertEqual(first_event[2:], (0, 0, 0))