ale/test/test_history_saving.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

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