Before: Save g:ale_max_buffer_history_size Save g:ale_history_enabled 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 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