mirror of
https://github.com/dense-analysis/ale
synced 2024-12-28 09:02:24 +00:00
81c73da3b9
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.
179 lines
4.5 KiB
Plaintext
179 lines
4.5 KiB
Plaintext
Before:
|
|
Save g:ale_max_buffer_history_size
|
|
Save g:ale_history_log_output
|
|
Save g:ale_run_synchronously
|
|
Save g:ale_enabled
|
|
|
|
let g:ale_enabled = 1
|
|
let g:ale_run_synchronously = 1
|
|
|
|
unlet! b:ale_fixers
|
|
unlet! b:ale_enabled
|
|
unlet! b:ale_history
|
|
|
|
" Temporarily set the shell to /bin/sh, if it isn't already set that way.
|
|
" This will make it so the test works when running it directly.
|
|
let g:current_shell = &shell
|
|
|
|
if !has('win32')
|
|
let &shell = '/bin/sh'
|
|
endif
|
|
|
|
let g:history = []
|
|
let g:ale_buffer_info = {}
|
|
let g:ale_max_buffer_history_size = 20
|
|
let g:ale_history_log_output = 0
|
|
|
|
function! TestFixer(buffer)
|
|
return {'command': 'echo foo'}
|
|
endfunction
|
|
|
|
function! CollectResults(buffer, output)
|
|
return []
|
|
endfunction
|
|
|
|
call ale#linter#Define('foobar', {
|
|
\ 'name': 'testlinter',
|
|
\ 'callback': 'CollectResults',
|
|
\ 'executable': has('win32') ? 'cmd' : 'echo',
|
|
\ 'command': has('win32')
|
|
\ ? 'echo command history test'
|
|
\ : '/bin/sh -c ''echo command history test''',
|
|
\ 'read_buffer': 0,
|
|
\})
|
|
|
|
After:
|
|
Restore
|
|
|
|
unlet! g:expected_results
|
|
unlet! b:ale_fixers
|
|
unlet! b:ale_enabled
|
|
" Clear the history we changed.
|
|
unlet! b:ale_history
|
|
|
|
" Reset the shell back to what it was before.
|
|
let &shell = g:current_shell
|
|
unlet g:current_shell
|
|
let g:ale_history_enabled = 1
|
|
let g:ale_history_log_output = 0
|
|
unlet g:history
|
|
|
|
call ale#engine#Cleanup(bufnr(''))
|
|
call ale#linter#Reset()
|
|
|
|
let g:ale_buffer_info = {}
|
|
let g:ale_max_buffer_history_size = 20
|
|
delfunction TestFixer
|
|
delfunction CollectResults
|
|
|
|
Given foobar (Some imaginary filetype):
|
|
anything
|
|
|
|
Execute(History should be set when commands are run):
|
|
AssertEqual 'foobar', &filetype
|
|
|
|
let b:ale_history = []
|
|
ALELint
|
|
call ale#test#FlushJobs()
|
|
|
|
let g:history = filter(
|
|
\ copy(ale#history#Get(bufnr(''))),
|
|
\ 'v:val.job_id isnot# ''executable''',
|
|
\)
|
|
|
|
AssertEqual 1, len(g:history)
|
|
AssertEqual
|
|
\ ['command', 'exit_code', 'job_id', 'status'],
|
|
\ sort(keys(g:history[0]))
|
|
|
|
if has('win32')
|
|
AssertEqual 'cmd /s/c "echo command history test"', g:history[0].command
|
|
else
|
|
AssertEqual ['/bin/sh', '-c', '/bin/sh -c ''echo command history test'''], g:history[0].command
|
|
endif
|
|
|
|
AssertEqual 'finished', g:history[0].status
|
|
AssertEqual 0, g:history[0].exit_code
|
|
" The Job ID will change each time, but we can check the type.
|
|
AssertEqual type(1), type(g:history[0].job_id)
|
|
|
|
Execute(History should be not set when disabled):
|
|
AssertEqual 'foobar', &filetype
|
|
|
|
let g:ale_history_enabled = 0
|
|
|
|
ALELint
|
|
call ale#test#FlushJobs()
|
|
|
|
AssertEqual [], ale#history#Get(bufnr(''))
|
|
|
|
Execute(History should include command output if logging is enabled):
|
|
AssertEqual 'foobar', &filetype
|
|
|
|
let g:ale_history_log_output = 1
|
|
|
|
" Retry this test until it works. This one can randomly fail.
|
|
let b:ale_history = []
|
|
ALELint
|
|
call ale#test#FlushJobs()
|
|
|
|
let g:history = ale#history#Get(bufnr(''))
|
|
|
|
AssertEqual 1, len(g:history)
|
|
AssertEqual
|
|
\ ['command history test'],
|
|
\ map(
|
|
\ copy(get(g:history[0], 'output', [])),
|
|
\ 'substitute(v:val, ''[\r ]*$'', '''', ''g'')'
|
|
\ )
|
|
|
|
Execute(History items should be popped after going over the max):
|
|
let b:ale_history = map(range(20), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}')
|
|
|
|
call ale#history#Add(bufnr(''), 'started', 347, 'last command')
|
|
|
|
AssertEqual
|
|
\ (
|
|
\ map(range(1, 19), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}')
|
|
\ + [{'status': 'started', 'job_id': 347, 'command': 'last command'}]
|
|
\ ),
|
|
\ ale#history#Get(bufnr(''))
|
|
|
|
Execute(Nothing should be added to history if the size is too low):
|
|
let g:ale_max_buffer_history_size = 0
|
|
|
|
call ale#history#Add(bufnr(''), 'started', 347, 'last command')
|
|
|
|
AssertEqual [], ale#history#Get(bufnr(''))
|
|
|
|
let g:ale_max_buffer_history_size = -2
|
|
|
|
call ale#history#Add(1, 'started', 347, 'last command')
|
|
|
|
AssertEqual [], ale#history#Get(bufnr(''))
|
|
|
|
Given foobar(Some file with an imaginary filetype):
|
|
a
|
|
b
|
|
c
|
|
|
|
Execute(The history should be updated when fixers are run):
|
|
call ale#test#SetFilename('dummy.txt')
|
|
|
|
let b:ale_fixers = {'foobar': ['TestFixer']}
|
|
let b:ale_enabled = 0
|
|
|
|
ALEFix
|
|
|
|
AssertEqual ['started'], map(copy(b:ale_history), 'v:val.status')
|
|
|
|
call ale#test#FlushJobs()
|
|
|
|
AssertEqual ['finished'], map(copy(b:ale_history), 'v:val.status')
|
|
|
|
if has('win32')
|
|
AssertEqual 'cmd /s/c "echo foo ', split(b:ale_history[0].command, '<')[0]
|
|
else
|
|
AssertEqual '/bin/sh -c echo foo ', split(join(b:ale_history[0].command), '<')[0]
|
|
endif
|