X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/5a4872f466ebd76ddd532bdf2798554421c53df4..fe3919e725e156d751069662d11e38f7b4791de1:/.vim/bundle/vim-lsp/test/lsp/omni.vimspec diff --git a/.vim/bundle/vim-lsp/test/lsp/omni.vimspec b/.vim/bundle/vim-lsp/test/lsp/omni.vimspec new file mode 100644 index 00000000..b74e3c79 --- /dev/null +++ b/.vim/bundle/vim-lsp/test/lsp/omni.vimspec @@ -0,0 +1,501 @@ +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