diff options
Diffstat (limited to 'test/test_autocmd_commands.vader')
-rw-r--r-- | test/test_autocmd_commands.vader | 224 |
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 |