]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/ale/test/test_ale_toggle.vader

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge commit '56df844d3c39ec494dacc69eae34272b27db185a' as '.vim/bundle/asyncomplete'
[etc/vim.git] / .vim / bundle / ale / test / test_ale_toggle.vader
1 Before:
2   Save g:ale_buffer_info
3   Save g:ale_set_signs
4   Save g:ale_set_lists_synchronously
5   Save g:ale_run_synchronously
6   Save g:ale_pattern_options
7   Save g:ale_pattern_options_enabled
8   Save g:ale_set_balloons
9
10   let g:ale_set_signs = 1
11   let g:ale_set_lists_synchronously = 1
12   let g:ale_run_synchronously = 1
13   unlet! g:ale_run_synchronously_callbacks
14   let g:ale_pattern_options = {}
15   let g:ale_pattern_options_enabled = 1
16   let g:ale_set_balloons =
17   \   has('balloon_eval') && has('gui_running') ||
18   \   has('balloon_eval_term') && !has('gui_running')
19
20   unlet! b:ale_enabled
21
22   let g:ale_buffer_info = {}
23   let g:expected_loclist = [{
24   \ 'bufnr': bufnr('%'),
25   \ 'lnum': 2,
26   \ 'vcol': 0,
27   \ 'col': 3,
28   \ 'text': 'foo bar',
29   \ 'type': 'E',
30   \ 'nr': -1,
31   \ 'pattern': '',
32   \ 'valid': 1,
33   \}]
34   let g:expected_groups = [
35   \ 'ALECleanupGroup',
36   \ 'ALEEvents',
37   \ 'ALEHighlightBufferGroup',
38   \]
39   let g:has_nvim_highlight = exists('*nvim_buf_add_highlight') && exists('*nvim_buf_clear_namespace')
40
41   function! ToggleTestCallback(buffer, output)
42     return [{
43     \ 'bufnr': a:buffer,
44     \ 'lnum': 2,
45     \ 'vcol': 0,
46     \ 'col': 3,
47     \ 'text': 'foo bar',
48     \ 'type': 'E',
49     \ 'nr': -1,
50     \}]
51   endfunction
52
53   function! ParseAuGroups()
54     redir => l:output
55        silent exec 'autocmd'
56     redir end
57
58     let l:results = []
59
60     for l:line in split(l:output, "\n")
61       let l:match = matchlist(l:line, '^ALE[a-zA-Z]\+')
62
63       " We don't care about some groups here.
64       if !empty(l:match)
65       \&& l:match[0] !=# 'ALECompletionGroup'
66       \&& l:match[0] !=# 'ALEBufferFixGroup'
67       \&& l:match[0] !=# 'ALEPatternOptionsGroup'
68         call add(l:results, l:match[0])
69       endif
70     endfor
71
72     call uniq(sort(l:results))
73
74     return l:results
75   endfunction
76
77   call ale#linter#Define('foobar', {
78   \ 'name': 'testlinter',
79   \ 'callback': 'ToggleTestCallback',
80   \ 'executable': has('win32') ? 'cmd' : 'echo',
81   \ 'command': 'echo',
82   \ 'read_buffer': 0,
83   \})
84
85   call ale#sign#Clear()
86
87 After:
88   Restore
89
90   unlet! g:ale_run_synchronously_callbacks
91   unlet! g:expected_loclist
92   unlet! g:expected_groups
93   unlet! b:ale_enabled
94   unlet! g:output
95   unlet! g:has_nvim_highlight
96
97   call ale#linter#Reset()
98
99   " Toggle ALE back on if we fail when it's disabled.
100   if !g:ale_enabled
101     ALEToggle
102   endif
103
104   delfunction ToggleTestCallback
105   delfunction ParseAuGroups
106
107   call setloclist(0, [])
108   call ale#sign#Clear()
109   call clearmatches()
110
111 Given foobar (Some imaginary filetype):
112   foo
113   bar
114   baz
115
116 Execute(ALEToggle should reset everything and then run again):
117   AssertEqual 'foobar', &filetype
118
119   ALELint
120   call ale#test#FlushJobs()
121
122   " First check that everything is there...
123   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
124   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
125
126   " Only check the legacy matches if not using the new NeoVIM API.
127   if !g:has_nvim_highlight
128     AssertEqual
129     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
130     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
131   endif
132
133   AssertEqual g:expected_groups, ParseAuGroups()
134   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
135
136   " Now Toggle ALE off.
137   ALEToggle
138
139   " Everything should be cleared.
140   Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed'
141   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared'
142   AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared'
143
144   if !g:has_nvim_highlight
145     AssertEqual [], getmatches(), 'The highlights were not cleared'
146   endif
147
148   AssertEqual g:expected_groups, ParseAuGroups()
149
150   " Toggle ALE on, everything should be set up and run again.
151   ALEToggle
152   call ale#test#FlushJobs()
153
154   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
155   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
156
157   if !g:has_nvim_highlight
158     AssertEqual
159     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
160     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
161   endif
162
163   AssertEqual g:expected_groups, ParseAuGroups()
164   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
165
166 Execute(ALEToggle should skip filename keys and preserve them):
167   AssertEqual 'foobar', &filetype
168
169   let g:ale_buffer_info['/foo/bar/baz.txt'] = {
170   \ 'job_list': [],
171   \ 'active_linter_list': [],
172   \ 'loclist': [],
173   \ 'temporary_file_list': [],
174   \ 'temporary_directory_list': [],
175   \ 'history': [],
176   \}
177
178   ALELint
179   call ale#test#FlushJobs()
180
181   " Now Toggle ALE off.
182   ALEToggle
183
184   AssertEqual
185   \ {
186   \   'job_list': [],
187   \   'active_linter_list': [],
188   \   'loclist': [],
189   \   'temporary_file_list': [],
190   \   'temporary_directory_list': [],
191   \   'history': [],
192   \ },
193   \ get(g:ale_buffer_info, '/foo/bar/baz.txt', {})
194
195   " Toggle ALE on again.
196   ALEToggle
197   call ale#test#FlushJobs()
198
199   AssertEqual
200   \ {
201   \   'job_list': [],
202   \   'active_linter_list': [],
203   \   'loclist': [],
204   \   'temporary_file_list': [],
205   \   'temporary_directory_list': [],
206   \   'history': [],
207   \ },
208   \ get(g:ale_buffer_info, '/foo/bar/baz.txt', {})
209
210 Execute(ALEDisable should reset everything and stay disabled):
211   ALELint
212   call ale#test#FlushJobs()
213
214   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
215
216   ALEDisable
217   call ale#test#FlushJobs()
218
219   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys()
220   AssertEqual 0, g:ale_enabled
221
222   ALEDisable
223   call ale#test#FlushJobs()
224
225   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys()
226   AssertEqual 0, g:ale_enabled
227
228 Execute(ALEEnable should enable ALE and lint again):
229   let g:ale_enabled = 0
230
231   ALEEnable
232   call ale#test#FlushJobs()
233
234   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
235   AssertEqual 1, g:ale_enabled
236
237 Execute(ALEReset should reset everything for a buffer):
238   AssertEqual 'foobar', &filetype
239
240   ALELint
241   call ale#test#FlushJobs()
242
243   " First check that everything is there...
244   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
245   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
246
247   if !g:has_nvim_highlight
248     AssertEqual
249     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
250     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
251   endif
252
253   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
254
255   " Now Toggle ALE off.
256   ALEReset
257   call ale#test#FlushJobs()
258
259   " Everything should be cleared.
260   Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed'
261   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared'
262   AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared'
263
264   if !g:has_nvim_highlight
265     AssertEqual [], getmatches(), 'The highlights were not cleared'
266   endif
267
268   AssertEqual 1, g:ale_enabled
269
270 Execute(ALEToggleBuffer should reset everything and then run again):
271   AssertEqual 'foobar', &filetype
272
273   ALELint
274   call ale#test#FlushJobs()
275
276   " First check that everything is there...
277   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
278   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
279
280   if !g:has_nvim_highlight
281     AssertEqual
282     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
283     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
284   endif
285
286   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
287
288   " Now Toggle ALE off.
289   ALEToggleBuffer
290
291   " Everything should be cleared.
292   Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed'
293   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared'
294   AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared'
295
296   if !g:has_nvim_highlight
297     AssertEqual [], getmatches(), 'The highlights were not cleared'
298   endif
299
300   " Toggle ALE on, everything should be set up and run again.
301   ALEToggleBuffer
302   call ale#test#FlushJobs()
303
304   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
305   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
306
307   if !g:has_nvim_highlight
308     AssertEqual
309     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
310     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
311   endif
312
313   AssertEqual g:expected_groups, ParseAuGroups()
314   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
315
316 Execute(ALEDisableBuffer should reset everything and stay disabled):
317   ALELint
318   call ale#test#FlushJobs()
319
320   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
321
322   ALEDisableBuffer
323   call ale#test#FlushJobs()
324
325   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys()
326   AssertEqual 0, b:ale_enabled
327
328 Execute(ALEEnableBuffer should enable ALE and lint again):
329   let b:ale_enabled = 0
330
331   ALEEnableBuffer
332   call ale#test#FlushJobs()
333
334   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
335   AssertEqual 1, b:ale_enabled
336
337 Execute(ALEEnableBuffer should complain when ALE is disabled globally):
338   let g:ale_enabled = 0
339   let b:ale_enabled = 0
340
341   redir => g:output
342     ALEEnableBuffer
343   redir END
344
345   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys()
346   AssertEqual 0, b:ale_enabled
347   AssertEqual 0, g:ale_enabled
348   AssertEqual
349   \ 'ALE cannot be enabled locally when disabled globally',
350   \ join(split(g:output))
351
352 Execute(ALEResetBuffer should reset everything for a buffer):
353   AssertEqual 'foobar', &filetype
354
355   ALELint
356   call ale#test#FlushJobs()
357
358   " First check that everything is there...
359   AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys()
360   AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%'))
361
362   if !g:has_nvim_highlight
363     AssertEqual
364     \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}],
365     \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}')
366   endif
367
368   AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist
369
370   " Now Toggle ALE off.
371   ALEResetBuffer
372   call ale#test#FlushJobs()
373
374   " Everything should be cleared.
375   Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed'
376   AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared'
377   AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared'
378
379   if !g:has_nvim_highlight
380     AssertEqual [], getmatches(), 'The highlights were not cleared'
381   endif
382
383   AssertEqual 1, g:ale_enabled
384   AssertEqual 1, get(b:, 'ale_enabled', 1)
385
386 Execute(Disabling ALE should disable balloons):
387   " These tests won't run in the console, but we can run them manually in GVim.
388   if has('balloon_eval') && has('gui_running')
389   \|| (has('balloon_eval_term') && !has('gui_running'))
390     call ale#linter#Reset()
391
392     " Enable balloons, so we can check the expr value.
393     call ale#balloon#Enable()
394
395     if has('balloon_eval') && has('gui_running')
396       AssertEqual 1, &ballooneval
397     else
398       AssertEqual 1, &balloonevalterm
399     endif
400
401     AssertEqual 'ale#balloon#Expr()', &balloonexpr
402
403     " Toggle ALE off.
404     ALEToggle
405
406     " The balloon settings should be reset.
407     if has('balloon_eval') && has('gui_running')
408       AssertEqual 0, &ballooneval
409     else
410       AssertEqual 0, &balloonevalterm
411     endif
412
413     AssertEqual '', &balloonexpr
414   endif
415
416 Execute(Enabling ALE should enable balloons if the setting is on):
417   if has('balloon_eval') && has('gui_running')
418   \|| (has('balloon_eval_term') && !has('gui_running'))
419     call ale#linter#Reset()
420     call ale#balloon#Disable()
421     ALEDisable
422     let g:ale_set_balloons = 0
423     ALEEnable
424
425     if has('balloon_eval') && has('gui_running')
426       AssertEqual 0, &ballooneval
427     else
428       AssertEqual 0, &balloonevalterm
429     endif
430
431     AssertEqual '', &balloonexpr
432
433     ALEDisable
434     let g:ale_set_balloons = 1
435     ALEEnable
436
437     if has('balloon_eval') && has('gui_running')
438       AssertEqual 1, &ballooneval
439     else
440       AssertEqual 1, &balloonevalterm
441     endif
442
443     AssertEqual 'ale#balloon#Expr()', &balloonexpr
444   endif