ale/test/lsp/test_closing_documents.vader
yoshi1123 e490e87a60
Add eclipselsp jdt:// support for textDocument/definition (#4030)
This patch adds support for opening jdt:// links on "go to definition" requests returned by Java language servers.

Co-authored-by: w0rp <devw0rp@gmail.com>
2022-03-04 19:03:27 +00:00

177 lines
5.0 KiB
Plaintext

Before:
runtime autoload/ale/lsp.vim
let g:message_list = []
function! MarkAllConnectionsInitialized() abort
for l:conn in values(ale#lsp#GetConnections())
let l:conn.initialized = 1
endfor
endfunction
function! MarkDocumentOpened() abort
for l:conn in values(ale#lsp#GetConnections())
let l:conn.open_documents[bufnr('')] = 1
endfor
endfunction
function! ale#lsp#Send(conn_id, message) abort
let l:connections = ale#lsp#GetConnections()
if !l:connections[a:conn_id].initialized
throw 'LSP server not initialized yet!'
endif
call add(g:message_list, [a:conn_id] + a:message)
endfunction
call ale#lsp#ResetConnections()
After:
unlet! g:message_list
delfunction MarkAllConnectionsInitialized
delfunction MarkDocumentOpened
call ale#lsp#ResetConnections()
runtime autoload/ale/lsp.vim
Execute(No errors should be thrown if the connection is not initialized):
call ale#lsp#Register('command', '/foo', {})
call MarkDocumentOpened()
call ale#engine#Cleanup(bufnr(''))
AssertEqual [], g:message_list
Execute(No messages should be sent if the document wasn't opened):
call ale#lsp#Register('command', '/foo', {})
call MarkAllConnectionsInitialized()
call ale#engine#Cleanup(bufnr(''))
AssertEqual [], g:message_list
Execute(A message should be sent if the document was opened):
call ale#lsp#Register('command', '/foo', {})
call MarkAllConnectionsInitialized()
call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang')
call ale#engine#Cleanup(bufnr(''))
" We should only send the message once.
call ale#engine#Cleanup(bufnr(''))
AssertEqual
\ [
\ ['command:/foo', 1, 'textDocument/didOpen', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ 'version': g:ale_lsp_next_version_id - 1,
\ 'languageId': 'lang',
\ 'text': "\n",
\ },
\ }],
\ ['command:/foo', 1, 'textDocument/didClose', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ },
\ }],
\ ],
\ g:message_list
Execute(A message should be sent if the document was opened for tsserver):
call ale#lsp#Register('command', '/foo', {})
call ale#lsp#MarkConnectionAsTsserver('command:/foo')
call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang')
call ale#engine#Cleanup(bufnr(''))
" We should only send the message once.
call ale#engine#Cleanup(bufnr(''))
AssertEqual
\ [
\ ['command:/foo', 1, 'ts@open', {'file': expand('%:p')}],
\ ['command:/foo', 1, 'ts@close', {'file': expand('%:p')}],
\ ],
\ g:message_list
Execute(Re-opening and closing the documents should work):
call ale#lsp#Register('command', '/foo', {})
call MarkAllConnectionsInitialized()
call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang')
call ale#engine#Cleanup(bufnr(''))
call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang')
call ale#engine#Cleanup(bufnr(''))
AssertEqual
\ [
\ ['command:/foo', 1, 'textDocument/didOpen', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ 'version': g:ale_lsp_next_version_id - 2,
\ 'languageId': 'lang',
\ 'text': "\n",
\ },
\ }],
\ ['command:/foo', 1, 'textDocument/didClose', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ },
\ }],
\ ['command:/foo', 1, 'textDocument/didOpen', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ 'version': g:ale_lsp_next_version_id - 1,
\ 'languageId': 'lang',
\ 'text': "\n",
\ },
\ }],
\ ['command:/foo', 1, 'textDocument/didClose', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ },
\ }],
\ ],
\ g:message_list
Execute(Messages for closing documents should be sent to each server):
call ale#lsp#Register('command', '/foo', {})
call ale#lsp#Register('command', '/bar', {})
call MarkAllConnectionsInitialized()
call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang')
call ale#lsp#OpenDocument('command:/bar', bufnr(''), 'lang')
call ale#engine#Cleanup(bufnr(''))
" We should only send the message once.
call ale#engine#Cleanup(bufnr(''))
AssertEqual
\ [
\ ['command:/foo', 1, 'textDocument/didOpen', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ 'version': g:ale_lsp_next_version_id - 2,
\ 'languageId': 'lang',
\ 'text': "\n",
\ },
\ }],
\ ['command:/bar', 1, 'textDocument/didOpen', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ 'version': g:ale_lsp_next_version_id - 1,
\ 'languageId': 'lang',
\ 'text': "\n",
\ },
\ }],
\ ['command:/bar', 1, 'textDocument/didClose', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ },
\ }],
\ ['command:/foo', 1, 'textDocument/didClose', {
\ 'textDocument': {
\ 'uri': ale#path#ToFileURI(expand('%:p')),
\ },
\ }],
\ ],
\ g:message_list