summaryrefslogtreecommitdiff
path: root/test/test_hover.vader
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2018-04-22 22:00:25 +0100
committerw0rp <devw0rp@gmail.com>2018-04-22 22:00:25 +0100
commitef130c4428b12785baeb399014aa79dd1cb4267b (patch)
tree3f7dc015ee1c0380740be91fb7ecc93b8f867224 /test/test_hover.vader
parent0b3ee11546952f11bcfa56ea58b28d99f19ab3a3 (diff)
downloadale-ef130c4428b12785baeb399014aa79dd1cb4267b.zip
#1428 Start implementing LSP hover support
Diffstat (limited to 'test/test_hover.vader')
-rw-r--r--test/test_hover.vader107
1 files changed, 107 insertions, 0 deletions
diff --git a/test/test_hover.vader b/test/test_hover.vader
new file mode 100644
index 00000000..57734b4e
--- /dev/null
+++ b/test/test_hover.vader
@@ -0,0 +1,107 @@
+Before:
+ call ale#test#SetDirectory('/testplugin/test')
+ call ale#test#SetFilename('dummy.txt')
+
+ let g:Callback = 0
+ let g:message_list = []
+ let g:item_list = []
+ let g:echo_list = []
+
+ runtime autoload/ale/linter.vim
+ runtime autoload/ale/lsp.vim
+ runtime autoload/ale/util.vim
+
+ function! ale#linter#StartLSP(buffer, linter, callback) abort
+ let g:Callback = a:callback
+
+ return {
+ \ 'connection_id': 347,
+ \ 'project_root': '/foo/bar',
+ \}
+ endfunction
+
+ function! ale#lsp#Send(conn_id, message, root) abort
+ call add(g:message_list, a:message)
+
+ return 42
+ endfunction
+
+ function! ale#util#Echo(string) abort
+ call add(g:echo_list, a:string)
+ endfunction
+
+ function! HandleValidLSPResult(result) abort
+ " The cursor is beyond the length of the line.
+ " We will clamp the cursor position with the line length.
+ call setpos('.', [bufnr(''), 1, 5, 0])
+
+ call ale#hover#SetMap({3: {
+ \ 'buffer': bufnr(''),
+ \ 'line': 1,
+ \ 'column': 5,
+ \}})
+ call ale#hover#HandleLSPResponse(
+ \ 1,
+ \ {
+ \ 'id': 3,
+ \ 'result': a:result,
+ \ }
+ \)
+ endfunction
+
+After:
+ call ale#hover#SetMap({})
+ call ale#test#RestoreDirectory()
+ call ale#linter#Reset()
+
+ unlet! g:Callback
+ unlet! g:message_list
+ unlet! b:ale_linters
+ unlet! g:echo_list
+
+ delfunction HandleValidLSPResult
+
+ runtime autoload/ale/linter.vim
+ runtime autoload/ale/lsp.vim
+ runtime autoload/ale/util.vim
+
+Given python(Some Python file):
+ foo
+ somelongerline
+ bazxyzxyzxyz
+
+Execute(LSP hover responses with just a string should be handled):
+ call HandleValidLSPResult({'contents': 'foobar'})
+
+ AssertEqual ['foobar'], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()
+
+Execute(LSP hover null responses should be handled):
+ call HandleValidLSPResult(v:null)
+
+ AssertEqual [], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()
+
+Execute(LSP hover responses with markup content should be handled):
+ call HandleValidLSPResult({'contents': {'kind': 'something', 'value': 'markup'}})
+
+ AssertEqual ['markup'], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()
+
+Execute(LSP hover response with lists of strings should be handled):
+ call HandleValidLSPResult({'contents': [
+ \ "foo\n",
+ \ "bar\n",
+ \]})
+
+ AssertEqual ['foo bar'], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()
+
+Execute(LSP hover response with lists of strings and marked strings should be handled):
+ call HandleValidLSPResult({'contents': [
+ \ {'language': 'rust', 'value': 'foo'},
+ \ "bar\n",
+ \]})
+
+ AssertEqual ['foo bar'], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()