summaryrefslogtreecommitdiff
path: root/test/test_autocmd_commands.vader
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_autocmd_commands.vader')
-rw-r--r--test/test_autocmd_commands.vader224
1 files changed, 224 insertions, 0 deletions
diff --git a/test/test_autocmd_commands.vader b/test/test_autocmd_commands.vader
new file mode 100644
index 00000000..17e3b16d
--- /dev/null
+++ b/test/test_autocmd_commands.vader
@@ -0,0 +1,224 @@
+Before:
+ function! CheckAutocmd(group)
+ call ALEInitAuGroups()
+ 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 ALEInitAuGroups()
+
+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 = 0 should bind no events):
+ let g:ale_pattern_options_enabled = 0
+
+ AssertEqual [], CheckAutocmd('ALEPatternOptionsGroup')
+
+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()',
+ \ 'BufReadPost * call ale#pattern_options#SetOptions()',
+ \], 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 (g:ale_lint_on_save = 0 should bind no events):
+ let g:ale_lint_on_save = 0
+ let g:ale_fix_on_save = 0
+
+ AssertEqual [], CheckAutocmd('ALERunOnSaveGroup')
+
+Execute (g:ale_lint_on_save = 1 should bind no events):
+ let g:ale_lint_on_save = 1
+ let g:ale_fix_on_save = 0
+
+ AssertEqual [
+ \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
+ \], CheckAutocmd('ALERunOnSaveGroup')
+
+Execute (g:ale_lint_on_save = 0 and g:ale_fix_on_save = 1 should bind events):
+ let g:ale_lint_on_save = 0
+ let g:ale_fix_on_save = 1
+
+ AssertEqual [
+ \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
+ \], CheckAutocmd('ALERunOnSaveGroup')
+
+Execute (g:ale_fix_on_save = 1 should bind events even when ALE is disabled):
+ let g:ale_enabled = 0
+ let g:ale_lint_on_save = 0
+ let g:ale_fix_on_save = 1
+
+ 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 [
+ \ 'BufUnload * 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