summaryrefslogtreecommitdiff
path: root/test/lsp
diff options
context:
space:
mode:
authorRafael Lerm <rafaellerm@gmail.com>2018-01-19 14:40:55 -0200
committerw0rp <w0rp@users.noreply.github.com>2018-01-19 16:40:55 +0000
commit042dec059a3da01477cbc76e9893973dd374872d (patch)
tree37cccd72aeda8360259be8f29d33171378e4edde /test/lsp
parenteddda2f8b599a52e92c99795f42c0c4ba8e15f7c (diff)
downloadale-042dec059a3da01477cbc76e9893973dd374872d.zip
Send didSave message to LSP-based linters (#1295)
* Also send didSave to LSP linters. * Add tests for messages sent to LSP linters.
Diffstat (limited to 'test/lsp')
-rw-r--r--test/lsp/test_lsp_communication.vader97
1 files changed, 97 insertions, 0 deletions
diff --git a/test/lsp/test_lsp_communication.vader b/test/lsp/test_lsp_communication.vader
new file mode 100644
index 00000000..7a4c67ea
--- /dev/null
+++ b/test/lsp/test_lsp_communication.vader
@@ -0,0 +1,97 @@
+Before:
+ Save g:ale_lint_on_save
+ Save g:ale_enabled
+ Save g:ale_linters
+ Save g:ale_run_synchronously
+
+ call ale#test#SetDirectory('/testplugin/test/completion')
+ call ale#test#SetFilename('dummy.txt')
+
+ runtime autoload/ale/lsp.vim
+
+ let g:ale_lint_on_save = 1
+ let b:ale_enabled = 1
+ let g:ale_lsp_next_message_id = 1
+ let g:ale_run_synchronously = 1
+ let g:message_list = []
+ let g:Callback = ''
+
+ call ale#linter#Define('foobar', {
+ \ 'name': 'dummy_linter',
+ \ 'lsp': 'stdio',
+ \ 'command': 'cat - > /dev/null',
+ \ 'executable': has('win32') ? 'cmd' : 'echo',
+ \ 'language_callback': {buffer -> 'foobar'},
+ \ 'project_root_callback': {buffer -> expand('.')},
+ \ })
+ let g:ale_linters = {'foobar': ['dummy_linter']}
+
+ function! ale#linter#StartLSP(buffer, linter, callback) abort
+ let g:Callback = a:callback
+
+ return {
+ \ 'connection_id': 347,
+ \ 'project_root': '/foo/bar',
+ \}
+ endfunction
+
+ " Replace the Send function for LSP, so we can monitor calls to it.
+ function! ale#lsp#Send(conn_id, message, ...) abort
+ call add(g:message_list, a:message)
+ endfunction
+
+After:
+ Restore
+
+ unlet! b:ale_enabled
+ unlet! b:ale_linters
+ unlet! g:Callback
+ unlet! g:message_list
+
+ call ale#test#RestoreDirectory()
+ call ale#linter#Reset()
+
+ " Stop any timers we left behind.
+ " This stops the tests from failing randomly.
+ call ale#completion#StopTimer()
+
+ runtime autoload/ale/completion.vim
+ runtime autoload/ale/lsp.vim
+
+Given foobar (Some imaginary filetype):
+ <contents>
+
+Execute(Server should be notified on save):
+ call ale#events#SaveEvent(bufnr(''))
+
+ AssertEqual
+ \ [
+ \ [1, 'textDocument/didChange', {
+ \ 'textDocument': {
+ \ 'uri': ale#path#ToURI(expand('%:p')),
+ \ 'version': g:ale_lsp_next_version_id - 1,
+ \ },
+ \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}],
+ \ }],
+ \ [1, 'textDocument/didSave', {
+ \ 'textDocument': {
+ \ 'uri': ale#path#ToURI(expand('%:p')),
+ \ },
+ \ }],
+ \ ],
+ \ g:message_list
+
+Execute(Server should be notified on change):
+ call ale#events#FileChangedEvent(bufnr(''))
+
+ AssertEqual
+ \ [
+ \ [1, 'textDocument/didChange', {
+ \ 'textDocument': {
+ \ 'uri': ale#path#ToURI(expand('%:p')),
+ \ 'version': g:ale_lsp_next_version_id - 1,
+ \ },
+ \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}],
+ \ }],
+ \ ],
+ \ g:message_list