ale/test/smoke_test.vader
w0rp 81c73da3b9
#2132 - lint and fix with ale#command#Run
A new function is added here which will later be modified for public use
in linter and fixer callbacks. All linting and fixing now goes through
this new function, to prove that it works in all cases.
2019-02-06 22:00:11 +00:00

180 lines
4.0 KiB
Plaintext

Before:
Save g:ale_set_lists_synchronously
Save g:ale_buffer_info
Save &shell
let g:ale_buffer_info = {}
let g:ale_set_lists_synchronously = 1
function! TestCallback(buffer, output)
" Windows adds extra spaces to the text from echo.
return [{
\ 'lnum': 2,
\ 'col': 3,
\ 'text': substitute(a:output[0], ' *$', '', ''),
\}]
endfunction
function! TestCallback2(buffer, output)
return [{
\ 'lnum': 3,
\ 'col': 4,
\ 'text': substitute(a:output[0], ' *$', '', ''),
\}]
endfunction
" Running the command in another subshell seems to help here.
call ale#linter#Define('foobar', {
\ 'name': 'testlinter',
\ 'callback': 'TestCallback',
\ 'executable': has('win32') ? 'cmd' : 'echo',
\ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
\})
After:
Restore
unlet! g:i
unlet! g:results
unlet! g:expected_results
delfunction TestCallback
delfunction TestCallback2
call ale#engine#Cleanup(bufnr(''))
call ale#linter#Reset()
Given foobar (Some imaginary filetype):
foo
bar
baz
Execute(Linters should run with the default options):
AssertEqual 'foobar', &filetype
let g:expected_results = [{
\ 'bufnr': bufnr('%'),
\ 'lnum': 2,
\ 'vcol': 0,
\ 'col': 3,
\ 'text': 'foo bar',
\ 'type': 'E',
\ 'nr': -1,
\ 'pattern': '',
\ 'valid': 1,
\ }]
" Try the test a few times over in NeoVim 0.3 or Windows,
" where tests fail randomly.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
call ale#Queue(0, '')
call ale#test#WaitForJobs(2000)
let g:results = ale#test#GetLoclistWithoutModule()
if g:results == g:expected_results
break
endif
endfor
AssertEqual g:expected_results, g:results
Execute(Linters should run in PowerShell too):
if has('win32')
set shell=powershell
AssertEqual 'foobar', &filetype
" Replace the callback to handle two lines.
function! TestCallback(buffer, output)
" Windows adds extra spaces to the text from echo.
return [
\ {
\ 'lnum': 1,
\ 'col': 3,
\ 'text': substitute(a:output[0], ' *$', '', ''),
\ },
\ {
\ 'lnum': 2,
\ 'col': 3,
\ 'text': substitute(a:output[1], ' *$', '', ''),
\ },
\]
endfunction
" Recreate the command string to use &&, which PowerShell does not support.
call ale#linter#Reset()
call ale#linter#Define('foobar', {
\ 'name': 'testlinter',
\ 'callback': 'TestCallback',
\ 'executable': 'cmd',
\ 'command': 'echo foo && echo bar',
\})
call ale#Queue(0, '')
call ale#test#WaitForJobs(4000)
AssertEqual [
\ {
\ 'bufnr': bufnr('%'),
\ 'lnum': 1,
\ 'vcol': 0,
\ 'col': 3,
\ 'text': 'foo',
\ 'type': 'E',
\ 'nr': -1,
\ 'pattern': '',
\ 'valid': 1,
\ },
\ {
\ 'bufnr': bufnr('%'),
\ 'lnum': 2,
\ 'vcol': 0,
\ 'col': 3,
\ 'text': 'bar',
\ 'type': 'E',
\ 'nr': -1,
\ 'pattern': '',
\ 'valid': 1,
\ },
\], ale#test#GetLoclistWithoutModule()
endif
Execute(Previous errors should be removed when linters change):
call ale#Queue(0, '')
call ale#test#WaitForJobs(2000)
call ale#linter#Reset()
call ale#linter#Define('foobar', {
\ 'name': 'testlinter2',
\ 'callback': 'TestCallback2',
\ 'executable': has('win32') ? 'cmd' : 'echo',
\ 'command': has('win32') ? 'echo baz boz' : '/bin/sh -c ''echo baz boz''',
\})
let g:expected_results = [{
\ 'bufnr': bufnr('%'),
\ 'lnum': 3,
\ 'vcol': 0,
\ 'col': 4,
\ 'text': 'baz boz',
\ 'type': 'E',
\ 'nr': -1,
\ 'pattern': '',
\ 'valid': 1,
\}]
" Try the test a few times over in NeoVim 0.3 or Windows,
" where tests fail randomly.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
call ale#Queue(0, '')
call ale#test#WaitForJobs(2000)
let g:results = ale#test#GetLoclistWithoutModule()
if g:results == g:expected_results
break
endif
endfor
AssertEqual g:expected_results, g:results