summaryrefslogtreecommitdiff
path: root/test/test_hover.vader
blob: 57734b4eeb8c1b9e46130b96268a985f04b13c80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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()