From 6ec965c8e4618c14b05b05bd554b3fed9c1191e1 Mon Sep 17 00:00:00 2001 From: w0rp Date: Tue, 30 May 2017 21:32:51 +0100 Subject: #591 Support fixing files on save --- test/test_ale_fix.vader | 108 ++++++++++++++++++++++++++++++++++++- test/test_ale_init_au_groups.vader | 23 +++++++- 2 files changed, 129 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader index dfe79443..b4ffc062 100644 --- a/test/test_ale_fix.vader +++ b/test/test_ale_fix.vader @@ -1,6 +1,15 @@ Before: - Save g:ale_fixers, &shell, g:ale_enabled + Save g:ale_fixers + Save &shell + Save g:ale_enabled + Save g:ale_fix_on_save + Save g:ale_lint_on_save + Save g:ale_echo_cursor + + silent! cd /testplugin/test + let g:ale_enabled = 0 + let g:ale_echo_cursor = 0 let g:ale_run_synchronously = 1 let g:ale_fixers = { \ 'testft': [], @@ -33,6 +42,19 @@ Before: return ['a', 'b'] endfunction + function! TestCallback(buffer, output) + return [{'lnum': 1, 'col': 1, 'text': 'xxx'}] + endfunction + + function! SetUpLinters() + call ale#linter#Define('testft', { + \ 'name': 'testlinter', + \ 'callback': 'TestCallback', + \ 'executable': 'true', + \ 'command': 'true', + \}) + endfunction + After: Restore unlet! g:ale_run_synchronously @@ -44,7 +66,14 @@ After: delfunction CatLine delfunction ReplaceWithTempFile delfunction RemoveLastLine + delfunction TestCallback + delfunction SetUpLinters call ale#fix#registry#ResetToDefaults() + call ale#linter#Reset() + + if filereadable('fix_test_file') + call delete('fix_test_file') + endif Given testft (A file with three lines): a @@ -185,3 +214,80 @@ Execute(ALEFix should user buffer-local fixer settings): Expect(There should be only two lines): a b + +Given testft (A file with three lines): + a + b + c + +Execute(ALEFix should save files on the save event): + let g:ale_fix_on_save = 1 + let g:ale_lint_on_save = 1 + let g:ale_enabled = 1 + + noautocmd silent file fix_test_file + + let g:ale_fixers.testft = ['AddDollars'] + + call SetUpLinters() + call ale#events#SaveEvent() + + " We should save the file. + Assert filereadable('fix_test_file'), 'The file cannot be read' + AssertEqual ['$a', '$b', '$c'], readfile('fix_test_file') + Assert !&modified, 'The was marked as ''modified''' + + " We have run the linter. + AssertEqual [{ + \ 'bufnr': bufnr('%'), + \ 'lnum': 1, + \ 'vcol': 0, + \ 'col': 1, + \ 'text': 'xxx', + \ 'type': 'E', + \ 'nr': -1, + \ 'pattern': '', + \ 'valid': 1, + \}], getloclist(0) + +Expect(The buffer should be modified): + $a + $b + $c + +Given testft (A file with three lines): + a + b + c + +Execute(ALEFix should still lint with no linters to be applied): + let g:ale_fix_on_save = 1 + let g:ale_lint_on_save = 1 + let g:ale_enabled = 1 + + noautocmd silent file fix_test_file + + let g:ale_fixers.testft = [] + + call SetUpLinters() + call ale#events#SaveEvent() + + Assert !filereadable('fix_test_file'), 'The file should not have been saved' + + " We have run the linter. + AssertEqual [{ + \ 'bufnr': bufnr('%'), + \ 'lnum': 1, + \ 'vcol': 0, + \ 'col': 1, + \ 'text': 'xxx', + \ 'type': 'E', + \ 'nr': -1, + \ 'pattern': '', + \ 'valid': 1, + \}], getloclist(0) + +Expect(The buffer should be the same): + a + b + c diff --git a/test/test_ale_init_au_groups.vader b/test/test_ale_init_au_groups.vader index 0134f762..532232b3 100644 --- a/test/test_ale_init_au_groups.vader +++ b/test/test_ale_init_au_groups.vader @@ -31,6 +31,7 @@ Before: 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 @@ -38,6 +39,7 @@ Before: Save g:ale_lint_on_filetype_changed Save g:ale_lint_on_save Save g:ale_echo_cursor + Save g:ale_fix_on_save After: delfunction CheckAutocmd @@ -138,14 +140,33 @@ Execute (g:ale_lint_on_filetype_changed = 1 should bind FileType, and required b 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 [ - \ 'BufWritePre * call ale#Queue(0, ''lint_file'')', + \ 'BufWritePre * call ale#events#SaveEvent()', + \], 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 [ + \ 'BufWritePre * call ale#events#SaveEvent()', + \], 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 [ + \ 'BufWritePre * call ale#events#SaveEvent()', \], CheckAutocmd('ALERunOnSaveGroup') Execute (g:ale_echo_cursor = 0 should bind no events): -- cgit v1.2.3