Before: Save g:ale_run_synchronously Save g:ale_linters Save g:ale_history_log_output Save g:ale_cpp_gcc_options silent! cd /testplugin/test/c_tests let g:ale_run_synchronously = 1 let g:ale_linters = {'c': ['gcc'], 'cpp': ['g++']} let g:ale_history_log_output = 1 let g:ale_cpp_gcc_options = '-Wall' function! GetCommandOutput() if empty(g:ale_buffer_info[bufnr('')].history) return '' endif return join(g:ale_buffer_info[bufnr('')].history[-1].output, "\n") endfunction After: Restore delfunction GetCommandOutput call ale#linter#Reset() call ale#engine#SetResults(bufnr(''), []) call ale#cleanup#Buffer(bufnr('')) Given c (A test C file): int main() { return 0 } Execute(Basic errors should be returned for GCC for C files): call ale#Lint() AssertEqual [{ \ 'lnum': 3, \ 'col': 1, \ }], \ map(getloclist(0), '{''lnum'': v:val.lnum, ''col'': v:val.col}'), \ 'No errors returned! Got: ' . GetCommandOutput() Assert match(getloclist(0)[0].text, '\v^expected .*;.* before .*\}.* token$') >= 0, \ 'Invalid error text: ' . getloclist(0)[0].text Given cpp (A test C++ file): int main() { return 0 } Execute(Basic errors should be returned for GCC for C++ files): call ale#Lint() AssertEqual [{ \ 'lnum': 3, \ 'col': 1, \ }], \ map(getloclist(0), '{''lnum'': v:val.lnum, ''col'': v:val.col}'), \ 'No errors returned! Got: ' . GetCommandOutput() Assert match(getloclist(0)[0].text, '\v^expected .*;.* before .*\}.* token$') >= 0, \ 'Invalid error text: ' . getloclist(0)[0].text