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.
4 Save g:ale_run_synchronously
5 Save g:ale_set_lists_synchronously
9 let g:ale_buffer_info = {}
10 let g:ale_run_synchronously = 1
11 unlet! g:ale_run_synchronously_callbacks
12 let g:ale_set_lists_synchronously = 1
13 let b:ale_save_event_fired = 0
15 let g:buffer_result = [
19 \ 'text': 'buffer error',
25 \ 'text': 'buffer warning',
30 function! LintFileCallback(buffer, output)
35 \ 'text': 'file warning',
41 \ 'text': 'file error',
47 function! BufferCallback(buffer, output)
48 return deepcopy(g:buffer_result)
51 function! GetSimplerLoclist()
54 for l:item in ale#test#GetLoclistWithoutNewerKeys()
56 \ 'lnum': l:item.lnum,
58 \ 'text': l:item.text,
59 \ 'type': l:item.type,
66 call ale#linter#Define('foobar', {
67 \ 'name': 'lint_file_linter',
68 \ 'callback': 'LintFileCallback',
69 \ 'executable': has('win32') ? 'cmd' : 'echo',
74 call ale#linter#Define('foobar', {
75 \ 'name': 'buffer_linter',
76 \ 'callback': 'BufferCallback',
77 \ 'executable': has('win32') ? 'cmd' : 'echo',
82 let g:filename = tempname()
83 call writefile([], g:filename)
84 call ale#test#SetFilename(g:filename)
87 if !g:ale_run_synchronously
88 call ale#engine#Cleanup(bufnr(''))
93 unlet! g:ale_run_synchronously_callbacks
94 unlet! b:ale_save_event_fired
97 let g:ale_buffer_info = {}
98 call ale#linter#Reset()
99 call setloclist(0, [])
100 delfunction LintFileCallback
101 delfunction BufferCallback
103 if filereadable(g:filename)
104 call delete(g:filename)
109 Given foobar (Some imaginary filetype):
114 Execute(Running linters without 'lint_file' should run only buffer linters):
116 call ale#test#FlushJobs()
122 \ 'text': 'buffer error',
128 \ 'text': 'buffer warning',
131 \], GetSimplerLoclist()
133 Execute(Running linters with 'lint_file' should run all linters):
134 Assert filereadable(expand('%:p')), 'The file was not readable'
136 call ale#Queue(0, 'lint_file')
137 call ale#test#FlushJobs()
143 \ 'text': 'buffer error',
149 \ 'text': 'file warning',
155 \ 'text': 'buffer warning',
161 \ 'text': 'file error',
164 \], GetSimplerLoclist()
166 Execute(Linter errors from files should be kept):
167 Assert filereadable(expand('%:p')), 'The file was not readable'
169 call ale#Queue(0, 'lint_file')
170 call ale#test#FlushJobs()
172 " Change the results for the buffer callback.
173 let g:buffer_result = [
177 \ 'text': 'new buffer error',
183 call ale#test#FlushJobs()
189 \ 'text': 'new buffer error',
195 \ 'text': 'file warning',
201 \ 'text': 'file error',
204 \], GetSimplerLoclist()
206 Execute(Linter errors from files should be kept when no other linters are run):
207 let g:ale_linters = {'foobar': ['lint_file_linter']}
208 Assert filereadable(expand('%:p')), 'The file was not readable'
210 call ale#Queue(0, 'lint_file')
211 call ale#test#FlushJobs()
217 \ 'text': 'file warning',
223 \ 'text': 'file error',
226 \], GetSimplerLoclist()
234 \ 'text': 'file warning',
240 \ 'text': 'file error',
243 \], GetSimplerLoclist()
245 Execute(The Save event should respect the buffer number):
246 let g:ale_linters = {'foobar': ['lint_file_linter']}
247 Assert filereadable(expand('%:p')), 'The file was not readable'
249 call ale#events#SaveEvent(bufnr('') + 1)
250 call ale#test#FlushJobs()
252 " We shouldn't get any prblems yet.
253 AssertEqual [], GetSimplerLoclist()
255 call ale#events#SaveEvent(bufnr(''))
256 call ale#test#FlushJobs()
258 " We should get them now we used the right buffer number.
263 \ 'text': 'file warning',
269 \ 'text': 'file error',
272 \], GetSimplerLoclist()
274 Execute(The Save event should set b:ale_save_event_fired to 1):
275 let g:ale_lint_on_save = 1
276 let b:ale_enabled = 1
278 call ale#linter#Reset()
279 call ale#events#SaveEvent(bufnr(''))
280 call ale#test#FlushJobs()
282 " This flag needs to be set so windows can be opened, etc.
283 AssertEqual 1, b:ale_save_event_fired
285 Execute(b:ale_save_event_fired should be set to 0 when results are set):
286 let b:ale_save_event_fired = 1
288 call ale#engine#SetResults(bufnr(''), [])
289 call ale#test#FlushJobs()
291 AssertEqual 0, b:ale_save_event_fired
293 Execute(lint_file linters should stay running after checking without them):
294 let g:ale_run_synchronously = 0
296 " Run all linters, then just the buffer linters.
297 call ale#Queue(0, 'lint_file')
300 " The lint_file linter should still be running.
302 \ ['lint_file_linter', 'buffer_linter'],
303 \ map(copy(g:ale_buffer_info[bufnr('')].active_linter_list), 'v:val.name')
304 " We should have 1 job for each linter.
307 \ len(keys(get(get(ale#command#GetData(), bufnr(''), {}), 'jobs', {})))
309 call ale#test#WaitForJobs(2000)
311 Execute(The save event should not lint the buffer when ALE is disabled):
312 let g:ale_enabled = 0
313 call ale#events#SaveEvent(bufnr(''))
314 call ale#test#FlushJobs()
316 AssertEqual [], GetSimplerLoclist()
317 AssertEqual 0, b:ale_save_event_fired