Пример #1
0
 def test_handle_response__action__is_ran(self, renderer, controller):
     response = mock.Mock()
     response.event = KeywordQueryEvent(Query('test'))
     renderer.active_event = response.event
     renderer.active_controller = controller
     renderer.handle_response(response, controller)
     response.action.run.assert_called_once_with()
Пример #2
0
    def test_is_enabled__controller_is_running__returns_true(self, extServer):
        controller = mock.create_autospec(ExtensionController)
        extServer.get_controller_by_keyword.return_value = controller
        mode = ExtensionSearchMode()
        query = Query('kw something')

        assert mode.is_enabled(query), 'Mode is not enabled'
Пример #3
0
    def test_is_enabled__keyword__is_used_to_get_controller(self, extServer):
        controller = mock.create_autospec(ExtensionController)
        extServer.get_controller_by_keyword.return_value = controller
        mode = ExtensionSearchMode()
        query = Query('kw something')
        mode.is_enabled(query)

        extServer.get_controller_by_keyword.assert_called_with('kw')
Пример #4
0
 def test_on_enter__run_without_arguments(self, item, ActionList,
                                          OpenUrlAction,
                                          SetUserQueryAction):
     item.run_without_argument = True
     assert item.on_enter(Query('kw')) is ActionList.return_value
     # it doesn't replace %s if run_without_argument = True
     OpenUrlAction.assert_called_once_with('http://site/?q=%s')
     assert not SetUserQueryAction.called
 def test_handle_query__handle_query__is_called(self, controller,
                                                result_renderer):
     query = Query('def ulauncher')
     controller.extension_id = 'test_extension'
     controller.manifest = mock.Mock()
     assert controller.handle_query(
         query) == result_renderer.handle_event.return_value
     result_renderer.handle_event.assert_called_with(mock.ANY, controller)
Пример #6
0
    def xtest_is_enabled__query_only_contains_keyword__returns_false(
            self, extServer):
        controller = mock.create_autospec(ExtensionController)
        extServer.get_controller_by_keyword.return_value = controller
        mode = ExtensionSearchMode()
        query = Query('kw')

        assert not mode.is_enabled(query), 'Mode is enabled'
 def test_handle_query__KeywordQueryEvent__is_sent_with_query(
         self, controller):
     query = Query('def ulauncher')
     controller.handle_query(query)
     keywordEvent = pickle.loads(
         controller.sendMessage.call_args_list[0][0][0])
     assert isinstance(keywordEvent, KeywordQueryEvent)
     assert keywordEvent.get_query() == 'def ulauncher'
Пример #8
0
 def test_on_enter(self, item, mocker, app_queries, app_stat_db):
     LaunchAppAction = mocker.patch(
         'ulauncher.search.apps.AppResultItem.LaunchAppAction')
     assert item.on_enter(Query('query')) is LaunchAppAction.return_value
     LaunchAppAction.assert_called_with('path/to/desktop_file.desktop')
     app_queries.put.assert_called_with('query', 'TestAppResultItem')
     app_queries.commit.assert_called_with()
     app_stat_db.inc_count.assert_called_with(
         'path/to/desktop_file.desktop')
Пример #9
0
 def test_handle_response__keep_app_open_is_False__hide_is_called(
         self, renderer, controller, GLib, mocker):
     UlauncherWindow = mocker.patch(
         'ulauncher.ui.windows.UlauncherWindow.UlauncherWindow')
     response = mock.Mock()
     response.event = KeywordQueryEvent(Query('test'))
     response.action.keep_app_open.return_value = False
     renderer.active_event = response.event
     renderer.active_controller = controller
     renderer.handle_response(response, controller)
     GLib.idle_add.assert_called_with(
         UlauncherWindow.get_instance.return_value.hide_and_clear_input)
Пример #10
0
 def get_name_highlighted(self, query: Query, color: str) -> Optional[str]:
     """
     :param ~ulauncher.search.Query.Query query:
     :param str color:
     :rtype: str
     """
     if query and self._highlightable:
         return highlight_text(
             query if not self._is_extension else query.get_argument(''),
             self.get_name(),
             open_tag='<span foreground="%s">' % color,
             close_tag='</span>')
     # don't highlight if query is empty
     return self.get_name()
Пример #11
0
 def test_on_enter(self, item, mocker, ActionList, OpenUrlAction,
                   SetUserQueryAction):
     assert item.on_enter(Query('kw test')) is ActionList.return_value
     OpenUrlAction.assert_called_once_with('http://site/?q=test')
     assert not SetUserQueryAction.called
Пример #12
0
 def test_get_description(self, item):
     assert item.get_description(Query('kw test')) == 'http://site/?q=test'
     assert item.get_description(
         Query('keyword test')) == 'http://site/?q=...'
     assert item.get_description(Query('goo')) == 'http://site/?q=...'
Пример #13
0
class ResultItemWidget(Gtk.EventBox):
    __gtype_name__ = "ResultItemWidget"

    shortcut = ''  # type: str
    index = 0  # type: int
    builder = None  # type: Any
    name = ''  # type: str
    query = Query('')  # type: Query
    item_object = None  # type: Any
    item_box = None  # type: Any

    def initialize(self, builder: Any, item_object: Any, index: int,
                   query: Query) -> None:
        self.builder = builder
        item_frame = self.builder.get_object('item-frame')
        item_frame.connect("button-release-event", self.on_click)
        item_frame.connect("enter_notify_event", self.on_mouse_hover)

        self.item_box = builder.get_object('item-box')
        self.item_object = item_object
        self.query = query
        self.set_index(index)

        self.set_icon(item_object.get_icon())
        self.set_description(item_object.get_description(query))
        self.set_name_highlighted()

    def set_index(self, index):
        """
        Set index for the item and assign shortcut
        """
        self.index = index
        # Alt+1..9, then Alt+a..z
        index_text = index + 1 if index < 9 else chr(97 + index - 9)
        self.shortcut = 'Alt+%s' % index_text
        self.set_shortcut(self.shortcut)

    def select(self):
        self.set_name_highlighted(True)
        self.item_box.get_style_context().add_class('selected')

    def deselect(self):
        self.set_name_highlighted(False)
        self.item_box.get_style_context().remove_class('selected')

    def set_icon(self, icon):
        """
        :param PixBuf icon:
        """
        if not icon:
            return

        iconWgt = self.builder.get_object('item-icon')
        scale_factor = get_monitor_scale_factor()

        if scale_factor == 1:
            iconWgt.set_from_pixbuf(icon)
            return

        try:
            surface = Gdk.cairo_surface_create_from_pixbuf(
                icon, scale_factor, self.get_window())
            iconWgt.set_from_surface(surface)
        except AttributeError:  # Fallback for GTK+ older than 3.10
            iconWgt.set_from_pixbuf(icon)

    def set_name_highlighted(self, is_selected: bool = False) -> None:
        colors = Theme.get_current().get_matched_text_hl_colors()
        color = colors['when_selected'] if is_selected else colors[
            'when_not_selected']
        self.set_name(
            self.item_object.get_name_highlighted(self.query, color)
            or self.item_object.get_name())

    # pylint: disable=arguments-differ
    def set_name(self, name: str) -> None:
        item = self.builder.get_object('item-name')
        if '<span' in name:  # dealing with markup
            item.set_markup(name)
        else:
            item.set_text(name)
        self.name = name

    def get_name(self):
        return self.name

    # pylint: disable=unused-argument
    def on_click(self, widget, event=None):
        self.get_toplevel().select_result_item(self.index)
        alt_enter = bool(event and event.button != 1)
        self.get_toplevel().enter_result_item(alt=alt_enter)

    def on_mouse_hover(self, widget, event):
        self.get_toplevel().select_result_item(self.index, onHover=True)

    def set_description(self, description):
        description_obj = self.builder.get_object('item-descr')
        if not description_obj:
            return

        if description:
            description_obj.set_text(description)
        else:
            description_obj.destroy()  # remove description label
            self.builder.get_object('item-name').set_margin_top(
                8)  # shift name label down to the center

    def set_shortcut(self, text):
        self.builder.get_object('item-shortcut').set_text(text)

    def on_enter(self, query):
        return self.item_object.on_enter(query)

    def on_alt_enter(self, query):
        return self.item_object.on_alt_enter(query)

    def get_keyword(self):
        return self.item_object.get_keyword()

    def selected_by_default(self, query):
        return self.item_object.selected_by_default(query)
Пример #14
0
 def test_get_argument(self):
     assert Query('kw arg text').get_argument() == 'arg text'
     assert not Query('kw').get_argument()
     assert not Query('').get_argument()
Пример #15
0
 def test_on_enter__run_file(self, ActionList, RunScriptAction):
     item = ShortcutResultItem('kw', 'name', '/usr/bin/something',
                               'icon_path')
     assert item.on_enter(Query('kw query')) is ActionList.return_value
     RunScriptAction.assert_called_once_with('/usr/bin/something', 'query')
Пример #16
0
 def test_is_mode_active(self):
     assert not Query('kw').is_mode_active()
     assert Query('kw ').is_mode_active()
     assert Query('kw arg').is_mode_active()
Пример #17
0
 def test_get_description(self, item):
     assert item.get_description(
         Query('q')) == 'Description of TestAppResultItem'
Пример #18
0
 def _get_user_query(self):
     # get_text() returns str, so we need to convert it to unicode
     return Query(force_unicode(self.input.get_text()))
Пример #19
0
 def test_on_enter__default_search(self, item, mocker, ActionList,
                                   OpenUrlAction, SetUserQueryAction):
     item.is_default_search = True
     assert item.on_enter(Query('search query')) is ActionList.return_value
     OpenUrlAction.assert_called_once_with('http://site/?q=search query')
     assert not SetUserQueryAction.called
Пример #20
0
 def query(self, query: str):
     query = Query("ti " + query)
     query_event = KeywordQueryEvent(query)
     self.timer.trigger_event(query_event)
     results = self.client.response.action.result_list
     return [ResultItem(item, query, self) for item in results]
Пример #21
0
 def test_on_enter__misspelled_kw(self, item, mocker, ActionList,
                                  OpenUrlAction, SetUserQueryAction):
     assert item.on_enter(Query('keyword query')) is ActionList.return_value
     assert not OpenUrlAction.called
     SetUserQueryAction.assert_called_once_with('kw ')
Пример #22
0
 def test_get_keyword(self):
     assert Query('kw arg').get_keyword() == 'kw'
     assert Query('kw').get_keyword() == 'kw'
     assert not Query('').get_keyword()
Пример #23
0
 def _get_user_query(self):
     return Query(self.input.get_text())
Пример #24
0
 def test_on_enter__save_query_to_history(self, item, query_history):
     item.on_enter(Query('my-query'))
     query_history.save_query.assert_called_once_with('my-query', 'name')