]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/ale/test/test_ale_info.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 '76265755a1add77121c8f9dabb3e9bb70fe9a972' as '.vim/bundle/ale'
[etc/vim.git] / .vim / bundle / ale / test / test_ale_info.vader
1 Before:
2   Save g:ale_buffer_info
3   Save g:ale_cache_executable_check_failures
4   Save g:ale_change_sign_column_color
5   Save g:ale_command_wrapper
6   Save g:ale_completion_delay
7   Save g:ale_completion_enabled
8   Save g:ale_completion_max_suggestions
9   Save g:ale_disable_lsp
10   Save g:ale_echo_cursor
11   Save g:ale_echo_msg_error_str
12   Save g:ale_echo_msg_format
13   Save g:ale_echo_msg_info_str
14   Save g:ale_echo_msg_warning_str
15   Save g:ale_fix_on_save
16   Save g:ale_fixers
17   Save g:ale_history_enabled
18   Save g:ale_history_log_output
19   Save g:ale_info_default_mode
20   Save g:ale_keep_list_window_open
21   Save g:ale_lint_delay
22   Save g:ale_lint_on_enter
23   Save g:ale_lint_on_filetype_changed
24   Save g:ale_lint_on_insert_leave
25   Save g:ale_lint_on_save
26   Save g:ale_lint_on_text_changed
27   Save g:ale_linters
28   Save g:ale_linters_explicit
29   Save g:ale_linters_ignore
30   Save g:ale_list_vertical
31   Save g:ale_list_window_size
32   Save g:ale_loclist_msg_format
33   Save g:ale_lsp_error_messages
34   Save g:ale_max_buffer_history_size
35   Save g:ale_max_signs
36   Save g:ale_maximum_file_size
37   Save g:ale_open_list
38   Save g:ale_pattern_options
39   Save g:ale_pattern_options_enabled
40   Save g:ale_root
41   Save g:ale_set_balloons
42   Save g:ale_set_highlights
43   Save g:ale_set_loclist
44   Save g:ale_set_quickfix
45   Save g:ale_set_signs
46   Save g:ale_sign_column_always
47   Save g:ale_sign_error
48   Save g:ale_sign_info
49   Save g:ale_sign_offset
50   Save g:ale_sign_style_error
51   Save g:ale_sign_style_warning
52   Save g:ale_sign_warning
53   Save g:ale_sign_highlight_linenrs
54   Save g:ale_type_map
55   Save g:ale_use_neovim_diagnostics_api
56   Save g:ale_use_global_executables
57   Save g:ale_virtualtext_cursor
58   Save g:ale_warn_about_trailing_blank_lines
59   Save g:ale_warn_about_trailing_whitespace
60
61   unlet! b:ale_history
62
63   let g:ale_buffer_info = {}
64   let g:ale_cache_executable_check_failures = 0
65   let g:ale_change_sign_column_color = 0
66   let g:ale_command_wrapper = ''
67   let g:ale_completion_delay = 100
68   let g:ale_completion_enabled = 0
69   let g:ale_completion_max_suggestions = 50
70   let g:ale_disable_lsp = 0
71   let g:ale_echo_cursor = 1
72   let g:ale_echo_msg_error_str = 'Error'
73   let g:ale_echo_msg_format = '%code: %%s'
74   let g:ale_echo_msg_info_str = 'Info'
75   let g:ale_echo_msg_warning_str = 'Warning'
76   let g:ale_fix_on_save = 0
77   let g:ale_history_enabled = 1
78   let g:ale_history_log_output = 1
79   " This needs to be set to echo for this series of tests.
80   let g:ale_info_default_mode = 'echo'
81   let g:ale_keep_list_window_open = 0
82   let g:ale_lint_delay = 200
83   let g:ale_lint_on_enter = 1
84   let g:ale_lint_on_filetype_changed = 1
85   let g:ale_lint_on_insert_leave = 1
86   let g:ale_lint_on_save = 1
87   let g:ale_lint_on_text_changed = 'normal'
88   let g:ale_linters_explicit = 0
89   let g:ale_linters_ignore = {'python': ['pyright']}
90   let g:ale_list_vertical = 0
91   let g:ale_list_window_size = 10
92   let g:ale_loclist_msg_format = '%code: %%s'
93   let g:ale_lsp_error_messages = {}
94   let g:ale_max_buffer_history_size = 20
95   let g:ale_max_signs = -1
96   let g:ale_maximum_file_size = 0
97   let g:ale_open_list = 0
98   let g:ale_pattern_options = {}
99   let g:ale_pattern_options_enabled = 0
100   let g:ale_root = {}
101   let g:ale_set_balloons = 0
102   let g:ale_set_highlights = 1
103   let g:ale_set_loclist = 1
104   let g:ale_set_quickfix = 0
105   let g:ale_set_signs = 1
106   let g:ale_sign_column_always = 0
107   let g:ale_sign_error = '>>'
108   let g:ale_sign_info = '--'
109   let g:ale_sign_offset = 1000000
110   let g:ale_sign_style_error = '>>'
111   let g:ale_sign_style_warning = '--'
112   let g:ale_sign_warning = '--'
113   let g:ale_sign_highlight_linenrs = 0
114   let g:ale_type_map = {}
115   let g:ale_use_neovim_diagnostics_api = 0
116   let g:ale_use_global_executables = v:null
117   let g:ale_virtualtext_cursor = 'disabled'
118   let g:ale_warn_about_trailing_blank_lines = 1
119   let g:ale_warn_about_trailing_whitespace = 1
120
121   let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout'}
122   let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout'}
123
124   call ale#engine#ResetExecutableCache()
125   call ale#linter#Reset()
126   call ale#linter#PreventLoading('testft')
127   let g:ale_linters = {}
128   let g:ale_fixers = {}
129   let g:ale_linter_aliases = {}
130   let g:ale_buffer_info = {}
131   let g:fixer_lines = [
132   \ ' Suggested Fixers:',
133   \ '  ''foo'' - Fix things the foo way',
134   \ ' ',
135   \]
136   let g:globals_lines = [
137   \ ' Global Variables:',
138   \ 'let g:ale_cache_executable_check_failures = 0',
139   \ 'let g:ale_change_sign_column_color = 0',
140   \ 'let g:ale_command_wrapper = ''''',
141   \ 'let g:ale_completion_delay = 100',
142   \ 'let g:ale_completion_enabled = 0',
143   \ 'let g:ale_completion_max_suggestions = 50',
144   \ 'let g:ale_disable_lsp = 0',
145   \ 'let g:ale_echo_cursor = 1',
146   \ 'let g:ale_echo_msg_error_str = ''Error''',
147   \ 'let g:ale_echo_msg_format = ''%code: %%s''',
148   \ 'let g:ale_echo_msg_info_str = ''Info''',
149   \ 'let g:ale_echo_msg_warning_str = ''Warning''',
150   \ 'let g:ale_enabled = 1',
151   \ 'let g:ale_fix_on_save = 0',
152   \ 'let g:ale_fixers = {}',
153   \ 'let g:ale_history_enabled = 1',
154   \ 'let g:ale_info_default_mode = ''echo''',
155   \ 'let g:ale_history_log_output = 1',
156   \ 'let g:ale_keep_list_window_open = 0',
157   \ 'let g:ale_lint_delay = 200',
158   \ 'let g:ale_lint_on_enter = 1',
159   \ 'let g:ale_lint_on_filetype_changed = 1',
160   \ 'let g:ale_lint_on_insert_leave = 1',
161   \ 'let g:ale_lint_on_save = 1',
162   \ 'let g:ale_lint_on_text_changed = ''normal''',
163   \ 'let g:ale_linter_aliases = {}',
164   \ 'let g:ale_linters = {}',
165   \ 'let g:ale_linters_explicit = 0',
166   \ 'let g:ale_linters_ignore = {''python'': [''pyright'']}',
167   \ 'let g:ale_list_vertical = 0',
168   \ 'let g:ale_list_window_size = 10',
169   \ 'let g:ale_loclist_msg_format = ''%code: %%s''',
170   \ 'let g:ale_max_buffer_history_size = 20',
171   \ 'let g:ale_max_signs = -1',
172   \ 'let g:ale_maximum_file_size = 0',
173   \ 'let g:ale_open_list = 0',
174   \ 'let g:ale_pattern_options = {}',
175   \ 'let g:ale_pattern_options_enabled = 0',
176   \ 'let g:ale_root = {}',
177   \ 'let g:ale_set_balloons = 0',
178   \ 'let g:ale_set_highlights = 1',
179   \ 'let g:ale_set_loclist = 1',
180   \ 'let g:ale_set_quickfix = 0',
181   \ 'let g:ale_set_signs = 1',
182   \ 'let g:ale_sign_column_always = 0',
183   \ 'let g:ale_sign_error = ''>>''',
184   \ 'let g:ale_sign_info = ''--''',
185   \ 'let g:ale_sign_offset = 1000000',
186   \ 'let g:ale_sign_style_error = ''>>''',
187   \ 'let g:ale_sign_style_warning = ''--''',
188   \ 'let g:ale_sign_warning = ''--''',
189   \ 'let g:ale_sign_highlight_linenrs = 0',
190   \ 'let g:ale_type_map = {}',
191   \ 'let g:ale_use_neovim_diagnostics_api = 0',
192   \ 'let g:ale_use_global_executables = v:null',
193   \ 'let g:ale_virtualtext_cursor = ''disabled''',
194   \ 'let g:ale_warn_about_trailing_blank_lines = 1',
195   \ 'let g:ale_warn_about_trailing_whitespace = 1',
196   \ ' ',
197   \]
198   let g:command_header = [
199   \ '  Command History:',
200   \]
201
202   function CheckInfo(expected_list) abort
203     let l:output = ''
204
205     redir => l:output
206       noautocmd silent ALEInfo
207     redir END
208
209     AssertEqual a:expected_list, split(l:output, "\n")
210   endfunction
211
212   call ale#test#SetDirectory('/testplugin/test')
213
214   call ale#fix#registry#Clear()
215   call ale#fix#registry#Add('foo', 'x', [], 'Fix things the foo way')
216
217 After:
218   Restore
219
220   if exists('g:info_test_file') && filereadable(g:info_test_file)
221     call delete(g:info_test_file)
222   endif
223
224   unlet! g:testlinter1
225   unlet! g:testlinter2
226   unlet! b:ale_history
227   unlet! b:ale_linters
228   unlet! g:output
229   unlet! g:fixer_lines
230   unlet! g:variables_lines
231   unlet! g:globals_string
232   unlet! g:command_header
233   unlet! g:ale_testft_testlinter1_foo
234   unlet! g:ale_testft_testlinter1_bar
235   unlet! g:ale_testft2_testlinter2_foo
236   unlet! b:ale_testft2_testlinter2_foo
237   unlet! g:ale_testft2_testlinter2_bar
238   unlet! g:info_test_file
239   unlet! g:ale_testft_build_dir_names
240   unlet! g:ale_testft_testlinter2_option
241   delfunction CheckInfo
242
243   call ale#test#RestoreDirectory()
244   call ale#fix#registry#ResetToDefaults()
245
246 Given nolintersft (Empty buffer with no linters):
247 Execute (ALEInfo with no linters should return the right output):
248   call CheckInfo(
249   \ [
250   \   ' Current Filetype: nolintersft',
251   \   'Available Linters: []',
252   \   '  Enabled Linters: []',
253   \   '  Ignored Linters: []',
254   \ ]
255   \ + g:fixer_lines
256   \ + g:globals_lines
257   \ + g:command_header
258   \)
259
260 Given (Empty buffer with no filetype):
261 Execute (ALEInfo should return buffer-local global ALE settings):
262   let b:ale_linters = {'x': ['y']}
263
264   call insert(
265   \ g:globals_lines,
266   \ 'let b:ale_linters = {''x'': [''y'']}',
267   \ index(g:globals_lines, 'let g:ale_linters = {}') + 1
268   \)
269
270   call CheckInfo(
271   \ [
272   \   ' Current Filetype: ',
273   \   'Available Linters: []',
274   \   '  Enabled Linters: []',
275   \   '  Ignored Linters: []',
276   \ ]
277   \ + g:fixer_lines
278   \ + g:globals_lines
279   \ + g:command_header
280   \)
281
282 Given (Empty buffer with no filetype):
283 Execute (ALEInfo with no filetype should return the right output):
284   call CheckInfo(
285   \ [
286   \   ' Current Filetype: ',
287   \   'Available Linters: []',
288   \   '  Enabled Linters: []',
289   \   '  Ignored Linters: []',
290   \ ]
291   \ + g:fixer_lines
292   \ + g:globals_lines
293   \ + g:command_header
294   \)
295
296 Given testft (Empty buffer):
297 Execute (ALEInfo with a single linter should return the right output):
298   call ale#linter#Define('testft', g:testlinter1)
299
300   call CheckInfo(
301   \ [
302   \   ' Current Filetype: testft',
303   \   'Available Linters: [''testlinter1'']',
304   \   '  Enabled Linters: [''testlinter1'']',
305   \   '  Ignored Linters: []',
306   \ ]
307   \ + g:fixer_lines
308   \ + g:globals_lines
309   \ + g:command_header
310   \)
311
312 Given testft (Empty buffer):
313 Execute (ALEInfo with two linters should return the right output):
314   call ale#linter#Define('testft', g:testlinter1)
315   call ale#linter#Define('testft', g:testlinter2)
316
317   call CheckInfo(
318   \ [
319   \   ' Current Filetype: testft',
320   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
321   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
322   \   '  Ignored Linters: []',
323   \ ]
324   \ + g:fixer_lines
325   \ + g:globals_lines
326   \ + g:command_header
327   \)
328
329 Given testft (Empty buffer):
330 Execute (ALEInfo should calculate enabled linters correctly):
331   call ale#linter#Define('testft', g:testlinter1)
332   call ale#linter#Define('testft', g:testlinter2)
333   let g:ale_linters = {'testft': ['testlinter2']}
334
335   let g:globals_lines[index(g:globals_lines, 'let g:ale_linters = {}')]
336   \ = 'let g:ale_linters = {''testft'': [''testlinter2'']}'
337
338   call CheckInfo(
339   \ [
340   \   ' Current Filetype: testft',
341   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
342   \   '  Enabled Linters: [''testlinter2'']',
343   \   '  Ignored Linters: []',
344   \ ]
345   \ + g:fixer_lines
346   \ + g:globals_lines
347   \ + g:command_header
348   \)
349
350 Given testft (Empty buffer):
351 Execute (ALEInfo should only return linters for current filetype):
352   call ale#linter#Define('testft', g:testlinter1)
353   call ale#linter#Define('testft2', g:testlinter2)
354
355   call CheckInfo(
356   \ [
357   \   ' Current Filetype: testft',
358   \   'Available Linters: [''testlinter1'']',
359   \   '  Enabled Linters: [''testlinter1'']',
360   \   '  Ignored Linters: []',
361   \ ]
362   \ + g:fixer_lines
363   \ + g:globals_lines
364   \ + g:command_header
365   \)
366
367 Given testft.testft2 (Empty buffer with two filetypes):
368 Execute (ALEInfo with compound filetypes should return linters for both of them):
369   call ale#linter#Define('testft', g:testlinter1)
370   call ale#linter#Define('testft2', g:testlinter2)
371
372   call CheckInfo(
373   \ [
374   \   ' Current Filetype: testft.testft2',
375   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
376   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
377   \   '  Ignored Linters: []',
378   \ ]
379   \ + g:fixer_lines
380   \ + g:globals_lines
381   \ + g:command_header
382   \)
383
384 Given testft.testft2 (Empty buffer with two filetypes):
385 Execute (ALEInfo should return appropriately named global variables):
386   let g:ale_testft_testlinter1_foo = 'abc'
387   let g:ale_testft_testlinter1_bar = ['abc']
388   let g:ale_testft2_testlinter2_foo = 123
389   let g:ale_testft2_testlinter2_bar = {'x': 'y'}
390
391   call ale#linter#Define('testft', g:testlinter1)
392   call ale#linter#Define('testft2', g:testlinter2)
393
394   call CheckInfo(
395   \ [
396   \   ' Current Filetype: testft.testft2',
397   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
398   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
399   \   '  Ignored Linters: []',
400   \ ]
401   \ + g:fixer_lines
402   \ + [
403   \   ' Linter Variables:',
404   \   'let g:ale_testft2_testlinter2_bar = {''x'': ''y''}',
405   \   'let g:ale_testft2_testlinter2_foo = 123',
406   \   'let g:ale_testft_testlinter1_bar = [''abc'']',
407   \   'let g:ale_testft_testlinter1_foo = ''abc''',
408   \   ' ',
409   \ ]
410   \ + g:globals_lines
411   \ + g:command_header
412   \)
413
414 Execute (ALEInfoToFile should write to a file correctly):
415   let g:ale_testft_testlinter1_foo = 'abc'
416   let g:ale_testft_testlinter1_bar = ['abc']
417   let g:ale_testft2_testlinter2_foo = 123
418   let g:ale_testft2_testlinter2_bar = {'x': 'y'}
419
420   call ale#linter#Define('testft', g:testlinter1)
421   call ale#linter#Define('testft2', g:testlinter2)
422
423   let g:info_test_file = tempname()
424   execute 'ALEInfoToFile ' . fnameescape(g:info_test_file)
425
426   AssertEqual
427   \ [
428   \   ' Current Filetype: testft.testft2',
429   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
430   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
431   \   '  Ignored Linters: []',
432   \ ]
433   \ + g:fixer_lines
434   \ + [
435   \   ' Linter Variables:',
436   \   'let g:ale_testft2_testlinter2_bar = {''x'': ''y''}',
437   \   'let g:ale_testft2_testlinter2_foo = 123',
438   \   'let g:ale_testft_testlinter1_bar = [''abc'']',
439   \   'let g:ale_testft_testlinter1_foo = ''abc''',
440   \   ' ',
441   \ ]
442   \ + g:globals_lines
443   \ + g:command_header,
444   \ readfile(g:info_test_file)
445
446 Given testft.testft2 (Empty buffer with two filetypes):
447 Execute (ALEInfo should buffer-local linter variables):
448   let g:ale_testft2_testlinter2_foo = 123
449   let b:ale_testft2_testlinter2_foo = 456
450
451   call ale#linter#Define('testft', g:testlinter1)
452   call ale#linter#Define('testft2', g:testlinter2)
453
454   call CheckInfo(
455   \ [
456   \   ' Current Filetype: testft.testft2',
457   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
458   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
459   \   '  Ignored Linters: []',
460   \ ]
461   \ + g:fixer_lines
462   \ + [
463   \   ' Linter Variables:',
464   \   'let g:ale_testft2_testlinter2_foo = 123',
465   \   'let b:ale_testft2_testlinter2_foo = 456',
466   \   ' ',
467   \ ]
468   \ + g:globals_lines
469   \ + g:command_header
470   \)
471
472 Given testft.testft2 (Empty buffer with two filetypes):
473 Execute (ALEInfo should output linter aliases):
474   let g:testlinter1.aliases = ['testftalias1', 'testftalias2']
475   let g:testlinter2.aliases = ['testftalias3', 'testftalias4']
476
477   let g:ale_testft2_testlinter2_foo = 123
478   let b:ale_testft2_testlinter2_foo = 456
479
480   call ale#linter#Define('testft', g:testlinter1)
481   call ale#linter#Define('testft2', g:testlinter2)
482
483   call CheckInfo(
484   \ [
485   \   ' Current Filetype: testft.testft2',
486   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
487   \   '   Linter Aliases:',
488   \   '''testlinter1'' -> [''testftalias1'', ''testftalias2'']',
489   \   '''testlinter2'' -> [''testftalias3'', ''testftalias4'']',
490   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
491   \   '  Ignored Linters: []',
492   \ ]
493   \ + g:fixer_lines
494   \ + [
495   \   ' Linter Variables:',
496   \   'let g:ale_testft2_testlinter2_foo = 123',
497   \   'let b:ale_testft2_testlinter2_foo = 456',
498   \   ' ',
499   \ ]
500   \ + g:globals_lines
501   \ + g:command_header
502   \)
503
504 Given testft.testft2 (Empty buffer with two filetypes):
505 Execute (ALEInfo should return command history):
506   let b:ale_history = [
507   \ {'status': 'started', 'job_id': 347, 'command': 'first command'},
508   \ {'status': 'started', 'job_id': 347, 'command': ['/bin/bash', '\c', 'last command']},
509   \]
510
511   call ale#linter#Define('testft', g:testlinter1)
512   call ale#linter#Define('testft2', g:testlinter2)
513
514   call CheckInfo(
515   \ [
516   \   ' Current Filetype: testft.testft2',
517   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
518   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
519   \   '  Ignored Linters: []',
520   \ ]
521   \ + g:fixer_lines
522   \ + g:globals_lines
523   \ + g:command_header
524   \ + [
525   \   '',
526   \   '(started) ''first command''',
527   \   '(started) [''/bin/bash'', ''\c'', ''last command'']',
528   \ ]
529   \)
530
531 Given testft.testft2 (Empty buffer with two filetypes):
532 Execute (ALEInfo command history should print exit codes correctly):
533   let b:ale_history = [
534   \ {'status': 'finished', 'exit_code': 0, 'job_id': 347, 'command': 'first command'},
535   \ {'status': 'finished', 'exit_code': 1, 'job_id': 347, 'command': ['/bin/bash', '\c', 'last command']},
536   \]
537
538   call ale#linter#Define('testft', g:testlinter1)
539   call ale#linter#Define('testft2', g:testlinter2)
540
541   call CheckInfo(
542   \ [
543   \   ' Current Filetype: testft.testft2',
544   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
545   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
546   \   '  Ignored Linters: []',
547   \ ]
548   \ + g:fixer_lines
549   \ + g:globals_lines
550   \ + g:command_header
551   \ + [
552   \   '',
553   \   '(finished - exit code 0) ''first command''',
554   \   '(finished - exit code 1) [''/bin/bash'', ''\c'', ''last command'']',
555   \ ]
556   \)
557
558 Given testft.testft2 (Empty buffer with two filetypes):
559 Execute (ALEInfo command history should print command output if logging is on):
560   let g:ale_history_log_output = 1
561
562   let b:ale_history = [
563   \ {
564   \   'status': 'finished',
565   \   'exit_code': 0,
566   \   'job_id': 347,
567   \   'command': 'first command',
568   \   'output': ['some', 'first command output'],
569   \ },
570   \ {
571   \   'status': 'finished',
572   \   'exit_code': 1,
573   \   'job_id': 347,
574   \   'command': ['/bin/bash', '\c', 'last command'],
575   \   'output': ['different second command output'],
576   \ },
577   \ {
578   \   'status': 'finished',
579   \   'exit_code': 0,
580   \   'job_id': 347,
581   \   'command': 'command with no output',
582   \   'output': [],
583   \ },
584   \]
585
586   call ale#linter#Define('testft', g:testlinter1)
587   call ale#linter#Define('testft2', g:testlinter2)
588
589   call CheckInfo(
590   \ [
591   \   ' Current Filetype: testft.testft2',
592   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
593   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
594   \   '  Ignored Linters: []',
595   \ ]
596   \ + g:fixer_lines
597   \ + g:globals_lines
598   \ + g:command_header
599   \ + [
600   \   '',
601   \   '(finished - exit code 0) ''first command''',
602   \   '',
603   \   '<<<OUTPUT STARTS>>>',
604   \   'some',
605   \   'first command output',
606   \   '<<<OUTPUT ENDS>>>',
607   \   '',
608   \   '(finished - exit code 1) [''/bin/bash'', ''\c'', ''last command'']',
609   \   '',
610   \   '<<<OUTPUT STARTS>>>',
611   \   'different second command output',
612   \   '<<<OUTPUT ENDS>>>',
613   \   '',
614   \   '(finished - exit code 0) ''command with no output''',
615   \   '',
616   \   '<<<NO OUTPUT RETURNED>>>',
617   \ ]
618   \)
619
620 Execute (ALEInfo should include executable checks in the history):
621   call ale#linter#Define('testft', g:testlinter1)
622   call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo')
623   call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo')
624   call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable')
625   call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable')
626
627   call CheckInfo(
628   \ [
629   \   ' Current Filetype: testft.testft2',
630   \   'Available Linters: [''testlinter1'']',
631   \   '  Enabled Linters: [''testlinter1'']',
632   \   '  Ignored Linters: []',
633   \ ]
634   \ + g:fixer_lines
635   \ + g:globals_lines
636   \ + g:command_header
637   \ + [
638   \   '',
639   \   '(executable check - success) ' . (has('win32') ? 'cmd' : 'echo'),
640   \   '(executable check - failure) TheresNoWayThisIsExecutable',
641   \   '(executable check - failure) TheresNoWayThisIsExecutable',
642   \ ]
643   \)
644
645 Execute (The option for caching failing executable checks should work):
646   let g:ale_cache_executable_check_failures = 1
647   " Replace output for the variable we have to modify above.
648   call map(g:globals_lines, {
649   \  _, val -> val =~ 'ale_cache_executable_check_failures' ? 'let g:ale_cache_executable_check_failures = 1' : val
650   \})
651
652   call ale#linter#Define('testft', g:testlinter1)
653
654   call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo')
655   call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo')
656   call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable')
657   call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable')
658
659   call CheckInfo(
660   \ [
661   \   ' Current Filetype: testft.testft2',
662   \   'Available Linters: [''testlinter1'']',
663   \   '  Enabled Linters: [''testlinter1'']',
664   \   '  Ignored Linters: []',
665   \ ]
666   \ + g:fixer_lines
667   \ + g:globals_lines
668   \ + g:command_header
669   \ + [
670   \   '',
671   \   '(executable check - success) ' . (has('win32') ? 'cmd' : 'echo'),
672   \   '(executable check - failure) TheresNoWayThisIsExecutable',
673   \ ]
674   \)
675
676 Given testft (Empty buffer):
677 Execute (LSP errors for a linter should be outputted):
678   let g:ale_lsp_error_messages = {'testlinter1': ['foo', 'bar']}
679   call ale#linter#Define('testft', g:testlinter1)
680
681   call CheckInfo(
682   \ [
683   \   ' Current Filetype: testft',
684   \   'Available Linters: [''testlinter1'']',
685   \   '  Enabled Linters: [''testlinter1'']',
686   \   '  Ignored Linters: []',
687   \ ]
688   \ + g:fixer_lines
689   \ + g:globals_lines
690   \ + [
691   \   ' LSP Error Messages:',
692   \   '',
693   \   '(Errors for testlinter1)',
694   \   'foo',
695   \   'bar',
696   \ ]
697   \ + g:command_header
698   \)
699
700 Given testft (Empty buffer):
701 Execute (LSP errors for other linters shouldn't appear):
702   let g:ale_lsp_error_messages = {'testlinter2': ['foo']}
703   call ale#linter#Define('testft', g:testlinter1)
704
705   call CheckInfo(
706   \ [
707   \   ' Current Filetype: testft',
708   \   'Available Linters: [''testlinter1'']',
709   \   '  Enabled Linters: [''testlinter1'']',
710   \   '  Ignored Linters: []',
711   \ ]
712   \ + g:fixer_lines
713   \ + g:globals_lines
714   \ + g:command_header
715   \)
716
717 Given testft.testft2 (Empty buffer with two filetypes):
718 Execute (ALEInfo should include linter global options):
719   call ale#linter#Define('testft', g:testlinter1)
720   call ale#linter#Define('testft2', g:testlinter2)
721
722   " eg: like g:c_build_dir_names
723   let g:ale_testft_build_dir_names = ['build', 'bin']
724
725   let g:variables_lines = [
726   \ ' Linter Variables:',
727   \ 'let g:ale_testft_build_dir_names = [''build'', ''bin'']',
728   \ ' ',
729   \]
730
731   call CheckInfo(
732   \ [
733   \   ' Current Filetype: testft.testft2',
734   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
735   \   '  Enabled Linters: [''testlinter1'', ''testlinter2'']',
736   \   '  Ignored Linters: []',
737   \ ]
738   \ + g:fixer_lines
739   \ + g:variables_lines
740   \ + g:globals_lines
741   \ + g:command_header
742   \)
743
744 Given testft (Empty buffer with two filetypes):
745 Execute (ALEInfo should include linter global options for enabled linters):
746   call ale#linter#Define('testft', g:testlinter1)
747   call ale#linter#Define('testft', g:testlinter2)
748
749   let g:ale_linters = {'testft': ['testlinter1']}
750
751   " should not appear, since not enabled
752   let g:ale_testft_testlinter2_option = 'test'
753
754   let g:globals_lines[index(g:globals_lines, 'let g:ale_linters = {}')]
755   \ = 'let g:ale_linters = {''testft'': [''testlinter1'']}'
756
757   call CheckInfo(
758   \ [
759   \   ' Current Filetype: testft',
760   \   'Available Linters: [''testlinter1'', ''testlinter2'']',
761   \   '  Enabled Linters: [''testlinter1'']',
762   \   '  Ignored Linters: []',
763   \ ]
764   \ + g:fixer_lines
765   \ + g:globals_lines
766   \ + g:command_header
767   \)
768
769
770 Given ale-info (An ALEInfo buffer):
771 Execute(ALEInfo should not report information about its own window):
772   call CheckInfo([])