Describe lsp#omni let g:lsp_get_vim_completion_item_set_kind = 1 Before each call lsp#omni#_clear_managed_user_data_map() End Describe lsp#omni#get_vim_completion_items It should return item with proper kind let item = { \ 'label': 'my-label', \ 'documentation': 'my documentation.', \ 'detail': 'my-detail', \ 'kind': '3' \} let options = { \ 'server': { 'name': 'dummy-server' }, \ 'position': lsp#get_position(), \ 'response': { 'result': [item] }, \} let want = { \ 'items': [{ \ 'word': 'my-label', \ 'abbr': 'my-label', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} Assert Equals(lsp#omni#get_vim_completion_items(options), want) End It should get user_data by the item if !has('patch-8.0.1493') Skip This test requires 'patch-8.0.1493' endif let item = { \ 'label': 'my-label', \ 'documentation': 'my documentation.', \ 'detail': 'my-detail', \ 'kind': '3', \ 'textEdit': { \ 'range': { \ 'start': {'line': 5, 'character': 0}, \ 'end': {'line': 5, 'character': 5} \ }, \ 'newText': 'yyy' \ } \} let options = { \ 'server': { 'name': 'dummy-server' }, \ 'position': { 'line': 1, 'character': 1 }, \ 'response': { 'result': [item] }, \} let want = { \ 'items': [{ \ 'word': 'yyy', \ 'abbr': 'my-label', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', {'line': 1, 'character': 0}), \} let got = lsp#omni#get_vim_completion_items(options) Assert Equals(got, want) Assert Equals(lsp#omni#get_managed_user_data_from_completed_item(got['items'][0]), { \ 'server_name': 'dummy-server', \ 'completion_item': item, \ 'complete_position': { 'line': 1, 'character': 1 }, \ 'start_character': 0, \ 'complete_word': 'yyy', \ }) End It should not raise errors let item = { \ 'label': 'my-label', \ 'textEdit': v:null, \} let options = { \ 'server': { 'name': 'dummy-server' }, \ 'position': lsp#get_position(), \ 'response': { 'result': [item] }, \} let want = { \ 'items': [{ \ 'word': 'my-label', \ 'abbr': 'my-label', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': '', \ 'user_data': '{"vim-lsp/key":"0"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} let got = lsp#omni#get_vim_completion_items(options) Assert Equals(got, want) let item = { \ 'label': 'my-label', \ 'textEdit': v:null, \ 'insertText': v:null, \} let options = { \ 'server': { 'name': 'dummy-server' }, \ 'position': lsp#get_position(), \ 'response': { 'result': [item] }, \} let want = { \ 'items': [{ \ 'word': 'my-label', \ 'abbr': 'my-label', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': '', \ 'user_data': '{"vim-lsp/key":"1"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} let got = lsp#omni#get_vim_completion_items(options) Assert Equals(got, want) End It should return correct items for snippets if !has('patch-8.0.1493') Skip This test requires 'patch-8.0.1493' endif let item = { \ "label": "sysout", \ "insertText": "System.out.println(${0});", \ "kind": 15, \ "insertTextFormat": 2, \ "documentation": "System.out.println();", \ "detail": "print to standard out" \ } let options = { \ 'server': { 'name': 'dummy-server' }, \ 'position': { 'line': 1, 'character': 1 }, \ 'response': { 'result': [item] }, \} let want = { \ 'items': [{ \ 'word': 'System.out.println', \ 'abbr': 'sysout~', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'snippet', \ 'user_data': '{"vim-lsp/key":"0"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', { 'line': 1, 'character': 1 }), \} let got = lsp#omni#get_vim_completion_items(options) Assert Equals(got, want) Assert Equals(lsp#omni#get_managed_user_data_from_completed_item(got['items'][0]), { \ 'server_name': 'dummy-server', \ 'completion_item': item, \ 'complete_position': { 'line': 1, 'character': 1 }, \ 'start_character': 0, \ 'complete_word': 'System.out.println(${0});', \ }) End It should sort by sortText let items = [{ \ 'label': 'my-label1', \ 'kind': '3', \ 'sortText': 'c' \}, \{ \ 'label': 'my-label2', \ 'kind': '3', \ 'sortText': 'a' \}, \{ \ 'label': 'my-label3', \ 'kind': '3', \ 'sortText': 'b' \}] let options = { \ 'server': { \ 'name': 'dummy-server', \ 'config': { \ 'sort': { 'max': 100 }, \ }, \ }, \ 'position': lsp#get_position(), \ 'response': { 'result': items }, \} let want = { \ 'items': [{ \ 'word': 'my-label2', \ 'abbr': 'my-label2', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }, \ { \ 'word': 'my-label3', \ 'abbr': 'my-label3', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"1"}', \ }, \ { \ 'word': 'my-label1', \ 'abbr': 'my-label1', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"2"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} Assert Equals(lsp#omni#get_vim_completion_items(options), want) End It should not sort over max let items = [{ \ 'label': 'my-label3', \ 'kind': '3', \ 'sortText': '3' \}, \{ \ 'label': 'my-label1', \ 'kind': '3', \ 'sortText': '1' \}, \{ \ 'label': 'my-label2', \ 'kind': '3', \ 'sortText': '2' \}] let options = { \ 'server': { \ 'name': 'dummy-server', \ 'config': { \ 'sort': { 'max': 2 }, \ }, \ }, \ 'position': lsp#get_position(), \ 'response': { 'result': items }, \} let want = { \ 'items': [{ \ 'word': 'my-label3', \ 'abbr': 'my-label3', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }, \ { \ 'word': 'my-label1', \ 'abbr': 'my-label1', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"1"}', \ }, \ { \ 'word': 'my-label2', \ 'abbr': 'my-label2', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"2"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} Assert Equals(lsp#omni#get_vim_completion_items(options), want) End It should sort by label(sortText not exists) let items = [{ \ 'label': 'my-label3', \ 'kind': '3', \}, \{ \ 'label': 'my-label1', \ 'kind': '3', \}, \{ \ 'label': 'my-label2', \ 'kind': '3', \}] let options = { \ 'server': { \ 'name': 'dummy-server', \ 'config': { \ 'sort': { 'max': 10 }, \ }, \ }, \ 'position': lsp#get_position(), \ 'response': { 'result': items }, \} let want = { \ 'items': [{ \ 'word': 'my-label1', \ 'abbr': 'my-label1', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }, \ { \ 'word': 'my-label2', \ 'abbr': 'my-label2', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"1"}', \ }, \ { \ 'word': 'my-label3', \ 'abbr': 'my-label3', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"2"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} Assert Equals(lsp#omni#get_vim_completion_items(options), want) End It should sort by label(empty sortText) let items = [{ \ 'label': 'my-label3', \ 'kind': '3', \ 'sortText': '' \}, \{ \ 'label': 'my-label1', \ 'kind': '3', \ 'sortText': '', \}, \{ \ 'label': 'my-label2', \ 'kind': '3', \ 'sortText': '', \}] let options = { \ 'server': { \ 'name': 'dummy-server', \ 'config': { \ 'sort': { 'max': 10 }, \ }, \ }, \ 'position': lsp#get_position(), \ 'response': { 'result': items }, \} let want = { \ 'items': [{ \ 'word': 'my-label1', \ 'abbr': 'my-label1', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \ }, \ { \ 'word': 'my-label2', \ 'abbr': 'my-label2', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"1"}', \ }, \ { \ 'word': 'my-label3', \ 'abbr': 'my-label3', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"2"}', \ }], \ 'incomplete': 0, \ 'startcol': lsp#utils#position#lsp_character_to_vim('%', lsp#get_position()), \} Assert Equals(lsp#omni#get_vim_completion_items(options), want) End Describe g:lsp_ignorecase Before all let saved_ignorecase = get(g:, 'lsp_ignorecase', v:null) End After all if saved_ignorecase isnot v:null let g:lsp_ignorecase = saved_ignorecase endif End It should sort completion items case-insensitive when true is set let g:lsp_ignorecase = v:true " 'B' < 'a' but 'a' < 'b' let result = [{ \ 'label': 'my-label1', \ 'kind': '3', \ 'sortText': 'B' \}, \{ \ 'label': 'my-label2', \ 'kind': '3', \ 'sortText': 'a' \}] let options = { \ 'server': { \ 'name': 'dummy-server', \ 'config': { \ 'sort': { 'max': 10 }, \ }, \ }, \ 'position': lsp#get_position(), \ 'response': { 'result': result }, \} let want = [{ \ 'word': 'my-label2', \ 'abbr': 'my-label2', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"0"}', \}, \{ \ 'word': 'my-label1', \ 'abbr': 'my-label1', \ 'icase': 1, \ 'dup': 1, \ 'empty': 1, \ 'kind': 'function', \ 'user_data': '{"vim-lsp/key":"1"}', \}] Assert Equals(lsp#omni#get_vim_completion_items(options).items, want) End End End End