ale/test/test_autocmd_commands.vader

215 lines
6.9 KiB
Plaintext

Before:
function! CheckAutocmd(group)
call ale#autocmd#InitAuGroups()
redir => l:output
execute 'silent! autocmd ' . a:group
redir END
let l:matches = []
let l:header = ''
" Some event names have aliases, and NeoVim and Vim produce
" different output. The names are remapped to fix this.
let l:event_name_corrections = {
\ 'BufWrite': 'BufWritePre',
\ 'BufRead': 'BufReadPost',
\}
" autocmd commands are split across two lines in output, so we
" must merge the lines back into one simple line.
for l:line in split(l:output, "\n")
if l:line =~# '^ALE' && split(l:line)[0] ==# a:group
let l:header = split(l:line)[1]
let l:header = get(l:event_name_corrections, l:header, l:header)
elseif !empty(l:header)
" There's an extra line for buffer events, and we should only look
" for the one matching the current buffer.
if l:line =~# '<buffer=' . bufnr('') . '>'
let l:header .= ' <buffer>'
else
call add(l:matches, join(split(l:header . l:line)))
let l:header = ''
endif
endif
endfor
call sort(l:matches)
return l:matches
endfunction
Save g:ale_enabled
Save g:ale_lint_on_text_changed
Save g:ale_lint_on_insert_leave
Save g:ale_pattern_options_enabled
Save g:ale_lint_on_enter
Save g:ale_lint_on_filetype_changed
Save g:ale_lint_on_save
Save g:ale_echo_cursor
Save g:ale_fix_on_save
Save g:ale_completion_enabled
After:
delfunction CheckAutocmd
Restore
if g:ale_completion_enabled
call ale#completion#Enable()
else
call ale#completion#Disable()
endif
call ale#autocmd#InitAuGroups()
Execute (g:ale_lint_on_text_changed = 0 should bind no events):
let g:ale_lint_on_text_changed = 0
AssertEqual [], CheckAutocmd('ALERunOnTextChangedGroup')
Execute (g:ale_lint_on_text_changed = 1 bind both events):
let g:ale_lint_on_text_changed = 1
AssertEqual [
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)'
\], CheckAutocmd('ALERunOnTextChangedGroup')
Execute (g:ale_lint_on_text_changed = 'always' should bind both events):
let g:ale_lint_on_text_changed = 'always'
AssertEqual [
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)'
\], CheckAutocmd('ALERunOnTextChangedGroup')
Execute (g:ale_lint_on_text_changed = 'normal' should bind only TextChanged):
let g:ale_lint_on_text_changed = 'normal'
AssertEqual [
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
\], CheckAutocmd('ALERunOnTextChangedGroup')
Execute (g:ale_lint_on_text_changed = 'insert' should bind only TextChangedI):
let g:ale_lint_on_text_changed = 'insert'
AssertEqual [
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)',
\], CheckAutocmd('ALERunOnTextChangedGroup')
Execute (g:ale_lint_on_insert_leave = 1 should bind InsertLeave):
let g:ale_lint_on_insert_leave = 1
AssertEqual [
\ 'InsertLeave * call ale#Queue(0)',
\], CheckAutocmd('ALERunOnInsertLeave')
Execute (g:ale_lint_on_insert_leave = 0 should bind no events):
let g:ale_lint_on_insert_leave = 0
AssertEqual [], CheckAutocmd('ALERunOnInsertLeave')
Execute (g:ale_pattern_options_enabled = 1 should bind BufReadPost and BufEnter):
let g:ale_pattern_options_enabled = 1
AssertEqual [
\ 'BufEnter * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\ 'BufReadPost * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALEPatternOptionsGroup')
Execute (g:ale_pattern_options_enabled = 0 should still bind events):
let g:ale_pattern_options_enabled = 0
AssertEqual [
\ 'BufEnter * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\ 'BufReadPost * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALEPatternOptionsGroup')
Execute (g:ale_enabled = 0 should still bind pattern events):
let g:ale_enabled = 0
AssertEqual [
\ 'BufEnter * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\ 'BufReadPost * call ale#pattern_options#SetOptions(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALEPatternOptionsGroup')
Execute (g:ale_lint_on_enter = 0 should bind only the BufEnter event):
let g:ale_lint_on_enter = 0
AssertEqual
\ ['BufEnter * call ale#events#EnterEvent(str2nr(expand(''<abuf>'')))'],
\ CheckAutocmd('ALERunOnEnterGroup')
Execute (g:ale_lint_on_enter = 1 should bind the required events):
let g:ale_lint_on_enter = 1
AssertEqual [
\ 'BufEnter * call ale#events#EnterEvent(str2nr(expand(''<abuf>'')))',
\ 'BufReadPost * call ale#Queue(0, ''lint_file'', str2nr(expand(''<abuf>'')))',
\ 'BufWinEnter * call ale#Queue(0, ''lint_file'', str2nr(expand(''<abuf>'')))',
\ 'FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnEnterGroup')
Execute (g:ale_lint_on_filetype_changed = 0 should bind no events):
let g:ale_lint_on_filetype_changed = 0
AssertEqual [], CheckAutocmd('ALERunOnFiletypeChangeGroup')
Execute (g:ale_lint_on_filetype_changed = 1 should bind the FileType event):
let g:ale_lint_on_filetype_changed = 1
AssertEqual
\ [
\ 'FileType * call ale#events#FileTypeEvent( '
\ . 'str2nr(expand(''<abuf>'')), '
\ . 'expand(''<amatch>'')'
\ . ')',
\ ],
\ CheckAutocmd('ALERunOnFiletypeChangeGroup')
Execute (The SaveEvent should always be bound):
let g:ale_enabled = 0
let g:ale_lint_on_save = 0
let g:ale_fix_on_save = 0
AssertEqual [
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnSaveGroup')
Execute (g:ale_echo_cursor = 0 should bind no events):
let g:ale_echo_cursor = 0
AssertEqual [], CheckAutocmd('ALECursorGroup')
Execute (g:ale_echo_cursor = 1 should bind cursor events):
let g:ale_echo_cursor = 1
AssertEqual [
\ 'CursorHold * call ale#cursor#EchoCursorWarningWithDelay()',
\ 'CursorMoved * call ale#cursor#EchoCursorWarningWithDelay()',
\ 'InsertLeave * call ale#cursor#EchoCursorWarning()',
\], CheckAutocmd('ALECursorGroup')
Execute (ALECleanupGroup should include the right commands):
AssertEqual [
\ 'BufDelete * call ale#engine#Cleanup(str2nr(expand(''<abuf>'')))',
\ 'QuitPre * call ale#events#QuitEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALECleanupGroup')
Execute(Enabling completion should set up autocmd events correctly):
let g:ale_completion_enabled = 0
call ale#completion#Enable()
AssertEqual [
\ 'CompleteDone * call ale#completion#Done()',
\ 'TextChangedI * call ale#completion#Queue()',
\], CheckAutocmd('ALECompletionGroup')
AssertEqual 1, g:ale_completion_enabled
Execute(Disabling completion should remove autocmd events correctly):
let g:ale_completion_enabled = 1
call ale#completion#Enable()
call ale#completion#Disable()
AssertEqual [], CheckAutocmd('ALECompletionGroup')
AssertEqual 0, g:ale_completion_enabled