X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/fe3919e725e156d751069662d11e38f7b4791de1..5179925d63a908e267c6675e2a2e64bf30d3f727:/.vim/bundle/vim-lsp-ale/test/integ/test.vimspec?ds=inline diff --git a/.vim/bundle/vim-lsp-ale/test/integ/test.vimspec b/.vim/bundle/vim-lsp-ale/test/integ/test.vimspec new file mode 100644 index 00000000..5ae295bd --- /dev/null +++ b/.vim/bundle/vim-lsp-ale/test/integ/test.vimspec @@ -0,0 +1,103 @@ +let s:SEP = has('win32') ? '\' : '/' + +function! s:get_debug_info(bufnr) abort + let uri = lsp#utils#get_buffer_uri(a:bufnr) + let all_diags = lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(uri) + return "\nall diags: " . string(all_diags) + \ . "\nlocation list: " . string(ale#engine#GetLoclist(a:bufnr)) + \ . "\nserver_status: " . lsp#get_server_status() + \ . "\ncurrent lines: " . string(getline(1, '$')) +endfunction + +Describe rust-analyzer + Before all + if !executable('rust-analyzer') + throw 'rust-analyzer command is not found. It must be installed for running integration tests' + endif + + let dir = IntegTestRootDir() + execute 'cd' dir + let file = join([dir, 'project', 'src', 'lib.rs'], s:SEP) + + " Note: It might be better to write lib.rs here and delete in `After all` hook rather than + " modifying a file committed to repository directly. + let lib_rs_contents = readfile(file) + End + + After all + " Restore contents of lib.rs since it was modified by test case + call writefile(lib_rs_contents, file) + + redir! > integ_messages.txt + if exists(':LspStatus') + LspStatus + else + echom 'No :LspStatus command is defined' + endif + message + redir END + End + + Before each + execute 'edit!' file + End + + After each + bwipeout! + End + + It shows diagnostics results with ALE through vim-lsp + Assert lsp#ale#enabled() + + let bufnr = bufnr('') + + let elapsed = 0 " in seconds + let timeout = 120 " in seconds + let counts = ale#statusline#Count(bufnr) + while elapsed <= timeout + if counts.total > 0 + break + endif + sleep 1 + let elapsed += 1 + let counts = ale#statusline#Count(bufnr) + endwhile + + let info = s:get_debug_info(bufnr) + Assert True(counts.total > 0, 'No error found after ' . elapsed . ' seconds' . info) + + let loclist = ale#engine#GetLoclist(bufnr) + Assert NotEmpty(loclist, 'Location list from ALE is empty after ' . elapsed . ' seconds. ' . info) + + let item = loclist[0] + let item_str = string(item) + Assert Equals(item.linter_name, 'vim-lsp', item_str . info) + Assert True(item.from_other_source, item_str . info) + Assert Match(item.filename, 'lib\.rs$', item_str . info) + Assert Match(item.text, 'this_variable_is_unused', item_str . info) + + " Fix the problem + normal! ggjdd + write + + let elapsed = 0 " in seconds + let counts = ale#statusline#Count(bufnr) + while elapsed <= timeout + if counts.total == 0 + break + endif + sleep 1 + let elapsed += 1 + let counts = ale#statusline#Count(bufnr) + endwhile + + let info = s:get_debug_info(bufnr) + Assert True(counts.total == 0, 'Error found after ' . elapsed . ' seconds' . info) + + " Check the error was removed from location list since it'd been fixed + let loclist = ale#engine#GetLoclist(bufnr) + Assert Empty(loclist, 'Location list from ALE is not empty after ' . elapsed . ' seconds. ' . info) + End +End + +" vim: set ft=vim: