Before: let b:fake_mode = 'r' let b:feedkeys_calls = [] " Mock mode() and feedkeys() for the check function! ale#util#Mode(...) abort return b:fake_mode endfunction function! ale#util#FeedKeys(...) abort call add(b:feedkeys_calls, a:000) endfunction function! CheckError(mode, message, expected_list) abort let b:fake_mode = a:mode echom a:message call ale#events#BufWinLeave() AssertEqual [], b:feedkeys_calls sleep 1ms AssertEqual a:expected_list, b:feedkeys_calls endfunction After: unlet! b:fake_mode unlet! b:feedkeys_calls unlet! g:ale_list_window_selection delfunction CheckError runtime autoload/ale/util.vim Execute(The BufWinLeave event function should hide E924 errors): " For some reason, this test fails the first time when running in NeoVim " in Docker, so just execute this twice. echom 'E924' call ale#events#BufWinLeave() sleep 1ms let b:feedkeys_calls = [] call CheckError('r', 'E924', [["\", 'n']]) Execute(The BufWinLeave event function should hide E925 errors): call CheckError('r', 'E925', [["\", 'n']]) Execute(The BufWinLeave event function should hide E926 errors): call CheckError('r', 'E926', [["\", 'n']]) Execute(The BufWinLeave event function should ignore other errors): call CheckError('r', 'E999', []) Execute(The BufWinLeave event function not send keys for other modes): call CheckError('n', 'E924', []) Execute(The last window selection should always be cleared by the timer): let g:ale_list_window_selection = [347, 2] " The message and mode shouldn't matter, we should still clear the variable. echom 'xyz' let b:fake_mode = 'n' call ale#events#BufWinLeave() sleep 1ms Assert !has_key(g:, 'ale_list_window_selection') Given qf(A quickfix list with some errors): test.txt|23 col 9 warning| Some warning test.txt|72 col 25 error| Some column error test.txt|93 error| Some line error Execute(Line and column numbers should be parsed by the quickfix event function): call setpos('.', [bufnr(''), 2, 1, 0]) call ale#events#ParseLoclistWindowItemPosition() AssertEqual [72, 25], g:ale_list_window_selection Execute(Just Line numbers should be parsed by the quickfix event function): call setpos('.', [bufnr(''), 3, 1, 0]) call ale#events#ParseLoclistWindowItemPosition() AssertEqual [93, 1], g:ale_list_window_selection Given python(Some example Python file): class FooBar: def whatever(self): self.do_something() Execute(We should jump to the window selection after cancelling the errors): call setpos('.', [bufnr(''), 1, 1, 0]) let g:ale_list_window_selection = [3, 9] echom 'E925' call ale#events#BufWinLeave() sleep 1ms AssertEqual [3, 9], getcurpos()[1:2]