diff --git a/ale_linters/asciidoc/write-good.vim b/ale_linters/asciidoc/writegood.vim similarity index 100% rename from ale_linters/asciidoc/write-good.vim rename to ale_linters/asciidoc/writegood.vim diff --git a/ale_linters/awk/gawk.vim b/ale_linters/awk/gawk.vim index 3e9987b3..8b60815f 100644 --- a/ale_linters/awk/gawk.vim +++ b/ale_linters/awk/gawk.vim @@ -15,9 +15,9 @@ function! ale_linters#awk#gawk#GetCommand(buffer) abort " note the --source 'BEGIN ...' is to prevent " gawk from attempting to execute the body of the script " it is linting. - return ale_linters#awk#gawk#GetExecutable(a:buffer) + return ale#Escape(ale_linters#awk#gawk#GetExecutable(a:buffer)) \ . " --source 'BEGIN { exit } END { exit 1 }'" - \ . ' ' . ale#Var(a:buffer, 'awk_gawk_options') + \ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options')) \ . ' ' . '-f %t --lint /dev/null' endfunction diff --git a/ale_linters/cs/mcs.vim b/ale_linters/cs/mcs.vim index b5c4054a..8738026d 100644 --- a/ale_linters/cs/mcs.vim +++ b/ale_linters/cs/mcs.vim @@ -1,7 +1,11 @@ let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '') function! ale_linters#cs#mcs#GetCommand(buffer) abort - return 'mcs -unsafe --parse ' . ale#Var(a:buffer, 'cs_mcs_options') . ' %t' + let l:options = ale#Var(a:buffer, 'cs_mcs_options') + + return 'mcs -unsafe --parse' + \ . (!empty(l:options) ? ' ' . l:options : '') + \ . ' %t' endfunction function! ale_linters#cs#mcs#Handle(buffer, lines) abort diff --git a/ale_linters/cs/mcsc.vim b/ale_linters/cs/mcsc.vim index 8e84620c..1561661e 100644 --- a/ale_linters/cs/mcsc.vim +++ b/ale_linters/cs/mcsc.vim @@ -29,16 +29,16 @@ function! ale_linters#cs#mcsc#GetCommand(buffer) abort \ : '' " register temporary module target file with ale - let l:out = ale#util#Tempname() - call ale#engine#ManageFile(a:buffer, l:out) + " register temporary module target file with ALE. + let l:out = ale#engine#CreateFile(a:buffer) " The code is compiled as a module and the output is redirected to a " temporary file. return ale#path#CdString(s:GetWorkingDirectory(a:buffer)) \ . 'mcs -unsafe' - \ . ' ' . ale#Var(a:buffer, 'cs_mcsc_options') - \ . ' ' . l:lib_option - \ . ' ' . l:r_option + \ . ale#Pad(ale#Var(a:buffer, 'cs_mcsc_options')) + \ . ale#Pad(l:lib_option) + \ . ale#Pad(l:r_option) \ . ' -out:' . l:out \ . ' -t:module' \ . ' -recurse:' . ale#Escape('*.cs') diff --git a/ale_linters/fuse/fusionlint.vim b/ale_linters/fuse/fusionlint.vim index 968e801b..cf20e1b4 100644 --- a/ale_linters/fuse/fusionlint.vim +++ b/ale_linters/fuse/fusionlint.vim @@ -1,11 +1,8 @@ " Author: RyanSquared " Description: `fusion-lint` linter for FusionScript files -let g:ale_fuse_fusionlint_executable = -\ get(g:, 'ale_fuse_fusionlint_executable', 'fusion-lint') - -let g:ale_fuse_fusionlint_options = -\ get(g:, 'ale_fuse_fusionlint_options', '') +call ale#Set('fuse_fusionlint_executable', 'fusion-lint') +call ale#Set('fuse_fusionlint_options', '') function! ale_linters#fuse#fusionlint#GetExecutable(buffer) abort return ale#Var(a:buffer, 'fuse_fusionlint_executable') @@ -13,7 +10,7 @@ endfunction function! ale_linters#fuse#fusionlint#GetCommand(buffer) abort return ale#Escape(ale_linters#fuse#fusionlint#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'fuse_fusionlint_options') + \ . ale#Pad(ale#Var(a:buffer, 'fuse_fusionlint_options')) \ . ' --filename %s -i' endfunction diff --git a/ale_linters/glsl/glslang.vim b/ale_linters/glsl/glslang.vim index 21a03ee2..d494df0e 100644 --- a/ale_linters/glsl/glslang.vim +++ b/ale_linters/glsl/glslang.vim @@ -14,9 +14,9 @@ function! ale_linters#glsl#glslang#GetExecutable(buffer) abort endfunction function! ale_linters#glsl#glslang#GetCommand(buffer) abort - return ale_linters#glsl#glslang#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'glsl_glslang_options') - \ . ' ' . '-C %t' + return ale#Escape(ale_linters#glsl#glslang#GetExecutable(a:buffer)) + \ . ale#Pad(ale#Var(a:buffer, 'glsl_glslang_options')) + \ . ' -C %t' endfunction function! ale_linters#glsl#glslang#Handle(buffer, lines) abort diff --git a/ale_linters/go/gotype.vim b/ale_linters/go/gotype.vim index f4bb274e..a678e0f3 100644 --- a/ale_linters/go/gotype.vim +++ b/ale_linters/go/gotype.vim @@ -3,10 +3,9 @@ function! ale_linters#go#gotype#GetCommand(buffer) abort if expand('#' . a:buffer . ':p') =~# '_test\.go$' - return + return '' endif - return ale#path#BufferCdString(a:buffer) . ' gotype .' endfunction diff --git a/ale_linters/help/write-good.vim b/ale_linters/help/writegood.vim similarity index 100% rename from ale_linters/help/write-good.vim rename to ale_linters/help/writegood.vim diff --git a/ale_linters/html/write-good.vim b/ale_linters/html/writegood.vim similarity index 100% rename from ale_linters/html/write-good.vim rename to ale_linters/html/writegood.vim diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index b1f74a6d..d7a39aa7 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -84,10 +84,10 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort return ale#path#BufferCdString(a:buffer) \ . ale#Escape(l:executable) \ . ' -Xlint' - \ . ' ' . l:cp_option - \ . ' ' . l:sp_option + \ . ale#Pad(l:cp_option) + \ . ale#Pad(l:sp_option) \ . ' -d ' . ale#Escape(l:class_file_directory) - \ . ' ' . ale#Var(a:buffer, 'java_javac_options') + \ . ale#Pad(ale#Var(a:buffer, 'java_javac_options')) \ . ' %t' endfunction diff --git a/ale_linters/llvm/llc.vim b/ale_linters/llvm/llc.vim index 0a4903eb..15201cbe 100644 --- a/ale_linters/llvm/llc.vim +++ b/ale_linters/llvm/llc.vim @@ -9,8 +9,7 @@ endfunction function! ale_linters#llvm#llc#GetCommand(buffer) abort return ale#Escape(ale_linters#llvm#llc#GetExecutable(a:buffer)) - \ . ' -filetype=null -o=' - \ . ale#Escape(g:ale#util#nul_file) + \ . ' -filetype=null -o=' . g:ale#util#nul_file endfunction function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort diff --git a/ale_linters/markdown/write-good.vim b/ale_linters/markdown/writegood.vim similarity index 100% rename from ale_linters/markdown/write-good.vim rename to ale_linters/markdown/writegood.vim diff --git a/ale_linters/nasm/nasm.vim b/ale_linters/nasm/nasm.vim index f4b2ca4b..77d57e18 100644 --- a/ale_linters/nasm/nasm.vim +++ b/ale_linters/nasm/nasm.vim @@ -42,9 +42,9 @@ endfunction call ale#linter#Define('nasm', { \ 'name': 'nasm', -\ 'executable': 'nasm', \ 'output_stream': 'stderr', \ 'lint_file': 1, +\ 'executable_callback': 'ale_linters#nasm#nasm#GetExecutable', \ 'command_callback': 'ale_linters#nasm#nasm#GetCommand', \ 'callback': 'ale_linters#nasm#nasm#Handle', \}) diff --git a/ale_linters/nroff/write-good.vim b/ale_linters/nroff/writegood.vim similarity index 100% rename from ale_linters/nroff/write-good.vim rename to ale_linters/nroff/writegood.vim diff --git a/ale_linters/po/write-good.vim b/ale_linters/po/writegood.vim similarity index 100% rename from ale_linters/po/write-good.vim rename to ale_linters/po/writegood.vim diff --git a/ale_linters/pod/write-good.vim b/ale_linters/pod/writegood.vim similarity index 100% rename from ale_linters/pod/write-good.vim rename to ale_linters/pod/writegood.vim diff --git a/ale_linters/rst/write-good.vim b/ale_linters/rst/writegood.vim similarity index 100% rename from ale_linters/rst/write-good.vim rename to ale_linters/rst/writegood.vim diff --git a/ale_linters/ruby/rails_best_practices.vim b/ale_linters/ruby/rails_best_practices.vim index 107753c3..4ba1f3fe 100644 --- a/ale_linters/ruby/rails_best_practices.vim +++ b/ale_linters/ruby/rails_best_practices.vim @@ -1,8 +1,8 @@ " Author: Eddie Lebow https://github.com/elebow " Description: rails_best_practices, a code metric tool for rails projects -let g:ale_ruby_rails_best_practices_options = -\ get(g:, 'ale_ruby_rails_best_practices_options', '') +call ale#Set('ruby_rails_best_practices_options', '') +call ale#Set('ruby_rails_best_practices_executable', 'rails_best_practices') function! ale_linters#ruby#rails_best_practices#Handle(buffer, lines) abort let l:output = [] @@ -22,8 +22,12 @@ function! ale_linters#ruby#rails_best_practices#Handle(buffer, lines) abort return l:output endfunction +function! ale_linters#ruby#rails_best_practices#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'ruby_rails_best_practices_executable') +endfunction + function! ale_linters#ruby#rails_best_practices#GetCommand(buffer) abort - let l:executable = ale#handlers#rails_best_practices#GetExecutable(a:buffer) + let l:executable = ale_linters#ruby#rails_best_practices#GetExecutable(a:buffer) let l:exec_args = l:executable =~? 'bundle$' \ ? ' exec rails_best_practices' \ : '' @@ -46,7 +50,7 @@ endfunction call ale#linter#Define('ruby', { \ 'name': 'rails_best_practices', -\ 'executable_callback': 'ale#handlers#rails_best_practices#GetExecutable', +\ 'executable_callback': 'ale_linters#ruby#rails_best_practices#GetExecutable', \ 'command_callback': 'ale_linters#ruby#rails_best_practices#GetCommand', \ 'callback': 'ale_linters#ruby#rails_best_practices#Handle', \ 'lint_file': 1, diff --git a/ale_linters/scala/scalastyle.vim b/ale_linters/scala/scalastyle.vim index f78fd749..3232d70b 100644 --- a/ale_linters/scala/scalastyle.vim +++ b/ale_linters/scala/scalastyle.vim @@ -1,11 +1,11 @@ " Author: Kevin Kays - https://github.com/okkays " Description: Support for the scalastyle checker. -let g:ale_scala_scalastyle_options = -\ get(g:, 'ale_scala_scalastyle_options', '') - -let g:ale_scalastyle_config_loc = +call ale#Set('scala_scalastyle_options', '') +" TODO: Remove support for the old option name in ALE 3.0. +call ale#Set('scala_scalastyle_config', \ get(g:, 'ale_scalastyle_config_loc', '') +\) function! ale_linters#scala#scalastyle#Handle(buffer, lines) abort " Look for help output from scalastyle first, which indicates that no @@ -66,23 +66,13 @@ function! ale_linters#scala#scalastyle#GetCommand(buffer) abort " If all else fails, try the global config. if empty(l:scalastyle_config) - let l:scalastyle_config = get(g:, 'ale_scalastyle_config_loc', '') + let l:scalastyle_config = ale#Var(a:buffer, 'scala_scalastyle_config') endif - " Build the command using the config file and additional options. - let l:command = 'scalastyle' - - if !empty(l:scalastyle_config) - let l:command .= ' --config ' . ale#Escape(l:scalastyle_config) - endif - - if !empty(g:ale_scala_scalastyle_options) - let l:command .= ' ' . g:ale_scala_scalastyle_options - endif - - let l:command .= ' %t' - - return l:command + return 'scalastyle' + \ . (!empty(l:scalastyle_config) ? ' --config ' . ale#Escape(l:scalastyle_config) : '') + \ . ale#Pad(ale#Var(a:buffer, 'scala_scalastyle_options')) + \ . ' %t' endfunction call ale#linter#Define('scala', { diff --git a/ale_linters/tex/write-good.vim b/ale_linters/tex/writegood.vim similarity index 100% rename from ale_linters/tex/write-good.vim rename to ale_linters/tex/writegood.vim diff --git a/ale_linters/texinfo/write-good.vim b/ale_linters/texinfo/writegood.vim similarity index 100% rename from ale_linters/texinfo/write-good.vim rename to ale_linters/texinfo/writegood.vim diff --git a/ale_linters/text/write-good.vim b/ale_linters/text/writegood.vim similarity index 100% rename from ale_linters/text/write-good.vim rename to ale_linters/text/writegood.vim diff --git a/ale_linters/thrift/thrift.vim b/ale_linters/thrift/thrift.vim index 741e80ab..a8fe10b6 100644 --- a/ale_linters/thrift/thrift.vim +++ b/ale_linters/thrift/thrift.vim @@ -20,14 +20,12 @@ function! ale_linters#thrift#thrift#GetCommand(buffer) abort let l:generators = ['cpp'] endif - let l:output_dir = ale#util#Tempname() - call mkdir(l:output_dir) - call ale#engine#ManageDirectory(a:buffer, l:output_dir) + let l:output_dir = ale#engine#CreateDirectory(a:buffer) return ale#Escape(ale_linters#thrift#thrift#GetExecutable(a:buffer)) - \ . ' ' . join(map(copy(l:generators), "'--gen ' . v:val")) - \ . ' ' . join(map(copy(l:includes), "'-I ' . v:val")) - \ . ' ' . ale#Var(a:buffer, 'thrift_thrift_options') + \ . ale#Pad(join(map(copy(l:generators), "'--gen ' . v:val"))) + \ . ale#Pad(join(map(copy(l:includes), "'-I ' . v:val"))) + \ . ale#Pad(ale#Var(a:buffer, 'thrift_thrift_options')) \ . ' -out ' . ale#Escape(l:output_dir) \ . ' %t' endfunction diff --git a/ale_linters/typescript/tslint.vim b/ale_linters/typescript/tslint.vim index b28f7cee..ccdca936 100644 --- a/ale_linters/typescript/tslint.vim +++ b/ale_linters/typescript/tslint.vim @@ -1,17 +1,7 @@ " Author: Prashanth Chandra , Jonathan Clem " Description: tslint for TypeScript files -call ale#Set('typescript_tslint_executable', 'tslint') -call ale#Set('typescript_tslint_config_path', '') -call ale#Set('typescript_tslint_rules_dir', '') -call ale#Set('typescript_tslint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('typescript_tslint_ignore_empty_files', 0) - -function! ale_linters#typescript#tslint#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'typescript_tslint', [ - \ 'node_modules/.bin/tslint', - \]) -endfunction +call ale#handlers#tslint#InitVariables() function! ale_linters#typescript#tslint#Handle(buffer, lines) abort " Do not output any errors for empty files if the option is on. @@ -70,7 +60,7 @@ function! ale_linters#typescript#tslint#GetCommand(buffer) abort \ : '' return ale#path#BufferCdString(a:buffer) - \ . ale#Escape(ale_linters#typescript#tslint#GetExecutable(a:buffer)) + \ . ale#Escape(ale#handlers#tslint#GetExecutable(a:buffer)) \ . ' --format json' \ . l:tslint_config_option \ . l:tslint_rules_option @@ -79,7 +69,7 @@ endfunction call ale#linter#Define('typescript', { \ 'name': 'tslint', -\ 'executable_callback': 'ale_linters#typescript#tslint#GetExecutable', +\ 'executable_callback': 'ale#handlers#tslint#GetExecutable', \ 'command_callback': 'ale_linters#typescript#tslint#GetCommand', \ 'callback': 'ale_linters#typescript#tslint#Handle', \}) diff --git a/ale_linters/xhtml/write-good.vim b/ale_linters/xhtml/writegood.vim similarity index 100% rename from ale_linters/xhtml/write-good.vim rename to ale_linters/xhtml/writegood.vim diff --git a/ale_linters/xml/xmllint.vim b/ale_linters/xml/xmllint.vim index 63d7f768..9d79438e 100644 --- a/ale_linters/xml/xmllint.vim +++ b/ale_linters/xml/xmllint.vim @@ -11,7 +11,7 @@ endfunction function! ale_linters#xml#xmllint#GetCommand(buffer) abort return ale#Escape(ale_linters#xml#xmllint#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'xml_xmllint_options') + \ . ale#Pad(ale#Var(a:buffer, 'xml_xmllint_options')) \ . ' --noout -' endfunction diff --git a/autoload/ale.vim b/autoload/ale.vim index f61418f6..26c73547 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -213,6 +213,25 @@ function! ale#Set(variable_name, default) abort endif endfunction +" Given a string for adding to a command, return the string padded with a +" space on the left if it is not empty. Otherwise return an empty string. +" +" This can be used for making command strings cleaner and easier to test. +function! ale#Pad(string) abort + return !empty(a:string) ? ' ' . a:string : '' +endfunction + +" Given a environment variable name and a value, produce part of a command for +" setting an environment variable before running a command. The syntax will be +" valid for cmd on Windows, or most shells on Unix. +function! ale#Env(variable_name, value) abort + if has('win32') + return 'set ' . a:variable_name . '=' . ale#Escape(a:value) . ' && ' + endif + + return a:variable_name . '=' . ale#Escape(a:value) . ' ' +endfunction + " Escape a string suitably for each platform. " shellescape does not work on Windows. function! ale#Escape(str) abort diff --git a/autoload/ale/assert.vim b/autoload/ale/assert.vim index eae41596..55c39ee3 100644 --- a/autoload/ale/assert.vim +++ b/autoload/ale/assert.vim @@ -1,3 +1,9 @@ +let s:chain_results = [] + +function! ale#assert#WithChainResults(...) abort + let s:chain_results = a:000 +endfunction + function! s:GetLinter() abort let l:linters = ale#linter#GetLintersLoaded() let l:filetype_linters = get(values(l:linters), 0, []) @@ -21,15 +27,31 @@ function! ale#assert#Linter(expected_executable, expected_command) abort let l:executable = ale#linter#GetExecutable(l:buffer, l:linter) if has_key(l:linter, 'command_chain') - let l:command = [] + let l:callbacks = map(copy(l:linter.command_chain), 'v:val.callback') - for l:chain_item in l:linter.command_chain - if empty(l:command) - call add(l:command, call(l:chain_item.callback, [l:buffer])) + " If the expected command is a string, just check the last one. + if type(a:expected_command) is type('') + if len(l:callbacks) is 1 + let l:command = call(l:callbacks[0], [l:buffer]) else - call add(l:command, call(l:chain_item.callback, [l:buffer, []])) + let l:input = get(s:chain_results, len(l:callbacks) - 2, []) + let l:command = call(l:callbacks[-1], [l:buffer, l:input]) endif - endfor + else + let l:command = [] + let l:chain_index = 0 + + for l:Callback in l:callbacks + if l:chain_index is 0 + call add(l:command, call(l:Callback, [l:buffer])) + else + let l:input = get(s:chain_results, l:chain_index - 1, []) + call add(l:command, call(l:Callback, [l:buffer, l:input])) + endif + + let l:chain_index += 1 + endfor + endif else let l:command = ale#linter#GetCommand(l:buffer, l:linter) " Replace %e with the escaped executable, so tests keep passing after @@ -42,9 +64,96 @@ function! ale#assert#Linter(expected_executable, expected_command) abort \ [l:executable, l:command] endfunction -command! -nargs=+ AssertLinter :call ale#assert#Linter() +function! ale#assert#LinterNotExecuted() abort + let l:buffer = bufnr('') + let l:linter = s:GetLinter() + let l:executable = ale#linter#GetExecutable(l:buffer, l:linter) + + Assert empty(l:executable), "The linter will be executed when it shouldn't be" +endfunction + +function! ale#assert#LSPOptions(expected_options) abort + let l:buffer = bufnr('') + let l:linter = s:GetLinter() + let l:initialization_options = ale#lsp_linter#GetOptions(l:buffer, l:linter) + + AssertEqual a:expected_options, l:initialization_options +endfunction + +function! ale#assert#LSPLanguage(expected_language) abort + let l:buffer = bufnr('') + let l:linter = s:GetLinter() + let l:language = ale#util#GetFunction(l:linter.language_callback)(l:buffer) + + AssertEqual a:expected_language, l:language +endfunction + +function! ale#assert#LSPProject(expected_root) abort + let l:buffer = bufnr('') + let l:linter = s:GetLinter() + let l:root = ale#util#GetFunction(l:linter.project_root_callback)(l:buffer) + + AssertEqual a:expected_root, l:root +endfunction " A dummy function for making sure this module is loaded. -function! ale#assert#Init() abort +function! ale#assert#SetUpLinterTest(filetype, name) abort + " Set up a marker so ALE doesn't create real random temporary filenames. + let g:ale_create_dummy_temporary_file = 1 + + " Remove current linters. call ale#linter#Reset() + call ale#linter#PreventLoading(a:filetype) + + let l:prefix = 'ale_' . a:filetype . '_' . a:name + let b:filter_expr = 'v:val[: len(l:prefix) - 1] is# l:prefix' + + Save g:ale_c_build_dir + unlet! g:ale_c_build_dir + + " Save and clear linter variables. + " We'll load the runtime file to reset them to defaults. + for l:key in filter(keys(g:), b:filter_expr) + execute 'Save g:' . l:key + unlet g:[l:key] + endfor + + unlet! b:ale_c_build_dir + + for l:key in filter(keys(b:), b:filter_expr) + unlet b:[l:key] + endfor + + execute 'runtime ale_linters/' . a:filetype . '/' . a:name . '.vim' + + call ale#test#SetDirectory('/testplugin/test/command_callback') + + command! -nargs=+ WithChainResults :call ale#assert#WithChainResults() + command! -nargs=+ AssertLinter :call ale#assert#Linter() + command! -nargs=0 AssertLinterNotExecuted :call ale#assert#LinterNotExecuted() + command! -nargs=+ AssertLSPOptions :call ale#assert#LSPOptions() + command! -nargs=+ AssertLSPLanguage :call ale#assert#LSPLanguage() + command! -nargs=+ AssertLSPProject :call ale#assert#LSPProject() +endfunction + +function! ale#assert#TearDownLinterTest() abort + unlet! g:ale_create_dummy_temporary_file + let s:chain_results = [] + + delcommand WithChainResults + delcommand AssertLinter + delcommand AssertLinterNotExecuted + delcommand AssertLSPOptions + delcommand AssertLSPLanguage + delcommand AssertLSPProject + + call ale#test#RestoreDirectory() + + Restore + + call ale#linter#Reset() + + if exists('*ale#semver#ResetVersionCache') + call ale#semver#ResetVersionCache() + endif endfunction diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim index cb4ba534..ec5ccb6d 100644 --- a/autoload/ale/engine.vim +++ b/autoload/ale/engine.vim @@ -96,8 +96,25 @@ function! ale#engine#ManageDirectory(buffer, directory) abort call add(g:ale_buffer_info[a:buffer].temporary_directory_list, a:directory) endfunction +function! ale#engine#CreateFile(buffer) abort + " This variable can be set to 1 in tests to stub this out. + if get(g:, 'ale_create_dummy_temporary_file') + return 'TEMP' + endif + + let l:temporary_file = ale#util#Tempname() + call ale#engine#ManageFile(a:buffer, l:temporary_file) + + return l:temporary_file +endfunction + " Create a new temporary directory and manage it in one go. function! ale#engine#CreateDirectory(buffer) abort + " This variable can be set to 1 in tests to stub this out. + if get(g:, 'ale_create_dummy_temporary_file') + return 'TEMP_DIR' + endif + let l:temporary_directory = ale#util#Tempname() " Create the temporary directory for the file, unreadable by 'other' " users. diff --git a/autoload/ale/fixers/tslint.vim b/autoload/ale/fixers/tslint.vim index 4d905a08..b352af3a 100644 --- a/autoload/ale/fixers/tslint.vim +++ b/autoload/ale/fixers/tslint.vim @@ -2,7 +2,7 @@ " Description: Fixing files with tslint. function! ale#fixers#tslint#Fix(buffer) abort - let l:executable = ale_linters#typescript#tslint#GetExecutable(a:buffer) + let l:executable = ale#handlers#tslint#GetExecutable(a:buffer) let l:tslint_config_path = ale#path#ResolveLocalPath( \ a:buffer, diff --git a/autoload/ale/handlers/rails_best_practices.vim b/autoload/ale/handlers/rails_best_practices.vim deleted file mode 100644 index 51bafbb0..00000000 --- a/autoload/ale/handlers/rails_best_practices.vim +++ /dev/null @@ -1,6 +0,0 @@ -call ale#Set('ruby_rails_best_practices_options', '') -call ale#Set('ruby_rails_best_practices_executable', 'rails_best_practices') - -function! ale#handlers#rails_best_practices#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'ruby_rails_best_practices_executable') -endfunction diff --git a/autoload/ale/handlers/tslint.vim b/autoload/ale/handlers/tslint.vim new file mode 100644 index 00000000..90579344 --- /dev/null +++ b/autoload/ale/handlers/tslint.vim @@ -0,0 +1,13 @@ +function! ale#handlers#tslint#InitVariables() abort + call ale#Set('typescript_tslint_executable', 'tslint') + call ale#Set('typescript_tslint_config_path', '') + call ale#Set('typescript_tslint_rules_dir', '') + call ale#Set('typescript_tslint_use_global', get(g:, 'ale_use_global_executables', 0)) + call ale#Set('typescript_tslint_ignore_empty_files', 0) +endfunction + +function! ale#handlers#tslint#GetExecutable(buffer) abort + return ale#node#FindExecutable(a:buffer, 'typescript_tslint', [ + \ 'node_modules/.bin/tslint', + \]) +endfunction diff --git a/autoload/ale/lsp_linter.vim b/autoload/ale/lsp_linter.vim index 31299fc5..6dc78e4c 100644 --- a/autoload/ale/lsp_linter.vim +++ b/autoload/ale/lsp_linter.vim @@ -114,6 +114,18 @@ function! ale#lsp_linter#HandleLSPResponse(conn_id, response) abort endif endfunction +function! ale#lsp_linter#GetOptions(buffer, linter) abort + let l:initialization_options = {} + + if has_key(a:linter, 'initialization_options_callback') + let l:initialization_options = ale#util#GetFunction(a:linter.initialization_options_callback)(a:buffer) + elseif has_key(a:linter, 'initialization_options') + let l:initialization_options = a:linter.initialization_options + endif + + return l:initialization_options +endfunction + " Given a buffer, an LSP linter, and a callback to register for handling " messages, start up an LSP linter and get ready to receive errors or " completions. @@ -128,13 +140,7 @@ function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort return {} endif - let l:initialization_options = {} - - if has_key(a:linter, 'initialization_options_callback') - let l:initialization_options = ale#util#GetFunction(a:linter.initialization_options_callback)(a:buffer) - elseif has_key(a:linter, 'initialization_options') - let l:initialization_options = a:linter.initialization_options - endif + let l:initialization_options = ale#lsp_linter#GetOptions(a:buffer, a:linter) if a:linter.lsp is# 'socket' let l:address = ale#linter#GetAddress(a:buffer, a:linter) diff --git a/doc/ale-development.txt b/doc/ale-development.txt index f97bdee4..5688c1cc 100644 --- a/doc/ale-development.txt +++ b/doc/ale-development.txt @@ -10,6 +10,7 @@ CONTENTS *ale-development-contents* 2. Design Goals.........................|ale-design-goals| 3. Coding Standards.....................|ale-coding-standards| 4. Testing ALE..........................|ale-development-tests| + 4.1. Writing Linter Tests.............|ale-development-linter-tests| =============================================================================== 1. Introduction *ale-development-introduction* @@ -173,6 +174,9 @@ Look at existing tests in the codebase for examples of how to write tests. Refer to the Vader documentation for general information on how to write Vader tests: https://github.com/junegunn/vader.vim +See |ale-development-linter-tests| for more information on how to write linter +tests. + When you add new linters or fixers, make sure to add them into the table in the README, and also into the |ale-support| list in the main help file. If you forget to keep them both in sync, you should see an error like the following @@ -222,5 +226,82 @@ margin. For example, if you add a heading for an `aardvark` tool to Make sure to make the table of contents match the headings, and to keep the doc tags on the right margin. +=============================================================================== +4.1 Writing Linter Tests *ale-development-linter-tests* + +Tests for ALE linters take two forms. + +1. Tests for handling the output of commands. +2. Tests for checking which commands are run, or connections are made. + +Tests of the first form should go in the `test/handler` directory, and should +be written like so. > + + Before: + " Load the file which defines the linter. + runtime ale_linters/filetype/linter_name_here.vim + + After: + " Unload all linters again. + call ale#linter#Reset() + + Execute(The output should be correct): + + " Test that the right loclist items are parsed from the handler. + AssertEqual + \ [ + \ { + \ 'lnum': 1, + \ 'type': 'E', + \ 'text': 'Something went wrong', + \ }, + \ ], + \ ale_linters#filetype#linter_name#Handle(bufnr(''), [ + \ '1:Something went wrong', + \ ] +< +Tests for what ALE runs should go in the `test/command_callback` directory, +and should be written like so. > + + Before: + " Load the linter and set up a series of commands, reset linter variables, + " clear caches, etc. + " + " Vader's 'Save' command will be called here for linter variables. + call ale#assert#SetUpLinterTest('filetype', 'linter_name') + + After: + " Reset linters, variables, etc. + " + " Vader's 'Restore' command will be called here. + call ale#assert#TearDownLinterTest() + + Execute(The default command should be correct): + " AssertLinter checks the executable and command. + " Pass expected_executable, expected_command + AssertLinter 'some-command', ale#Escape('some-command') . ' --foo' + + Execute(Check chained commands): + " WithChainResults can be called with 1 or more list for passing output + " to chained commands. The output for each callback defaults to an empty + " list. + WithChainResults ['v2.1.2'] + " Given a List of commands, check all of them. + " Given a String, only the last command in the chain will be checked. + AssertLinter 'some-command', [ + \ ale#Escape('some-command') . ' --version', + \ ale#Escape('some-command') . ' --foo', + \] +< +The full list of commands that will be temporarily defined for linter tests +given the above setup are as follows. + +`WithChainResults [...]` - Define output for command chain functions. +`AssertLinter executable, command` - Check the executable and command. +`AssertLinterNotExecuted` - Check that linters will not be executed. +`AssertLSPLanguage language` - Check the language given to an LSP server. +`AssertLSPOptions options_dict` - Check the options given to an LSP server. +`AssertLSPProject project_root` - Check the root given to an LSP server. + =============================================================================== vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/doc/ale-scala.txt b/doc/ale-scala.txt index b5474f3b..b992d428 100644 --- a/doc/ale-scala.txt +++ b/doc/ale-scala.txt @@ -41,8 +41,8 @@ To disable `scalastyle` globally, use |g:ale_linters| like so: > See |g:ale_linters| for more information on disabling linters. -g:ale_scalastyle_config_loc *g:ale_scalastyle_config_loc* - +g:ale_scala_scalastyle_config *g:ale_scala_scalastyle_config* + *b:ale_scala_scalastyle_config* Type: |String| Default: `''` @@ -54,7 +54,7 @@ g:ale_scalastyle_config_loc *g:ale_scalastyle_config_loc* g:ale_scala_scalastyle_options *g:ale_scala_scalastyle_options* - + *b:ale_scala_scalastyle_options* Type: |String| Default: `''` diff --git a/doc/ale.txt b/doc/ale.txt index e1a209cf..75a37533 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -2074,6 +2074,29 @@ ALEStopAllLSPs *ALEStopAllLSPs* =============================================================================== 9. API *ale-api* +ALE offers a number of functions for running linters or fixers, or defining +them. The following functions are part of the publicly documented part of that +API, and should be expected to continue to work. + + +ale#Env(variable_name, value) *ale#Env()* + + Given a variable name and a string value, produce a string for including in + a command for setting environment variables. This function can be used for + building a command like so. > + + :echo string(ale#Env('VAR', 'some value') . 'command') + 'VAR=''some value'' command' # On Linux or Mac OSX + 'set VAR="some value" && command' # On Windows + + +ale#Pad(string) *ale#Pad()* + + Given a string or any |empty()| value, return either the string prefixed + with a single space, or an empty string. This function can be used to build + parts of a command from variables. + + ale#Queue(delay, [linting_flag, buffer_number]) *ale#Queue()* Run linters for the current buffer, based on the filetype of the buffer, @@ -2098,8 +2121,17 @@ ale#Queue(delay, [linting_flag, buffer_number]) *ale#Queue()* ale#engine#CreateDirectory(buffer) *ale#engine#CreateDirectory()* Create a new temporary directory with a unique name, and manage that - directory with |ale#engine#ManageDirectory()|, so it will be removed as - soon as possible. + directory with |ale#engine#ManageDirectory()|, so it will be removed as soon + as possible. + + It is advised to only call this function from a callback function for + returning a linter command to run. + + +ale#engine#CreateFile(buffer) *ale#engine#CreateFile()* + + Create a new temporary file with a unique name, and manage that file with + |ale#engine#ManageFile()|, so it will be removed as soon as possible. It is advised to only call this function from a callback function for returning a linter command to run. diff --git a/run-tests b/run-tests index 0463c8ff..ad375693 100755 --- a/run-tests +++ b/run-tests @@ -149,13 +149,18 @@ failed=0 index=0 for pid in $pid_list; do + this_failed=0 index=$((index+1)) if ! wait "$pid"; then failed=1 + this_failed=1 fi - cat "$output_dir/$index" + # Hide output for things that passed if -q is set. + if [ "$quiet_flag" != '-q' ] || ((this_failed)); then + cat "$output_dir/$index" + fi done if ((failed)); then diff --git a/test/command_callback/test_asm_gcc_command_callbacks.vader b/test/command_callback/test_asm_gcc_command_callbacks.vader index ce8b906a..5ad31186 100644 --- a/test/command_callback/test_asm_gcc_command_callbacks.vader +++ b/test/command_callback/test_asm_gcc_command_callbacks.vader @@ -1,39 +1,18 @@ Before: - Save g:ale_asm_gcc_executable - Save g:ale_asm_gcc_options - - unlet! g:ale_asm_gcc_executable - unlet! b:ale_asm_gcc_executable - unlet! g:ale_asm_gcc_options - unlet! b:ale_asm_gcc_options - - runtime ale_linters/asm/gcc.vim - + call ale#assert#SetUpLinterTest('asm', 'gcc') + call ale#test#SetFilename('test.cpp') let b:command_tail = ' -x assembler -fsyntax-only -iquote' - \ . ' ' . ale#Escape(getcwd()) + \ . ' ' . ale#Escape(g:dir) \ . ' -Wall -' After: - Restore unlet! b:command_tail - unlet! b:ale_asm_gcc_executable - unlet! b:ale_asm_gcc_options - call ale#linter#Reset() + + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'gcc', ale_linters#asm#gcc#GetExecutable(bufnr('')) + AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail let b:ale_asm_gcc_executable = 'foobar' - AssertEqual 'foobar', ale_linters#asm#gcc#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('gcc') . b:command_tail, - \ ale_linters#asm#gcc#GetCommand(bufnr('')) - - let b:ale_asm_gcc_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#asm#gcc#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/test/command_callback/test_brakeman_command_callback.vader b/test/command_callback/test_brakeman_command_callback.vader index 1772c9d6..61be4caf 100644 --- a/test/command_callback/test_brakeman_command_callback.vader +++ b/test/command_callback/test_brakeman_command_callback.vader @@ -1,39 +1,24 @@ Before: - Save g:ale_ruby_brakeman_options - - runtime ale_linters/ruby/brakeman.vim - - let g:ale_ruby_brakeman_options = '' - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('ruby', 'brakeman') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The brakeman command callback should detect absence of a valid Rails app): call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/test.rb') - AssertEqual - \ '', - \ ale_linters#ruby#brakeman#GetCommand(bufnr('')) + AssertLinter 'brakeman', '' Execute(The brakeman command callback should find a valid Rails app root): call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/db/test.rb') - AssertEqual - \ 'brakeman -f json -q -p ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../ruby_fixtures/valid_rails_app')), - \ ale_linters#ruby#brakeman#GetCommand(bufnr('')) + AssertLinter 'brakeman', 'brakeman -f json -q -p ' + \ . ale#Escape(ale#path#Simplify(g:dir . '/../ruby_fixtures/valid_rails_app')) Execute(The brakeman command callback should include configured options): call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/db/test.rb') let g:ale_ruby_brakeman_options = '--combobulate' - AssertEqual - \ 'brakeman -f json -q --combobulate -p ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../ruby_fixtures/valid_rails_app')), - \ ale_linters#ruby#brakeman#GetCommand(bufnr('')) + AssertLinter 'brakeman', 'brakeman -f json -q --combobulate -p ' + \ . ale#Escape(ale#path#Simplify(g:dir . '/../ruby_fixtures/valid_rails_app')) diff --git a/test/command_callback/test_c_clang_command_callbacks.vader b/test/command_callback/test_c_clang_command_callbacks.vader index 2f6d4dd0..87f7fd06 100644 --- a/test/command_callback/test_c_clang_command_callbacks.vader +++ b/test/command_callback/test_c_clang_command_callbacks.vader @@ -1,39 +1,17 @@ Before: - Save g:ale_c_clang_executable - Save g:ale_c_clang_options - - unlet! g:ale_c_clang_executable - unlet! b:ale_c_clang_executable - unlet! g:ale_c_clang_options - unlet! b:ale_c_clang_options - - runtime ale_linters/c/clang.vim - + call ale#assert#SetUpLinterTest('c', 'clang') let b:command_tail = ' -S -x c -fsyntax-only -iquote' \ . ' ' . ale#Escape(getcwd()) \ . ' -std=c11 -Wall -' After: - Restore unlet! b:command_tail - unlet! b:ale_c_clang_executable - unlet! b:ale_c_clang_options - call ale#linter#Reset() + + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'clang', ale_linters#c#clang#GetExecutable(bufnr('')) + AssertLinter 'clang', ['', ale#Escape('clang') . b:command_tail] let b:ale_c_clang_executable = 'foobar' - AssertEqual 'foobar', ale_linters#c#clang#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('clang') . b:command_tail, - \ ale_linters#c#clang#GetCommand(bufnr(''), []) - - let b:ale_c_clang_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#c#clang#GetCommand(bufnr(''), []) + AssertLinter 'foobar', ['', ale#Escape('foobar') . b:command_tail] diff --git a/test/command_callback/test_c_clang_tidy_command_callback.vader b/test/command_callback/test_c_clang_tidy_command_callback.vader index 6f75d777..582d4798 100644 --- a/test/command_callback/test_c_clang_tidy_command_callback.vader +++ b/test/command_callback/test_c_clang_tidy_command_callback.vader @@ -1,77 +1,49 @@ Before: - Save g:ale_c_clangtidy_checks - Save g:ale_c_clangtidy_options - Save g:ale_c_build_dir - - unlet! g:ale_c_build_dir - unlet! b:ale_c_build_dir - unlet! g:ale_c_clangtidy_checks - unlet! b:ale_c_clangtidy_checks - unlet! g:ale_c_clangtidy_options - unlet! b:ale_c_clangtidy_options - - runtime ale_linters/c/clangtidy.vim - + call ale#assert#SetUpLinterTest('c', 'clangtidy') call ale#test#SetFilename('test.c') After: - unlet! b:ale_c_build_dir - unlet! b:ale_c_clangtidy_checks - unlet! b:ale_c_clangtidy_options - unlet! b:ale_c_clangtidy_executable - - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The clangtidy command default should be correct): - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s' Execute(You should be able to remove the -checks option for clang-tidy): let b:ale_c_clangtidy_checks = [] - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' %s', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' %s' Execute(You should be able to set other checks for clang-tidy): let b:ale_c_clangtidy_checks = ['-*', 'clang-analyzer-*'] - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s' Execute(You should be able to manually set compiler flags for clang-tidy): let b:ale_c_clangtidy_options = '-Wall' - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -- -Wall', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) - \ + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' + Execute(The build directory should be configurable): let b:ale_c_build_dir = '/foo/bar' - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar'), - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + \ . ' -p ' . ale#Escape('/foo/bar') Execute(The build directory setting should override the options): let b:ale_c_build_dir = '/foo/bar' let b:ale_c_clangtidy_options = '-Wall' - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar'), - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + \ . ' -p ' . ale#Escape('/foo/bar') Execute(The build directory should be ignored for header files): call ale#test#SetFilename('test.h') @@ -79,24 +51,17 @@ Execute(The build directory should be ignored for header files): let b:ale_c_build_dir = '/foo/bar' let b:ale_c_clangtidy_options = '-Wall' - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -- -Wall', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) - \ + \ . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' + call ale#test#SetFilename('test.h') - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -- -Wall', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' Execute(The executable should be configurable): let b:ale_c_clangtidy_executable = 'foobar' - AssertEqual - \ ale#Escape('foobar') - \ . ' -checks=' . ale#Escape('*') . ' %s', - \ ale_linters#c#clangtidy#GetCommand(bufnr('')) + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' -checks=' . ale#Escape('*') . ' %s' diff --git a/test/command_callback/test_c_cppcheck_command_callbacks.vader b/test/command_callback/test_c_cppcheck_command_callbacks.vader index 1643e3e0..3fc87a79 100644 --- a/test/command_callback/test_c_cppcheck_command_callbacks.vader +++ b/test/command_callback/test_c_cppcheck_command_callbacks.vader @@ -1,49 +1,24 @@ Before: - Save g:ale_c_cppcheck_executable - Save g:ale_c_cppcheck_options - - unlet! g:ale_c_cppcheck_executable - unlet! b:ale_c_cppcheck_executable - unlet! g:ale_c_cppcheck_options - unlet! b:ale_c_cppcheck_options - - runtime ale_linters/c/cppcheck.vim + call ale#assert#SetUpLinterTest('c', 'cppcheck') let b:command_tail = ' -q --language=c --enable=style %t' - call ale#test#SetDirectory('/testplugin/test/command_callback') - After: - Restore + call ale#assert#TearDownLinterTest() + unlet! b:command_tail - unlet! b:ale_c_cppcheck_executable - unlet! b:ale_c_cppcheck_options - call ale#linter#Reset() - call ale#test#RestoreDirectory() Execute(The executable should be configurable): - AssertEqual 'cppcheck', ale_linters#c#cppcheck#GetExecutable(bufnr('')) + AssertLinter 'cppcheck', ale#Escape('cppcheck') . b:command_tail let b:ale_c_cppcheck_executable = 'foobar' - AssertEqual 'foobar', ale_linters#c#cppcheck#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('cppcheck') . b:command_tail, - \ ale_linters#c#cppcheck#GetCommand(bufnr('')) - - let b:ale_c_cppcheck_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#c#cppcheck#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail Execute(cppcheck for C++ should detect compile_commands.json files): call ale#test#SetFilename('cppcheck_paths/one/foo.cpp') - AssertEqual + AssertLinter 'cppcheck', \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/cppcheck_paths/one')) . ' && ' \ . ale#Escape('cppcheck') - \ . ' -q --language=c --project=compile_commands.json --enable=style %t', - \ ale_linters#c#cppcheck#GetCommand(bufnr('')) + \ . ' -q --language=c --project=compile_commands.json --enable=style %t' diff --git a/test/command_callback/test_c_flawfinder_command_callbacks.vader b/test/command_callback/test_c_flawfinder_command_callbacks.vader index 38a602dd..44573ff5 100644 --- a/test/command_callback/test_c_flawfinder_command_callbacks.vader +++ b/test/command_callback/test_c_flawfinder_command_callbacks.vader @@ -1,51 +1,24 @@ Before: - Save g:ale_c_flawfinder_executable - Save g:ale_c_flawfinder_options - Save g:ale_c_flawfinder_minlevel - - unlet! g:ale_c_flawfinder_executable - unlet! b:ale_c_flawfinder_executable - unlet! g:ale_c_flawfinder_options - unlet! b:ale_c_flawfinder_options - unlet! g:ale_c_flawfinder_minlevel - unlet! b:ale_c_flawfinder_minlevel - - runtime ale_linters/c/flawfinder.vim + call ale#assert#SetUpLinterTest('c', 'flawfinder') After: - unlet! b:ale_c_flawfinder_executable - unlet! b:ale_c_flawfinder_options - unlet! b:ale_c_flawfinder_minlevel - - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The flawfinder command should be correct): - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --minlevel=1 %t', - \ ale_linters#c#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', ale#Escape('flawfinder') . ' -CDQS --minlevel=1 %t' Execute(The minlevel of flawfinder should be configurable): let b:ale_c_flawfinder_minlevel = 8 - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --minlevel=8 %t', - \ ale_linters#c#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', ale#Escape('flawfinder') . ' -CDQS --minlevel=8 %t' Execute(Additional flawfinder options should be configurable): let b:ale_c_flawfinder_options = ' --foobar' - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --foobar --minlevel=1 %t', - \ ale_linters#c#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', + \ ale#Escape('flawfinder') . ' -CDQS --foobar --minlevel=1 %t' Execute(The flawfinder exectable should be configurable): let b:ale_c_flawfinder_executable = 'foo/bar' - AssertEqual - \ ale#Escape('foo/bar') - \ . ' -CDQS --minlevel=1 %t', - \ ale_linters#c#flawfinder#GetCommand(bufnr('')) + AssertLinter 'foo/bar', ale#Escape('foo/bar') . ' -CDQS --minlevel=1 %t' diff --git a/test/command_callback/test_c_gcc_command_callbacks.vader b/test/command_callback/test_c_gcc_command_callbacks.vader index 3557576e..45514051 100644 --- a/test/command_callback/test_c_gcc_command_callbacks.vader +++ b/test/command_callback/test_c_gcc_command_callbacks.vader @@ -1,39 +1,18 @@ Before: - Save g:ale_c_gcc_executable - Save g:ale_c_gcc_options - - unlet! g:ale_c_gcc_executable - unlet! b:ale_c_gcc_executable - unlet! g:ale_c_gcc_options - unlet! b:ale_c_gcc_options - - runtime ale_linters/c/gcc.vim + call ale#assert#SetUpLinterTest('c', 'gcc') let b:command_tail = ' -S -x c -fsyntax-only -iquote' \ . ' ' . ale#Escape(getcwd()) \ . ' -std=c11 -Wall -' After: - Restore + call ale#assert#TearDownLinterTest() + unlet! b:command_tail - unlet! b:ale_c_gcc_executable - unlet! b:ale_c_gcc_options - call ale#linter#Reset() Execute(The executable should be configurable): - AssertEqual 'gcc', ale_linters#c#gcc#GetExecutable(bufnr('')) + AssertLinter 'gcc', ['', ale#Escape('gcc') . b:command_tail] let b:ale_c_gcc_executable = 'foobar' - AssertEqual 'foobar', ale_linters#c#gcc#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('gcc') . b:command_tail, - \ ale_linters#c#gcc#GetCommand(bufnr(''), []) - - let b:ale_c_gcc_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#c#gcc#GetCommand(bufnr(''), []) + AssertLinter 'foobar', ['', ale#Escape('foobar') . b:command_tail] diff --git a/test/command_callback/test_cargo_command_callbacks.vader b/test/command_callback/test_cargo_command_callbacks.vader index 6bdc10b6..ac8846b0 100644 --- a/test/command_callback/test_cargo_command_callbacks.vader +++ b/test/command_callback/test_cargo_command_callbacks.vader @@ -1,223 +1,130 @@ Before: - Save g:ale_rust_cargo_use_check - Save g:ale_rust_cargo_check_all_targets - Save g:ale_rust_cargo_check_tests - Save g:ale_rust_cargo_check_examples - Save g:ale_rust_cargo_default_feature_behavior - Save g:ale_rust_cargo_include_features - Save g:ale_rust_cargo_avoid_whole_workspace - - unlet! g:ale_rust_cargo_use_check - unlet! g:ale_rust_cargo_check_all_targets - unlet! g:ale_rust_cargo_check_tests - unlet! g:ale_rust_cargo_check_examples - unlet! g:ale_rust_cargo_default_feature_behavior - unlet! g:ale_rust_cargo_include_features - unlet! g:ale_rust_cargo_avoid_whole_workspace - - runtime ale_linters/rust/cargo.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('rust', 'cargo') let g:suffix = ' --frozen --message-format=json -q' + " Test with version 0.22.0 by default. + WithChainResults ['cargo 0.22.0 (3423351a5 2017-10-06)'] + After: - Restore + call ale#assert#TearDownLinterTest() unlet! g:suffix - call ale#test#RestoreDirectory() - call ale#linter#Reset() - call ale#semver#ResetVersionCache() +Execute(The linter should not be executed when there's no Cargo.toml file): + AssertLinterNotExecuted -Execute(An empty string should be returned for the cargo executable when there's no Cargo.toml file): - AssertEqual - \ '', - \ ale_linters#rust#cargo#GetCargoExecutable(bufnr('')) - -Execute(The executable should be returned when there is a Cargo.toml file): +Execute(The linter should be executed when there is a Cargo.toml file): call ale#test#SetFilename('cargo_paths/test.rs') - AssertEqual - \ 'cargo', - \ ale_linters#rust#cargo#GetCargoExecutable(bufnr('')) - -Execute(The VersionCheck function should return the --version command): - AssertEqual - \ 'cargo --version', - \ ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter 'cargo', + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/cargo_paths')) . ' && ' + \ . 'cargo build --frozen --message-format=json -q' Execute(The default command should be correct): - AssertEqual - \ 'cargo build' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) + WithChainResults [] + AssertLinter '', ['cargo --version', 'cargo build' . g:suffix] Execute(`cargo check` should be used when the version is new enough): - AssertEqual - \ 'cargo check' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.17.0 (3423351a5 2017-10-06)', - \ ]) + WithChainResults ['cargo 0.17.0 (3423351a5 2017-10-06)'] + AssertLinter '', ['cargo --version', 'cargo check' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo check' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo check' . g:suffix] Execute(`cargo build` should be used when cargo is too old): - AssertEqual - \ 'cargo build' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.16.0 (3423351a5 2017-10-06)', - \ ]) + WithChainResults ['cargo 0.16.0 (3423351a5 2017-10-06)'] + AssertLinter '', ['cargo --version', 'cargo build' . g:suffix] - " We should cache the version check - AssertEqual - \ 'cargo build' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo build' . g:suffix] Execute(`cargo build` should be used when g:ale_rust_cargo_use_check is set to 0): let g:ale_rust_cargo_use_check = 0 - AssertEqual - \ 'cargo build' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.24.0 (3423351a5 2017-10-06)', - \ ]) + WithChainResults ['cargo 0.24.0 (3423351a5 2017-10-06)'] + AssertLinter '', ['cargo --version', 'cargo build' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo build' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo build' . g:suffix] Execute(`cargo check` should be used when the version is new enough): - AssertEqual - \ 'cargo check' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo check' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo check' . g:suffix] Execute(--all-targets should be used when g:ale_rust_cargo_check_all_targets is set to 1): let g:ale_rust_cargo_check_all_targets = 1 - AssertEqual - \ 'cargo check --all-targets' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --all-targets' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo check --all-targets' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo check --all-targets' . g:suffix] Execute(--tests should be used when g:ale_rust_cargo_check_tests is set to 1): let g:ale_rust_cargo_check_tests = 1 - AssertEqual - \ 'cargo check --tests' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --tests' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo check --tests' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo check --tests' . g:suffix] Execute(--examples should be used when g:ale_rust_cargo_check_examples is set to 1): let g:ale_rust_cargo_check_examples = 1 - AssertEqual - \ 'cargo check --examples' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --examples' . g:suffix] " We should cache the version check - AssertEqual - \ 'cargo check --examples' . g:suffix, - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#rust#cargo#VersionCheck(bufnr('')) + WithChainResults [] + AssertLinter '', ['', 'cargo check --examples' . g:suffix] Execute(--no-default-features should be used when g:ale_rust_cargo_default_feature_behavior is none): - let g:ale_rust_cargo_default_feature_behavior = 'none' + let b:ale_rust_cargo_default_feature_behavior = 'none' - AssertEqual - \ 'cargo check' . g:suffix . ' --no-default-features', - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --frozen --message-format=json -q --no-default-features'] Execute(g:ale_rust_cargo_include_features added when g:ale_rust_cargo_default_feature_behavior is none): - let g:ale_rust_cargo_default_feature_behavior = 'none' - let g:ale_rust_cargo_include_features = 'foo bar' + let b:ale_rust_cargo_default_feature_behavior = 'none' + let b:ale_rust_cargo_include_features = 'foo bar' - AssertEqual - \ 'cargo check' . g:suffix . ' --no-default-features --features ' . - \ (fnamemodify(&shell, ':t') is? 'cmd.exe' ? '"foo bar"' : "'foo bar'"), - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --frozen --message-format=json -q --no-default-features --features ' . ale#Escape('foo bar')] Execute(g:ale_rust_cargo_include_features added and escaped): - let g:ale_rust_cargo_default_feature_behavior = 'default' - let g:ale_rust_cargo_include_features = "foo bar baz" + let b:ale_rust_cargo_default_feature_behavior = 'default' + let b:ale_rust_cargo_include_features = "foo bar baz" - AssertEqual - \ 'cargo check' . g:suffix . ' --features ' . - \ (fnamemodify(&shell, ':t') is? 'cmd.exe' ? '"foo bar baz"' : "'foo bar baz'"), - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + AssertLinter '', ['cargo --version', 'cargo check --frozen --message-format=json -q --features ' . ale#Escape('foo bar baz')] Execute(--all-features should be used when g:ale_rust_cargo_default_feature_behavior is all): - let g:ale_rust_cargo_default_feature_behavior = 'all' - + let b:ale_rust_cargo_default_feature_behavior = 'all' " When all features are enabled we should ignore extra features to add " since it won't do anything - let g:ale_rust_cargo_include_features = 'foo bar' + let b:ale_rust_cargo_include_features = 'foo bar' - AssertEqual - \ 'cargo check' . g:suffix . ' --all-features', - \ ale_linters#rust#cargo#GetCommand(bufnr(''), [ - \ 'cargo 0.22.0 (3423351a5 2017-10-06)', - \ ]) + WithChainResults ['cargo 0.22.0 (3423351a5 2017-10-06)'] + AssertLinter '', ['cargo --version', 'cargo check --frozen --message-format=json -q --all-features'] -Execute(When a crate belongs to a workspace we chdir into the crate.): +Execute(When a crate belongs to a workspace we should cd into the crate): call ale#test#SetFilename('cargo_workspace_paths/subpath/test.rs') - if ale#Has('win32') - let test_cdprefix = "C:\\testplugin\\test\\command_callback\\cargo_workspace_paths\\subpath" - else - let test_cdprefix = "'/testplugin/test/command_callback/cargo_workspace_paths/subpath'" - endif - - AssertEqual - \ "cd ".test_cdprefix." && cargo build --frozen --message-format=json -q", - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) + AssertLinter 'cargo', [ + \ 'cargo --version', + \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/cargo_workspace_paths/subpath')) . ' && ' + \ . 'cargo check --frozen --message-format=json -q', + \] Execute(When a crate belongs to a workspace we chdir into the crate, unless we disabled it): let g:ale_rust_cargo_avoid_whole_workspace = 0 call ale#test#SetFilename('cargo_workspace_paths/subpath/test.rs') - AssertEqual - \ "cargo build --frozen --message-format=json -q", - \ ale_linters#rust#cargo#GetCommand(bufnr(''), []) + AssertLinter 'cargo', [ + \ 'cargo --version', + \ 'cargo check --frozen --message-format=json -q', + \] diff --git a/test/command_callback/test_clang_tidy_command_callback.vader b/test/command_callback/test_clang_tidy_command_callback.vader index f82efffe..f28609ee 100644 --- a/test/command_callback/test_clang_tidy_command_callback.vader +++ b/test/command_callback/test_clang_tidy_command_callback.vader @@ -1,74 +1,46 @@ Before: - Save g:ale_cpp_clangtidy_checks - Save g:ale_cpp_clangtidy_options - Save g:ale_c_build_dir - - unlet! g:ale_c_build_dir - unlet! b:ale_c_build_dir - unlet! g:ale_cpp_clangtidy_checks - unlet! b:ale_cpp_clangtidy_checks - unlet! g:ale_cpp_clangtidy_options - unlet! b:ale_cpp_clangtidy_options - - runtime ale_linters/cpp/clangtidy.vim - + call ale#assert#SetUpLinterTest('cpp', 'clangtidy') call ale#test#SetFilename('test.cpp') After: - unlet! b:ale_c_build_dir - unlet! b:ale_cpp_clangtidy_checks - unlet! b:ale_cpp_clangtidy_options - unlet! b:ale_cpp_clangtidy_executable - - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The clangtidy command default should be correct): - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s' Execute(You should be able to remove the -checks option for clang-tidy): let b:ale_cpp_clangtidy_checks = [] - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' %s', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', ale#Escape('clang-tidy') . ' %s' Execute(You should be able to set other checks for clang-tidy): let b:ale_cpp_clangtidy_checks = ['-*', 'clang-analyzer-*'] - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s' Execute(You should be able to manually set compiler flags for clang-tidy): let b:ale_cpp_clangtidy_options = '-Wall' - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s -- -Wall', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' \ Execute(The build directory should be configurable): let b:ale_c_build_dir = '/foo/bar' - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s -p ' . ale#Escape('/foo/bar'), - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + \ . ' -checks=' . ale#Escape('*') . ' %s -p ' . ale#Escape('/foo/bar') Execute(The build directory setting should override the options): let b:ale_c_build_dir = '/foo/bar' let b:ale_cpp_clangtidy_options = '-Wall' - AssertEqual + AssertLinter 'clang-tidy', \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s -p ' . ale#Escape('/foo/bar'), - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + \ . ' -checks=' . ale#Escape('*') . ' %s -p ' . ale#Escape('/foo/bar') Execute(The build directory should be ignored for header files): call ale#test#SetFilename('test.h') @@ -76,22 +48,16 @@ Execute(The build directory should be ignored for header files): let b:ale_c_build_dir = '/foo/bar' let b:ale_cpp_clangtidy_options = '-Wall' - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s -- -Wall', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) - \ + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' + call ale#test#SetFilename('test.hpp') - AssertEqual - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s -- -Wall', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + AssertLinter 'clang-tidy', + \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' Execute(The executable should be configurable): let b:ale_cpp_clangtidy_executable = 'foobar' - AssertEqual - \ ale#Escape('foobar') - \ . ' -checks=' . ale#Escape('*') . ' %s', - \ ale_linters#cpp#clangtidy#GetCommand(bufnr('')) + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' -checks=' . ale#Escape('*') . ' %s' diff --git a/test/command_callback/test_cpp_clang_command_callbacks.vader b/test/command_callback/test_cpp_clang_command_callbacks.vader index 8c671115..3a5ea945 100644 --- a/test/command_callback/test_cpp_clang_command_callbacks.vader +++ b/test/command_callback/test_cpp_clang_command_callbacks.vader @@ -1,39 +1,16 @@ Before: - Save g:ale_cpp_clang_executable - Save g:ale_cpp_clang_options - - unlet! g:ale_cpp_clang_executable - unlet! b:ale_cpp_clang_executable - unlet! g:ale_cpp_clang_options - unlet! b:ale_cpp_clang_options - - runtime ale_linters/cpp/clang.vim - + call ale#assert#SetUpLinterTest('cpp', 'clang') let b:command_tail = ' -S -x c++ -fsyntax-only -iquote' \ . ' ' . ale#Escape(getcwd()) \ . ' -std=c++14 -Wall -' After: - Restore unlet! b:command_tail - unlet! b:ale_cpp_clang_executable - unlet! b:ale_cpp_clang_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'clang++', ale_linters#cpp#clang#GetExecutable(bufnr('')) + AssertLinter 'clang++', ale#Escape('clang++') . b:command_tail let b:ale_cpp_clang_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cpp#clang#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('clang++') . b:command_tail, - \ ale_linters#cpp#clang#GetCommand(bufnr(''), []) - - let b:ale_cpp_clang_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#cpp#clang#GetCommand(bufnr(''), []) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/test/command_callback/test_cpp_clangcheck_command_callbacks.vader b/test/command_callback/test_cpp_clangcheck_command_callbacks.vader index f708c52d..7aa09eed 100644 --- a/test/command_callback/test_cpp_clangcheck_command_callbacks.vader +++ b/test/command_callback/test_cpp_clangcheck_command_callbacks.vader @@ -1,63 +1,35 @@ Before: - Save g:ale_cpp_clangcheck_executable - Save g:ale_cpp_clangcheck_options - - unlet! g:ale_cpp_clangcheck_executable - unlet! b:ale_cpp_clangcheck_executable - unlet! g:ale_cpp_clangcheck_options - unlet! b:ale_cpp_clangcheck_options - - runtime ale_linters/cpp/clangcheck.vim + call ale#assert#SetUpLinterTest('cpp', 'clangcheck') After: - Restore - unlet! b:command_tail - unlet! b:ale_cpp_clangcheck_executable - unlet! b:ale_cpp_clangcheck_options - unlet! b:ale_c_build_dir - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'clang-check', ale_linters#cpp#clangcheck#GetExecutable(bufnr('')) - - let b:ale_cpp_clangcheck_executable = 'foobar' - - AssertEqual 'foobar', ale_linters#cpp#clangcheck#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual + AssertLinter 'clang-check', \ ale#Escape('clang-check') - \ . ' -analyze %s' - \ . ' -extra-arg -Xclang -extra-arg -analyzer-output=text', - \ ale_linters#cpp#clangcheck#GetCommand(bufnr('')) + \ . ' -analyze %s -extra-arg -Xclang -extra-arg -analyzer-output=text' let b:ale_cpp_clangcheck_executable = 'foobar' " The extra arguments in the command are used to prevent .plist files from " being generated. - AssertEqual + AssertLinter 'foobar', \ ale#Escape('foobar') - \ . ' -analyze %s' - \ . ' -extra-arg -Xclang -extra-arg -analyzer-output=text', - \ ale_linters#cpp#clangcheck#GetCommand(bufnr('')) + \ . ' -analyze %s -extra-arg -Xclang -extra-arg -analyzer-output=text' Execute(The options should be configurable): let b:ale_cpp_clangcheck_options = '--something' - AssertEqual + AssertLinter 'clang-check', \ ale#Escape('clang-check') \ . ' -analyze %s' \ . ' -extra-arg -Xclang -extra-arg -analyzer-output=text' - \ . ' --something', - \ ale_linters#cpp#clangcheck#GetCommand(bufnr('')) + \ . ' --something' Execute(The build directory should be used when set): let b:ale_cpp_clangcheck_options = '--something' let b:ale_c_build_dir = '/foo/bar' - AssertEqual + AssertLinter 'clang-check', \ ale#Escape('clang-check') - \ . ' -analyze %s ' - \ . '--something -p ' - \ . ale#Escape('/foo/bar'), - \ ale_linters#cpp#clangcheck#GetCommand(bufnr('')) + \ . ' -analyze %s --something -p ' . ale#Escape('/foo/bar') diff --git a/test/command_callback/test_cpp_cppcheck_command_callbacks.vader b/test/command_callback/test_cpp_cppcheck_command_callbacks.vader index 2c9d7298..3a7ada2c 100644 --- a/test/command_callback/test_cpp_cppcheck_command_callbacks.vader +++ b/test/command_callback/test_cpp_cppcheck_command_callbacks.vader @@ -1,49 +1,22 @@ Before: - Save g:ale_cpp_cppcheck_executable - Save g:ale_cpp_cppcheck_options - - unlet! g:ale_cpp_cppcheck_executable - unlet! b:ale_cpp_cppcheck_executable - unlet! g:ale_cpp_cppcheck_options - unlet! b:ale_cpp_cppcheck_options - - runtime ale_linters/cpp/cppcheck.vim - + call ale#assert#SetUpLinterTest('cpp', 'cppcheck') let b:command_tail = ' -q --language=c++ --enable=style %t' - call ale#test#SetDirectory('/testplugin/test/command_callback') - After: - Restore unlet! b:command_tail - unlet! b:ale_cpp_cppcheck_executable - unlet! b:ale_cpp_cppcheck_options - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'cppcheck', ale_linters#cpp#cppcheck#GetExecutable(bufnr('')) + AssertLinter 'cppcheck', ale#Escape('cppcheck') . b:command_tail let b:ale_cpp_cppcheck_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cpp#cppcheck#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('cppcheck') . b:command_tail, - \ ale_linters#cpp#cppcheck#GetCommand(bufnr('')) - - let b:ale_cpp_cppcheck_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#cpp#cppcheck#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail Execute(cppcheck for C++ should detect compile_commands.json files): call ale#test#SetFilename('cppcheck_paths/one/foo.cpp') - AssertEqual + AssertLinter 'cppcheck', \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/cppcheck_paths/one')) . ' && ' \ . ale#Escape('cppcheck') - \ . ' -q --language=c++ --project=compile_commands.json --enable=style %t', - \ ale_linters#cpp#cppcheck#GetCommand(bufnr('')) + \ . ' -q --language=c++ --project=compile_commands.json --enable=style %t' diff --git a/test/command_callback/test_cpp_cquery_command_callbacks.vader b/test/command_callback/test_cpp_cquery_command_callbacks.vader index 89a3e225..b355d052 100644 --- a/test/command_callback/test_cpp_cquery_command_callbacks.vader +++ b/test/command_callback/test_cpp_cquery_command_callbacks.vader @@ -2,47 +2,21 @@ " Description: A language server for C++ Before: - Save g:ale_cpp_cquery_executable - Save g:ale_cpp_cquery_cache_directory - - unlet! g:ale_cpp_cquery_executable - unlet! b:ale_cpp_cquery_executable - unlet! g:ale_cpp_cquery_cache_directory - unlet! b:ale_cpp_cquery_cache_directory - - runtime ale_linters/cpp/cquery.vim + call ale#assert#SetUpLinterTest('cpp', 'cquery') After: - Restore - unlet! b:ale_cpp_cquery_executable - unlet! b:ale_cpp_cquery_cache_directory - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'cquery', ale_linters#cpp#cquery#GetExecutable(bufnr('')) + AssertLinter 'cquery', ale#Escape('cquery') let b:ale_cpp_cquery_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cpp#cquery#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('cquery'), - \ ale_linters#cpp#cquery#GetCommand(bufnr('')) - - let b:ale_cpp_cquery_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar'), - \ ale_linters#cpp#cquery#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') Execute(The cache directory should be configurable): - AssertEqual - \ {'cacheDirectory': expand('$HOME/.cache/cquery')}, - \ ale_linters#cpp#cquery#GetInitializationOptions(bufnr('')) + AssertLSPOptions {'cacheDirectory': expand('$HOME/.cache/cquery')} let b:ale_cpp_cquery_cache_directory = '/foo/bar' - AssertEqual - \ {'cacheDirectory': '/foo/bar'}, - \ ale_linters#cpp#cquery#GetInitializationOptions(bufnr('')) + AssertLSPOptions {'cacheDirectory': '/foo/bar'} diff --git a/test/command_callback/test_cpp_flawfinder_command_callbacks.vader b/test/command_callback/test_cpp_flawfinder_command_callbacks.vader index 8769ec96..3f4067ea 100644 --- a/test/command_callback/test_cpp_flawfinder_command_callbacks.vader +++ b/test/command_callback/test_cpp_flawfinder_command_callbacks.vader @@ -1,51 +1,26 @@ Before: - Save g:ale_cpp_flawfinder_executable - Save g:ale_cpp_flawfinder_options - Save g:ale_cpp_flawfinder_minlevel - - unlet! g:ale_cpp_flawfinder_executable - unlet! b:ale_cpp_flawfinder_executable - unlet! g:ale_cpp_flawfinder_options - unlet! b:ale_cpp_flawfinder_options - unlet! g:ale_cpp_flawfinder_minlevel - unlet! b:ale_cpp_flawfinder_minlevel - - runtime ale_linters/cpp/flawfinder.vim + call ale#assert#SetUpLinterTest('cpp', 'flawfinder') After: - unlet! b:ale_cpp_flawfinder_executable - unlet! b:ale_cpp_flawfinder_options - unlet! b:ale_cpp_flawfinder_minlevel - - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The flawfinder command should be correct): - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --minlevel=1 %t', - \ ale_linters#cpp#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', + \ ale#Escape('flawfinder') . ' -CDQS --minlevel=1 %t' Execute(The minlevel of flawfinder should be configurable): let b:ale_cpp_flawfinder_minlevel = 8 - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --minlevel=8 %t', - \ ale_linters#cpp#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', + \ ale#Escape('flawfinder') . ' -CDQS --minlevel=8 %t' Execute(Additional flawfinder options should be configurable): let b:ale_cpp_flawfinder_options = ' --foobar' - AssertEqual - \ ale#Escape('flawfinder') - \ . ' -CDQS --foobar --minlevel=1 %t', - \ ale_linters#cpp#flawfinder#GetCommand(bufnr('')) + AssertLinter 'flawfinder', + \ ale#Escape('flawfinder') . ' -CDQS --foobar --minlevel=1 %t' Execute(The flawfinder exectable should be configurable): let b:ale_cpp_flawfinder_executable = 'foo/bar' - AssertEqual - \ ale#Escape('foo/bar') - \ . ' -CDQS --minlevel=1 %t', - \ ale_linters#cpp#flawfinder#GetCommand(bufnr('')) + AssertLinter 'foo/bar', ale#Escape('foo/bar') . ' -CDQS --minlevel=1 %t' diff --git a/test/command_callback/test_cpp_gcc_command_callbacks.vader b/test/command_callback/test_cpp_gcc_command_callbacks.vader index 7abebf4c..f9fad8c8 100644 --- a/test/command_callback/test_cpp_gcc_command_callbacks.vader +++ b/test/command_callback/test_cpp_gcc_command_callbacks.vader @@ -1,39 +1,16 @@ Before: - Save g:ale_cpp_gcc_executable - Save g:ale_cpp_gcc_options - - unlet! g:ale_cpp_gcc_executable - unlet! b:ale_cpp_gcc_executable - unlet! g:ale_cpp_gcc_options - unlet! b:ale_cpp_gcc_options - - runtime ale_linters/cpp/gcc.vim - + call ale#assert#SetUpLinterTest('cpp', 'gcc') let b:command_tail = ' -S -x c++ -fsyntax-only -iquote' \ . ' ' . ale#Escape(getcwd()) \ . ' -std=c++14 -Wall -' After: - Restore unlet! b:command_tail - unlet! b:ale_cpp_gcc_executable - unlet! b:ale_cpp_gcc_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'gcc', ale_linters#cpp#gcc#GetExecutable(bufnr('')) + AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail let b:ale_cpp_gcc_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cpp#gcc#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('gcc') . b:command_tail, - \ ale_linters#cpp#gcc#GetCommand(bufnr(''), []) - - let b:ale_cpp_gcc_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#cpp#gcc#GetCommand(bufnr(''), []) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/test/command_callback/test_cpplint_command_callbacks.vader b/test/command_callback/test_cpplint_command_callbacks.vader index 34746a1b..d5fd457b 100644 --- a/test/command_callback/test_cpplint_command_callbacks.vader +++ b/test/command_callback/test_cpplint_command_callbacks.vader @@ -1,42 +1,17 @@ Before: - Save g:ale_cpp_cpplint_executable - Save g:ale_cpp_cpplint_options - - unlet! g:ale_cpp_cpplint_executable - unlet! b:ale_cpp_cpplint_executable - unlet! g:ale_cpp_cpplint_options - unlet! b:ale_cpp_cpplint_options - - runtime ale_linters/cpp/cpplint.vim + call ale#assert#SetUpLinterTest('cpp', 'cpplint') After: - Restore - unlet! b:command_tail - unlet! b:ale_cpp_cpplint_executable - unlet! b:ale_cpp_cpplint_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'cpplint', ale_linters#cpp#cpplint#GetExecutable(bufnr('')) + AssertLinter 'cpplint', ale#Escape('cpplint') . ' %s' let b:ale_cpp_cpplint_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cpp#cpplint#GetExecutable(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' %s' -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('cpplint') . ' %s', - \ ale_linters#cpp#cpplint#GetCommand(bufnr('')) - - let b:ale_cpp_cpplint_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . ' %s', - \ ale_linters#cpp#cpplint#GetCommand(bufnr('')) - \ Execute(The options should be configurable): let b:ale_cpp_cpplint_options = '--something' - AssertEqual - \ ale#Escape('cpplint') . ' --something %s', - \ ale_linters#cpp#cpplint#GetCommand(bufnr('')) + AssertLinter 'cpplint', ale#Escape('cpplint') . ' --something %s' diff --git a/test/command_callback/test_cs_mcs_command_callbacks.vader b/test/command_callback/test_cs_mcs_command_callbacks.vader index 30f067ea..dbebd106 100644 --- a/test/command_callback/test_cs_mcs_command_callbacks.vader +++ b/test/command_callback/test_cs_mcs_command_callbacks.vader @@ -1,34 +1,13 @@ Before: - Save g:ale_cs_mcs_options - - unlet! g:ale_cs_mcs_options - - runtime ale_linters/cs/mcs.vim - - let b:command_tail = ' -unsafe --parse' + call ale#assert#SetUpLinterTest('cs', 'mcs') After: - Restore - unlet! b:command_tail - unlet! b:ale_cs_mcs_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() -Execute(Check for proper default command): - - let b:command = ale_linters#cs#mcs#GetCommand(bufnr('')) - let b:command = substitute(b:command,'\s\+',' ','g') - - AssertEqual - \ b:command, - \ 'mcs -unsafe --parse %t' +Execute(The default command should be correct): + AssertLinter 'mcs', 'mcs -unsafe --parse %t' Execute(The options should be be used in the command): - let b:ale_cs_mcs_options = '-pkg:dotnet' - let b:command = ale_linters#cs#mcs#GetCommand(bufnr('')) - let b:command = substitute(b:command,'\s\+',' ','g') - - AssertEqual - \ b:command, - \ 'mcs' . b:command_tail . ' ' . b:ale_cs_mcs_options . ' %t', + AssertLinter 'mcs', 'mcs -unsafe --parse -pkg:dotnet %t' diff --git a/test/command_callback/test_cs_mcsc_command_callbacks.vader b/test/command_callback/test_cs_mcsc_command_callbacks.vader index cb52c969..20ddb28b 100644 --- a/test/command_callback/test_cs_mcsc_command_callbacks.vader +++ b/test/command_callback/test_cs_mcsc_command_callbacks.vader @@ -1,93 +1,47 @@ Before: - Save g:ale_cs_mcsc_options - Save g:ale_cs_mcsc_source - Save g:ale_cs_mcsc_assembly_path - Save g:ale_cs_mcsc_assemblies - Save g:ale_buffer_info - - let g:ale_buffer_info = {bufnr(''): {'temporary_file_list': []}} - - unlet! g:ale_cs_mcsc_options - unlet! g:ale_cs_mcsc_source - unlet! g:ale_cs_mcsc_assembly_path - unlet! g:ale_cs_mcsc_assemblies - - let g:prefix = ' -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - - function! GetCommand() - let l:command = ale_linters#cs#mcsc#GetCommand(bufnr('')) - let l:command = join(split(l:command)) - - return substitute(l:command, ':[^ ]\+ -t:module', ':TEMP -t:module', '') - endfunction - - runtime ale_linters/cs/mcsc.vim + call ale#assert#SetUpLinterTest('cs', 'mcsc') After: - Restore - - unlet! b:ale_cs_mcsc_options - unlet! g:ale_cs_mcsc_source - unlet! g:ale_cs_mcsc_assembly_path - unlet! g:ale_cs_mcsc_assemblies - unlet! g:ale_prefix - - delfunction GetCommand - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The mcsc linter should return the correct default command): - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe' . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') Execute(The options should be be used in the command): let g:ale_cs_mcsc_options = '-pkg:dotnet' - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe -pkg:dotnet' . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe -pkg:dotnet -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') Execute(The souce path should be be used in the command): let g:ale_cs_mcsc_source = '../foo/bar' - AssertEqual - \ 'cd ' . ale#Escape('../foo/bar') . ' && ' - \ . 'mcs -unsafe' . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape('../foo/bar') . ' && ' + \ . 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') Execute(The list of search pathes for assemblies should be be used in the command if not empty): let g:ale_cs_mcsc_assembly_path = ['/usr/lib/mono', '../foo/bar'] - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe' - \ . ' -lib:' . ale#Escape('/usr/lib/mono') . ',' . ale#Escape('../foo/bar') - \ . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe' + \ . ' -lib:' . ale#Escape('/usr/lib/mono') . ',' . ale#Escape('../foo/bar') + \ . ' -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') let g:ale_cs_mcsc_assembly_path = [] - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe' . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') Execute(The list of assemblies should be be used in the command if not empty): let g:ale_cs_mcsc_assemblies = ['foo.dll', 'bar.dll'] - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe' - \ . ' -r:' . ale#Escape('foo.dll') . ',' . ale#Escape('bar.dll') - \ . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe' + \ . ' -r:' . ale#Escape('foo.dll') . ',' . ale#Escape('bar.dll') + \ . ' -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') let g:ale_cs_mcsc_assemblies = [] - AssertEqual - \ ale#path#BufferCdString(bufnr('')) - \ . 'mcs -unsafe' . g:prefix, - \ GetCommand() + AssertLinter 'mcs', 'cd ' . ale#Escape(g:dir) . ' && ' + \ . 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') diff --git a/test/command_callback/test_cucumber_command_callback.vader b/test/command_callback/test_cucumber_command_callback.vader index d09a5712..7a8457fc 100644 --- a/test/command_callback/test_cucumber_command_callback.vader +++ b/test/command_callback/test_cucumber_command_callback.vader @@ -1,25 +1,18 @@ Before: - runtime ale_linters/ruby/rubocop.vim - call ale#test#SetDirectory('/testplugin/test/') + call ale#assert#SetUpLinterTest('cucumber', 'cucumber') After: - Restore - - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(Should require the nearest features dir, if one is found): - call ale#test#SetFilename('cucumber_fixtures/features/cuke.feature') + call ale#test#SetFilename('../cucumber_fixtures/features/cuke.feature') - AssertEqual - \ 'cucumber --dry-run --quiet --strict --format=json ' - \ . '-r ' . ale#Escape(ale#path#Simplify(g:dir . '/cucumber_fixtures/features/')) . ' %t', - \ ale_linters#cucumber#cucumber#GetCommand(bufnr('')) + AssertLinter 'cucumber', + \ 'cucumber --dry-run --quiet --strict --format=json ' + \ . '-r ' . ale#Escape(ale#path#Simplify(g:dir . '/../cucumber_fixtures/features/')) . ' %t' Execute(Should require nothing if no features dir is found): call ale#test#SetFilename('something/without/a/features/dir') - AssertEqual - \ 'cucumber --dry-run --quiet --strict --format=json ' - \ . ' %t', - \ ale_linters#cucumber#cucumber#GetCommand(bufnr('')) + AssertLinter 'cucumber', + \ 'cucumber --dry-run --quiet --strict --format=json %t' diff --git a/test/command_callback/test_cuda_nvcc_command_callbacks.vader b/test/command_callback/test_cuda_nvcc_command_callbacks.vader index af199d37..9e2b5ac6 100644 --- a/test/command_callback/test_cuda_nvcc_command_callbacks.vader +++ b/test/command_callback/test_cuda_nvcc_command_callbacks.vader @@ -1,36 +1,14 @@ Before: - Save g:ale_cuda_nvcc_executable - Save g:ale_cuda_nvcc_options - - unlet! g:ale_cuda_nvcc_executable - unlet! b:ale_cuda_nvcc_executable - unlet! g:ale_cuda_nvcc_options - unlet! b:ale_cuda_nvcc_options - - runtime ale_linters/cuda/nvcc.vim + call ale#assert#SetUpLinterTest('cuda', 'nvcc') After: - Restore - unlet! b:ale_cuda_nvcc_executable - unlet! b:ale_cuda_nvcc_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'nvcc', ale_linters#cuda#nvcc#GetExecutable(bufnr('')) + AssertLinter 'nvcc', + \ ale#Escape('nvcc') . ' -cuda -std=c++11 %s -o ' . g:ale#util#nul_file let b:ale_cuda_nvcc_executable = 'foobar' - AssertEqual 'foobar', ale_linters#cuda#nvcc#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('nvcc') . ' -cuda -std=c++11 %s' - \ . ' -o ' . g:ale#util#nul_file, - \ ale_linters#cuda#nvcc#GetCommand(bufnr('')) - - let b:ale_cuda_nvcc_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . ' -cuda -std=c++11 %s' - \ . ' -o ' . g:ale#util#nul_file, - \ ale_linters#cuda#nvcc#GetCommand(bufnr('')) + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' -cuda -std=c++11 %s -o ' . g:ale#util#nul_file diff --git a/test/command_callback/test_dartanalyzer_command_callback.vader b/test/command_callback/test_dartanalyzer_command_callback.vader index c7b51396..62b1d636 100644 --- a/test/command_callback/test_dartanalyzer_command_callback.vader +++ b/test/command_callback/test_dartanalyzer_command_callback.vader @@ -1,40 +1,20 @@ Before: - Save g:ale_dart_dartanalyzer_executable - unlet! g:ale_dart_dartanalyzer_executable - - runtime ale_linters/dart/dartanalyzer.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('dart', 'dartanalyzer') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command and executable should be correct): - AssertEqual - \ 'dartanalyzer', - \ ale_linters#dart#dartanalyzer#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('dartanalyzer') . ' %s', - \ ale_linters#dart#dartanalyzer#GetCommand(bufnr('')) + AssertLinter 'dartanalyzer', ale#Escape('dartanalyzer') . ' %s' Execute(The executable should be configurable): - let g:ale_dart_dartanalyzer_executable = '/usr/lib/dart/bin/dartanalyzer' + let g:ale_dart_dartanalyzer_executable = 'foobar' - AssertEqual - \ '/usr/lib/dart/bin/dartanalyzer', - \ ale_linters#dart#dartanalyzer#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('/usr/lib/dart/bin/dartanalyzer') . ' %s', - \ ale_linters#dart#dartanalyzer#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' %s' Execute(The .packages file should be set if detected): call ale#test#SetFilename('dart_paths/foo') - AssertEqual - \ ale#Escape('dartanalyzer') + AssertLinter 'dartanalyzer', ale#Escape('dartanalyzer') \ . ' --packages ' . ale#Escape(ale#path#Simplify(g:dir . '/dart_paths/.packages')) - \ . ' %s', - \ ale_linters#dart#dartanalyzer#GetCommand(bufnr('')) + \ . ' %s' diff --git a/test/command_callback/test_elixir_mix_command_callbacks.vader b/test/command_callback/test_elixir_mix_command_callbacks.vader index 67785881..18fb13ed 100644 --- a/test/command_callback/test_elixir_mix_command_callbacks.vader +++ b/test/command_callback/test_elixir_mix_command_callbacks.vader @@ -1,37 +1,19 @@ Before: - runtime ale_linters/elixir/mix.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') - - let g:project_root = ale#path#Simplify(g:dir . '/mix_paths/wrapped_project') + call ale#assert#SetUpLinterTest('elixir', 'mix') let g:env_prefix = has('win32') - \ ? 'set MIX_BUILD_PATH=TEMP && ' - \ : 'MIX_BUILD_PATH=TEMP ' - - - function! GetCommand(buffer) abort - let l:command = ale_linters#elixir#mix#GetCommand(a:buffer) - - return substitute(l:command, 'MIX_BUILD_PATH=[^ ]\+', 'MIX_BUILD_PATH=TEMP', '') - endfunction + \ ? 'set MIX_BUILD_PATH=' . ale#Escape('TEMP_DIR') . ' && ' + \ : 'MIX_BUILD_PATH=' . ale#Escape('TEMP_DIR') . ' ' After: - Restore - unlet! g:env_prefix - unlet! g:project_root - call ale#linter#Reset() - call ale#test#RestoreDirectory() - - delfunction GetCommand + call ale#assert#TearDownLinterTest() Execute(The default mix command should be correct): call ale#test#SetFilename('mix_paths/wrapped_project/lib/app.ex') - AssertEqual - \ GetCommand(bufnr('')), - \ ale#path#CdString(g:project_root) + AssertLinter 'mix', + \ ale#path#CdString(ale#path#Simplify(g:dir . '/mix_paths/wrapped_project')) \ . g:env_prefix \ . 'mix compile %s' diff --git a/test/command_callback/test_erb_command_callback.vader b/test/command_callback/test_erb_command_callback.vader index 481f64f9..c29d9215 100644 --- a/test/command_callback/test_erb_command_callback.vader +++ b/test/command_callback/test_erb_command_callback.vader @@ -1,21 +1,16 @@ Before: - runtime ale_linters/eruby/erb.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('eruby', 'erb') After: - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(Executable should not contain any filter code by default): call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/file.rb') - AssertEqual - \ 'erb -P -T - -x %t | ruby -c', - \ ale_linters#eruby#erb#GetCommand(bufnr('')) + AssertLinter 'erb', 'erb -P -T - -x %t | ruby -c' Execute(Executable should filter invalid eRuby when inside a Rails project): call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/app/views/my_great_view.html.erb') - AssertEqual - \ 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c', - \ ale_linters#eruby#erb#GetCommand(bufnr('')) + AssertLinter 'erb', + \ 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c' diff --git a/test/command_callback/test_erlang_syntaxerl_command_callback.vader b/test/command_callback/test_erlang_syntaxerl_command_callback.vader index a9a1a500..28cff9b9 100644 --- a/test/command_callback/test_erlang_syntaxerl_command_callback.vader +++ b/test/command_callback/test_erlang_syntaxerl_command_callback.vader @@ -1,66 +1,45 @@ Before: - Save g:ale_erlang_syntaxerl_executable - - unlet! g:ale_erlang_syntaxerl_executable - unlet! b:ale_erlang_syntaxerl_executable - - runtime ale_linters/erlang/syntaxerl.vim + call ale#assert#SetUpLinterTest('erlang', 'syntaxerl') After: - Restore + call ale#assert#TearDownLinterTest() - call ale#linter#Reset() +Execute (The default commands should be correct): + AssertLinter 'syntaxerl', [ + \ ale#Escape('syntaxerl') . ' -h', + \ ale#Escape('syntaxerl') . ' %t', + \] -Execute (The executable should be correct): - AssertEqual 'syntaxerl', ale_linters#erlang#syntaxerl#GetExecutable(bufnr('')) +Execute (The executable should be configurable): + let b:ale_erlang_syntaxerl_executable = 'foobar' - let g:ale_erlang_syntaxerl_executable = '/some/other/syntaxerl' - AssertEqual '/some/other/syntaxerl', ale_linters#erlang#syntaxerl#GetExecutable(bufnr('')) - - let b:ale_erlang_syntaxerl_executable = '/yet/another/syntaxerl' - AssertEqual '/yet/another/syntaxerl', ale_linters#erlang#syntaxerl#GetExecutable(bufnr('')) - - -Execute (The executable should be presented in the feature check command): - let g:ale_erlang_syntaxerl_executable = '/some/other/syntaxerl' - - AssertEqual - \ ale#Escape('/some/other/syntaxerl') . ' -h', - \ ale_linters#erlang#syntaxerl#FeatureCheck(bufnr('')) - - let b:ale_erlang_syntaxerl_executable = '/yet/another/syntaxerl' - - AssertEqual - \ ale#Escape('/yet/another/syntaxerl') . ' -h', - \ ale_linters#erlang#syntaxerl#FeatureCheck(bufnr('')) - -Execute (The executable should be presented in the command): - let g:ale_erlang_syntaxerl_executable = '/some/other/syntaxerl' - - AssertEqual - \ ale#Escape('/some/other/syntaxerl') . ' %t', - \ ale_linters#erlang#syntaxerl#GetCommand(bufnr(''), []) - - let b:ale_erlang_syntaxerl_executable = '/yet/another/syntaxerl' - - AssertEqual - \ ale#Escape('/yet/another/syntaxerl') . ' %t', - \ ale_linters#erlang#syntaxerl#GetCommand(bufnr(''), []) + AssertLinter 'foobar', [ + \ ale#Escape('foobar') . ' -h', + \ ale#Escape('foobar') . ' %t', + \] Execute (The -b option should be used when available): - AssertEqual ale#Escape('syntaxerl') . ' %t', ale_linters#erlang#syntaxerl#GetCommand(bufnr(''), [ - \ 'Syntax checker for Erlang (0.14.0)', - \ 'Usage: syntaxerl [-d | --debug] ', - \ ' syntaxerl <-h | --help>', - \ ' -d, --debug Enable debug output', - \ ' -h, --help Show this message', - \ ]) + WithChainResults [ + \ 'Syntax checker for Erlang (0.14.0)', + \ 'Usage: syntaxerl [-d | --debug] ', + \ ' syntaxerl <-h | --help>', + \ ' -d, --debug Enable debug output', + \ ' -h, --help Show this message', + \] + AssertLinter 'syntaxerl', [ + \ ale#Escape('syntaxerl') . ' -h', + \ ale#Escape('syntaxerl') . ' %t', + \] - AssertEqual ale#Escape('syntaxerl') . ' -b %s %t', ale_linters#erlang#syntaxerl#GetCommand(bufnr(''), [ - \ 'Syntax checker for Erlang (0.14.0)', - \ 'Usage: syntaxerl [-b | --base ] [-d | --debug] ', - \ ' syntaxerl <-h | --help>', - \ ' -b, --base Set original filename', - \ ' -d, --debug Enable debug output', - \ ' -h, --help Show this message', - \ ]) + WithChainResults [ + \ 'Syntax checker for Erlang (0.14.0)', + \ 'Usage: syntaxerl [-b | --base ] [-d | --debug] ', + \ ' syntaxerl <-h | --help>', + \ ' -b, --base Set original filename', + \ ' -d, --debug Enable debug output', + \ ' -h, --help Show this message', + \] + AssertLinter 'syntaxerl', [ + \ ale#Escape('syntaxerl') . ' -h', + \ ale#Escape('syntaxerl') . ' -b %s %t', + \] diff --git a/test/command_callback/test_erubi_command_callback.vader b/test/command_callback/test_erubi_command_callback.vader index 1953d763..0643efc2 100644 --- a/test/command_callback/test_erubi_command_callback.vader +++ b/test/command_callback/test_erubi_command_callback.vader @@ -1,31 +1,32 @@ Before: - runtime ale_linters/eruby/erubi.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('eruby', 'erubi') After: - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(Executable should not contain any filter code by default): call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/file.rb') - AssertEqual + AssertLinter 'ruby', [ + \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), \ 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c', - \ ale_linters#eruby#erubi#GetCommand(bufnr(''), []) + \] Execute(Executable should filter invalid eRuby when inside a Rails project): call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/app/views/my_great_view.html.erb') - AssertEqual + AssertLinter 'ruby', [ + \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), \ 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c', - \ ale_linters#eruby#erubi#GetCommand(bufnr(''), []) - -Execute(Command should be blank if the first command in the chain return output): - let output_lines = [ - \ "/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- erubi/capture_end (LoadError)", - \ " from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'", \] - AssertEqual +Execute(Command should be blank if the first command in the chain returns output): + WithChainResults [ + \ "/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- erubi/capture_end (LoadError)", + \ " from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'", + \] + + AssertLinter 'ruby', [ + \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), \ '', - \ ale_linters#eruby#erubi#GetCommand(bufnr(''), output_lines) + \] diff --git a/test/command_callback/test_erubis_command_callback.vader b/test/command_callback/test_erubis_command_callback.vader index 574dd684..c9cdb80f 100644 --- a/test/command_callback/test_erubis_command_callback.vader +++ b/test/command_callback/test_erubis_command_callback.vader @@ -1,21 +1,16 @@ Before: - runtime ale_linters/eruby/erubis.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('eruby', 'erubis') After: - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(Executable should not contain any filter code by default): call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/file.rb') - AssertEqual - \ 'erubis -x %t | ruby -c', - \ ale_linters#eruby#erubis#GetCommand(bufnr('')) + AssertLinter 'erubis', 'erubis -x %t | ruby -c' Execute(Executable should filter invalid eRuby when inside a Rails project): call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/app/views/my_great_view.html.erb') - AssertEqual - \ 'ruby -r erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c', - \ ale_linters#eruby#erubis#GetCommand(bufnr('')) + AssertLinter 'erubis', + \ 'ruby -r erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c' diff --git a/test/command_callback/test_flake8_command_callback.vader b/test/command_callback/test_flake8_command_callback.vader index 1cc50836..f12b6747 100644 --- a/test/command_callback/test_flake8_command_callback.vader +++ b/test/command_callback/test_flake8_command_callback.vader @@ -1,91 +1,75 @@ Before: - Save g:ale_python_flake8_executable - Save g:ale_python_flake8_options - Save g:ale_python_flake8_use_global - Save g:ale_python_flake8_change_directory - - unlet! g:ale_python_flake8_executable - unlet! g:ale_python_flake8_args - unlet! g:ale_python_flake8_options - unlet! g:ale_python_flake8_use_global - unlet! g:ale_python_flake8_change_directory - + call ale#assert#SetUpLinterTest('python', 'flake8') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - runtime ale_linters/python/flake8.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + WithChainResults ['3.0.0'] After: - Restore - - unlet! g:ale_python_flake8_args - - unlet! b:bin_dir unlet! b:executable - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - call ale#semver#ResetVersionCache() + unlet! b:bin_dir + call ale#assert#TearDownLinterTest() Execute(The flake8 callbacks should return the correct default values): - AssertEqual - \ 'flake8', - \ ale_linters#python#flake8#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'flake8', [ \ ale#Escape('flake8') . ' --version', - \ ale_linters#python#flake8#VersionCheck(bufnr('')) - AssertEqual \ ale#path#BufferCdString(bufnr('')) \ . ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.0']) + \] + + " The version check should be cached. + WithChainResults [] + AssertLinter 'flake8', [ + \ '', + \ ale#path#BufferCdString(bufnr('')) + \ . ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', + \] " Try with older versions. call ale#semver#ResetVersionCache() - AssertEqual + WithChainResults ['2.9.9'] + AssertLinter 'flake8', [ + \ ale#Escape('flake8') . ' --version', \ ale#path#BufferCdString(bufnr('')) \ . ale#Escape('flake8') . ' --format=default -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['2.9.9']) + \] Execute(The option for disabling changing directories should work): let g:ale_python_flake8_change_directory = 0 - AssertEqual + AssertLinter 'flake8', [ + \ ale#Escape('flake8') . ' --version', \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.0']) + \] Execute(The flake8 command callback should let you set options): let g:ale_python_flake8_options = '--some-option' - AssertEqual + WithChainResults ['3.0.4'] + AssertLinter 'flake8', [ + \ ale#Escape('flake8') . ' --version', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('flake8') - \ . ' --some-option --format=default' - \ . ' --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.4']) + \ . ale#Escape('flake8') . ' --some-option' + \ . ' --format=default --stdin-display-name %s -', + \] call ale#semver#ResetVersionCache() - - AssertEqual + WithChainResults ['2.9.9'] + AssertLinter 'flake8', [ + \ ale#Escape('flake8') . ' --version', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('flake8') - \ . ' --some-option --format=default -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['2.9.9']) + \ . ale#Escape('flake8') . ' --some-option --format=default -', + \] Execute(You should be able to set a custom executable and it should be escaped): let g:ale_python_flake8_executable = 'executable with spaces' - AssertEqual - \ 'executable with spaces', - \ ale_linters#python#flake8#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'executable with spaces', [ \ ale#Escape('executable with spaces') . ' --version', - \ ale_linters#python#flake8#VersionCheck(bufnr('')) - AssertEqual \ ale#path#BufferCdString(bufnr('')) \ . ale#Escape('executable with spaces') \ . ' --format=default' \ . ' --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.0']) + \] Execute(The flake8 callbacks should detect virtualenv directories): silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') @@ -94,17 +78,13 @@ Execute(The flake8 callbacks should detect virtualenv directories): \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/flake8' \) - AssertEqual - \ b:executable, - \ ale_linters#python#flake8#GetExecutable(bufnr('')) - AssertEqual + AssertLinter b:executable, [ \ ale#Escape(b:executable) . ' --version', - \ ale_linters#python#flake8#VersionCheck(bufnr('')) - AssertEqual \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape(b:executable) - \ . ' --format=default --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.0']) + \ . ale#Escape(b:executable) + \ . ' --format=default' + \ . ' --stdin-display-name %s -', + \] Execute(The FindProjectRoot should detect the project root directory for namespace package via Manifest.in): silent execute 'file ' . fnameescape(g:dir . '/python_paths/namespace_package_manifest/namespace/foo/bar.py') @@ -148,37 +128,32 @@ Execute(Using `python -m flake8` should be supported for running flake8): let g:ale_python_flake8_executable = 'python' let g:ale_python_flake8_options = '-m flake8 --some-option' - AssertEqual - \ 'python', - \ ale_linters#python#flake8#GetExecutable(bufnr('')) - AssertEqual + WithChainResults ['2.9.9'] + AssertLinter 'python', [ \ ale#Escape('python') . ' -m flake8 --version', - \ ale_linters#python#flake8#VersionCheck(bufnr('')) - AssertEqual \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('python') . ' -m flake8 --some-option --format=default -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['2.9.9']) + \ . ale#Escape('python') + \ . ' -m flake8 --some-option --format=default -' + \] call ale#semver#ResetVersionCache() " Leading spaces shouldn't matter let g:ale_python_flake8_options = ' -m flake8 --some-option' - AssertEqual - \ 'python', - \ ale_linters#python#flake8#GetExecutable(bufnr('')) - AssertEqual + WithChainResults ['2.9.9'] + AssertLinter 'python', [ \ ale#Escape('python') . ' -m flake8 --version', - \ ale_linters#python#flake8#VersionCheck(bufnr('')) - AssertEqual \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('python') . ' -m flake8 --some-option --format=default -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['2.9.9']) + \ . ale#Escape('python') + \ . ' -m flake8 --some-option --format=default -' + \] -Execute(Setting executable to 'pipenv' appends 'run flake8'): +Execute(Setting executable to 'pipenv' should append 'run flake8'): let g:ale_python_flake8_executable = 'path/to/pipenv' - AssertEqual + " FIXME: pipenv should check the vresion with flake8. + WithChainResults [] + AssertLinter 'path/to/pipenv', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('path/to/pipenv') . ' run flake8 --format=default --stdin-display-name %s -', - \ ale_linters#python#flake8#GetCommand(bufnr(''), ['3.0.0']) + \ . ale#Escape('path/to/pipenv') . ' run flake8 --format=default -' diff --git a/test/command_callback/test_foodcritic_command_callback.vader b/test/command_callback/test_foodcritic_command_callback.vader index e3ad8a70..c5564cb1 100644 --- a/test/command_callback/test_foodcritic_command_callback.vader +++ b/test/command_callback/test_foodcritic_command_callback.vader @@ -1,44 +1,18 @@ Before: - Save g:ale_chef_foodcritic_executable - Save g:ale_chef_foodcritic_options - - unlet! g:ale_chef_foodcritic_executable - unlet! g:ale_chef_foodcritic_options - - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/chef/foodcritic.vim + call ale#assert#SetUpLinterTest('chef', 'foodcritic') After: - Restore - - unlet! b:ale_chef_foodcritic_executable - unlet! b:ale_chef_foodcritic_options - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual - \ 'foodcritic', - \ ale_linters#chef#foodcritic#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foodcritic') . ' %s', - \ ale_linters#chef#foodcritic#GetCommand(bufnr('')) + AssertLinter 'foodcritic', ale#Escape('foodcritic') . ' %s' Execute(Extra options should be included with escapeed tildes (~)): let b:ale_chef_foodcritic_options = '-t ~F011' - AssertEqual - \ ale#Escape('foodcritic') . ' -t \~F011 %s', - \ ale_linters#chef#foodcritic#GetCommand(bufnr('')) + AssertLinter 'foodcritic', ale#Escape('foodcritic') . ' -t \~F011 %s' Execute(The executable should be configurable): let b:ale_chef_foodcritic_executable = 'foobar' - AssertEqual - \ 'foobar', - \ ale_linters#chef#foodcritic#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foobar') . ' %s', - \ ale_linters#chef#foodcritic#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' %s' diff --git a/test/command_callback/test_fsc_command_callback.vader b/test/command_callback/test_fsc_command_callback.vader index 451fa108..5fb5e7fa 100644 --- a/test/command_callback/test_fsc_command_callback.vader +++ b/test/command_callback/test_fsc_command_callback.vader @@ -1,17 +1,13 @@ Before: - runtime ale_linters/scala/fsc.vim + call ale#assert#SetUpLinterTest('scala', 'fsc') After: - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Given scala(An empty Scala file): Execute(The default executable and command should be correct): - AssertEqual 'fsc', ale_linters#scala#fsc#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('fsc') . ' -Ystop-after:parser %t', - \ ale_linters#scala#fsc#GetCommand(bufnr('')) + AssertLinter 'fsc', ale#Escape('fsc') . ' -Ystop-after:parser %t' Given scala.sbt(An empty SBT file): Execute(fsc should not be run for sbt files): - AssertEqual '', ale_linters#scala#fsc#GetExecutable(bufnr('')) - AssertEqual '', ale_linters#scala#fsc#GetCommand(bufnr('')) + AssertLinter '', '' diff --git a/test/command_callback/test_fusionlint_command_callback.vader b/test/command_callback/test_fusionlint_command_callback.vader index 34a44133..1c63b811 100644 --- a/test/command_callback/test_fusionlint_command_callback.vader +++ b/test/command_callback/test_fusionlint_command_callback.vader @@ -1,34 +1,19 @@ Before: - Save g:ale_fuse_fusionlint_options - Save g:ale_fuse_fusionlint_executable - - unlet! g:ale_fuse_fusionlint_options - unlet! g:ale_fuse_fusionlint_executable - - runtime ale_linters/fuse/fusionlint.vim + call ale#assert#SetUpLinterTest('fuse', 'fusionlint') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The fuse fusionlint command callback should return the correct default string): - AssertEqual ale#Escape('fusion-lint') . ' --filename %s -i', - \ join(split(ale_linters#fuse#fusionlint#GetCommand(1))) + AssertLinter 'fusion-lint', ale#Escape('fusion-lint') . ' --filename %s -i' Execute(The fuse fusionlint command callback should let you set options): let g:ale_fuse_fusionlint_options = '--example-option argument' - AssertEqual - \ ale#Escape('fusion-lint') - \ . ' --example-option argument --filename %s -i', - \ join(split(ale_linters#fuse#fusionlint#GetCommand(1))) + AssertLinter 'fusion-lint', + \ ale#Escape('fusion-lint') . ' --example-option argument --filename %s -i' Execute(The fusionlint executable should be configurable): - let g:ale_fuse_fusionlint_executable = 'util/linter.fuse' + let g:ale_fuse_fusionlint_executable = 'foobar' - AssertEqual 'util/linter.fuse', ale_linters#fuse#fusionlint#GetExecutable(1) - AssertEqual - \ ale#Escape('util/linter.fuse') - \ . ' --filename %s -i', - \ join(split(ale_linters#fuse#fusionlint#GetCommand(1))) + AssertLinter 'foobar', ale#Escape('foobar') . ' --filename %s -i' diff --git a/test/command_callback/test_gawk_command_callback.vader b/test/command_callback/test_gawk_command_callback.vader index ae128fe5..6bc0a438 100644 --- a/test/command_callback/test_gawk_command_callback.vader +++ b/test/command_callback/test_gawk_command_callback.vader @@ -1,40 +1,25 @@ Before: - Save g:ale_awk_gawk_executable - Save g:ale_awk_gawk_options - unlet! g:ale_awk_gawk_executable - unlet! g:ale_awk_gawk_options - - runtime ale_linters/awk/gawk.vim + call ale#assert#SetUpLinterTest('awk', 'gawk') After: - Restore - unlet! b:command_tail - unlet! b:ale_awk_gawk_executable - unlet! b:ale_awk_gawk_options + call ale#assert#TearDownLinterTest() - call ale#linter#Reset() - -Execute(The executable should be used in the command): - AssertEqual - \ 'gawk' - \ . " --source 'BEGIN { exit } END { exit 1 }'" - \ . ' ' . '-f %t --lint /dev/null', - \ ale_linters#awk#gawk#GetCommand(bufnr('')) +Execute(The default command should be correct): + AssertLinter 'gawk', + \ ale#Escape('gawk') . ' --source ''BEGIN { exit } END { exit 1 }''' + \ . ' -f %t --lint /dev/null' +Execute(The executable should be configurable): let b:ale_awk_gawk_executable = '/other/gawk' - AssertEqual - \ '/other/gawk' - \ . " --source 'BEGIN { exit } END { exit 1 }'" - \ . ' ' . '-f %t --lint /dev/null', - \ ale_linters#awk#gawk#GetCommand(bufnr('')) + AssertLinter '/other/gawk', + \ ale#Escape('/other/gawk') . ' --source ''BEGIN { exit } END { exit 1 }''' + \ . ' -f %t --lint /dev/null' +Execute(The options should be configurable): let b:ale_awk_gawk_executable = 'gawk' let b:ale_awk_gawk_options = '--something' - AssertEqual - \ 'gawk' - \ . " --source 'BEGIN { exit } END { exit 1 }'" - \ . ' --something' - \ . ' ' . '-f %t --lint /dev/null', - \ ale_linters#awk#gawk#GetCommand(bufnr('')) + AssertLinter 'gawk', + \ ale#Escape('gawk') . ' --source ''BEGIN { exit } END { exit 1 }''' + \ . ' --something -f %t --lint /dev/null' diff --git a/test/command_callback/test_gfortran_command_callback.vader b/test/command_callback/test_gfortran_command_callback.vader index 501e92fd..a6ab50cd 100644 --- a/test/command_callback/test_gfortran_command_callback.vader +++ b/test/command_callback/test_gfortran_command_callback.vader @@ -1,31 +1,24 @@ Before: - runtime ale_linters/fortran/gcc.vim + call ale#assert#SetUpLinterTest('fortran', 'gcc') After: - call ale#linter#Reset() - let g:ale_fortran_gcc_options = '-Wall' - let g:ale_fortran_gcc_use_free_form = 1 - let g:ale_fortran_gcc_executable = 'gcc' + call ale#assert#TearDownLinterTest() Execute(The fortran gcc command callback should return the correct default string): - AssertEqual 'gcc -S -x f95 -fsyntax-only -ffree-form -Wall -', - \ join(split(ale_linters#fortran#gcc#GetCommand(1))) + AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffree-form -Wall -' Execute(The fortran gcc command callback should let you set options): let g:ale_fortran_gcc_options = '-Wotherthings' - AssertEqual 'gcc -S -x f95 -fsyntax-only -ffree-form -Wotherthings -', - \ join(split(ale_linters#fortran#gcc#GetCommand(1))) + AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffree-form -Wotherthings -' Execute(The fortran gcc command callback should let you use -ffixed-form): let g:ale_fortran_gcc_use_free_form = 0 - AssertEqual 'gcc -S -x f95 -fsyntax-only -ffixed-form -Wall -', - \ join(split(ale_linters#fortran#gcc#GetCommand(1))) + AssertLinter 'gcc', 'gcc -S -x f95 -fsyntax-only -ffixed-form -Wall -' Execute(The fortran executable should be configurable): let g:ale_fortran_gcc_executable = 'gfortran' - AssertEqual 'gfortran', ale_linters#fortran#gcc#GetExecutable(1) - AssertEqual 'gfortran -S -x f95 -fsyntax-only -ffree-form -Wall -', - \ join(split(ale_linters#fortran#gcc#GetCommand(1))) + AssertLinter 'gfortran', + \ 'gfortran -S -x f95 -fsyntax-only -ffree-form -Wall -' diff --git a/test/command_callback/test_gitlint_command_callback.vader b/test/command_callback/test_gitlint_command_callback.vader index 6ff95ea9..7927b064 100644 --- a/test/command_callback/test_gitlint_command_callback.vader +++ b/test/command_callback/test_gitlint_command_callback.vader @@ -1,84 +1,43 @@ Before: - Save g:ale_gitcommit_gitlint_executable - Save g:ale_gitcommit_gitlint_options - Save g:ale_gitcommit_gitlint_use_global - - unlet! g:ale_gitcommit_gitlint_executable - unlet! g:ale_gitcommit_gitlint_options - unlet! g:ale_gitcommit_gitlint_use_global - - runtime ale_linters/gitcommit/gitlint.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('gitcommit', 'gitlint') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - let b:command_tail = ' lint' After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - unlet! b:bin_dir unlet! b:executable + call ale#assert#TearDownLinterTest() + Execute(The gitlint callbacks should return the correct default values): - AssertEqual - \ 'gitlint', - \ ale_linters#gitcommit#gitlint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('gitlint') . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' Execute(The gitlint executable should be configurable, and escaped properly): let g:ale_gitcommit_gitlint_executable = 'executable with spaces' - AssertEqual - \ 'executable with spaces', - \ ale_linters#gitcommit#gitlint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('executable with spaces') . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter 'executable with spaces', + \ ale#Escape('executable with spaces') . ' lint' Execute(The gitlint command callback should let you set options): let g:ale_gitcommit_gitlint_options = '--some-option' - AssertEqual - \ ale#Escape('gitlint') . ' --some-option' . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter 'gitlint', ale#Escape('gitlint') . ' --some-option lint' Execute(The gitlint callbacks shouldn't detect virtualenv directories where they don't exist): - silent execute 'file ' . fnameescape(g:dir . '/python_paths/no_virtualenv/subdir/foo/COMMIT_EDITMSG') + call ale#test#SetFilename('python_paths/no_virtualenv/subdir/foo/COMMIT_EDITMSG') - AssertEqual - \ 'gitlint', - \ ale_linters#gitcommit#gitlint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('gitlint') . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' Execute(The gitlint callbacks should detect virtualenv directories): - silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/COMMIT_EDITMSG') - + call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/COMMIT_EDITMSG') let b:executable = ale#path#Simplify( \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/gitlint' \) - AssertEqual - \ b:executable, - \ ale_linters#gitcommit#gitlint#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape(b:executable) . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) . ' lint' Execute(You should able able to use the global gitlint instead): - silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/COMMIT_EDITMSG') + call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/COMMIT_EDITMSG') let g:ale_gitcommit_gitlint_use_global = 1 - AssertEqual - \ 'gitlint', - \ ale_linters#gitcommit#gitlint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('gitlint') . b:command_tail, - \ ale_linters#gitcommit#gitlint#GetCommand(bufnr('')) + AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' diff --git a/test/command_callback/test_glslang_command_callback.vader b/test/command_callback/test_glslang_command_callback.vader index 1b1722a4..980406af 100644 --- a/test/command_callback/test_glslang_command_callback.vader +++ b/test/command_callback/test_glslang_command_callback.vader @@ -1,40 +1,19 @@ Before: - Save g:ale_glsl_glslang_executable - Save g:ale_glsl_glslang_options - - unlet! g:ale_glsl_glslang_executable - unlet! g:ale_glsl_glslang_options - - runtime ale_linters/glsl/glslang.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('glsl', 'glslang') After: - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() -Execute(Executable should default to glslangValidator): - AssertEqual - \ 'glslangValidator', - \ ale_linters#glsl#glslang#GetExecutable(bufnr('')) +Execute(The default command should be correct): + AssertLinter 'glslangValidator', ale#Escape('glslangValidator') . ' -C %t' -Execute(Executable should be configurable): - let g:ale_glsl_glslang_executable = 'foobar' - AssertEqual - \ 'foobar', - \ ale_linters#glsl#glslang#GetExecutable(bufnr('')) +Execute(The executable should be configurable): + let b:ale_glsl_glslang_executable = 'foobar' -Execute(Command should use executable): - AssertEqual - \ 'glslangValidator -C %t', - \ ale_linters#glsl#glslang#GetCommand(bufnr('')) - - let g:ale_glsl_glslang_executable = 'foobar' - AssertEqual - \ 'foobar -C %t', - \ ale_linters#glsl#glslang#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' -C %t' Execute(Options should work): let g:ale_glsl_glslang_options = '--test' - AssertEqual - \ 'glslangValidator --test -C %t', - \ ale_linters#glsl#glslang#GetCommand(bufnr('')) + + AssertLinter 'glslangValidator', + \ ale#Escape('glslangValidator') . ' --test -C %t' diff --git a/test/command_callback/test_glslls_command_callback.vader b/test/command_callback/test_glslls_command_callback.vader index e64c2352..133c2a2f 100644 --- a/test/command_callback/test_glslls_command_callback.vader +++ b/test/command_callback/test_glslls_command_callback.vader @@ -1,37 +1,19 @@ Before: - Save g:ale_glsl_glslls_executable - Save g:ale_glsl_glslls_logfile - - unlet! g:ale_glsl_glslls_executable - unlet! g:ale_glsl_glslls_logfile - - runtime ale_linters/glsl/glslls.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('glsl', 'glslls') After: - Restore - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() -Execute(Executable should default to 'glslls'): - AssertEqual - \ 'glslls', - \ ale_linters#glsl#glslls#GetExecutable(bufnr('')) +Execute(The default command should be correct): + AssertLinter 'glslls', ale#Escape('glslls') . ' --stdin' Execute(Executable should be configurable): - let g:ale_glsl_glslls_executable = 'foobar' - AssertEqual - \ 'foobar', - \ ale_linters#glsl#glslls#GetExecutable(bufnr('')) + let b:ale_glsl_glslls_executable = 'foobar' -Execute(Command should use executable): - let command1 = ale_linters#glsl#glslls#GetCommand(bufnr('')) - AssertEqual command1, ale#Escape('glslls') . ' --stdin' - - let g:ale_glsl_glslls_executable = 'foobar' - let command2 = ale_linters#glsl#glslls#GetCommand(bufnr('')) - AssertEqual command2, ale#Escape('foobar') . ' --stdin' + AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin' Execute(Setting logfile should work): - let g:ale_glsl_glslls_logfile = '/tmp/test.log' - let command = ale_linters#glsl#glslls#GetCommand(bufnr('')) - AssertEqual command, ale#Escape('glslls') . ' --verbose -l /tmp/test.log --stdin' + let b:ale_glsl_glslls_logfile = '/tmp/test.log' + + AssertLinter 'glslls', + \ ale#Escape('glslls') . ' --verbose -l /tmp/test.log --stdin' diff --git a/test/command_callback/test_gobuild_command_callback.vader b/test/command_callback/test_gobuild_command_callback.vader index 240f29c6..86113728 100644 --- a/test/command_callback/test_gobuild_command_callback.vader +++ b/test/command_callback/test_gobuild_command_callback.vader @@ -1,52 +1,36 @@ Before: - Save g:ale_go_gobuild_options - - unlet! g:ale_go_gobuild_options + call ale#assert#SetUpLinterTest('go', 'gobuild') let g:env_prefix = has('win32') \ ? 'set GOPATH=' . ale#Escape('/foo/bar') . ' && ' \ : 'GOPATH=' . ale#Escape('/foo/bar') . ' ' - - runtime ale_linters/go/gobuild.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') - call ale_linters#go#gobuild#ResetEnv() + WithChainResults ['/foo/bar', '/foo/baz'] + After: - Restore - unlet! g:env_prefix + call ale#assert#TearDownLinterTest() - call ale#linter#Reset() - call ale#test#RestoreDirectory() - -Execute(The default gobuild command should be correct): - AssertEqual - \ ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']), +Execute(The default commands should be correct): + AssertLinter 'go', [ + \ 'go env GOPATH GOROOT', \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . 'go test -c -o /dev/null ./' - -Execute(The command for getting GOPATH should be correct): - AssertEqual ale_linters#go#gobuild#GoEnv(bufnr('')), 'go env GOPATH GOROOT' - - call ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']) + \] " We shouldn't run `go env` many times after we've got it. - AssertEqual ale_linters#go#gobuild#GoEnv(bufnr('')), '' - -Execute(The GOPATH output should be used after it has been read once): - call ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']) - - AssertEqual - \ ale_linters#go#gobuild#GetCommand(bufnr(''), []), + AssertLinter 'go', [ + \ '', \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . 'go test -c -o /dev/null ./' + \] Execute(Extra options should be supported): let g:ale_go_gobuild_options = '--foo-bar' - AssertEqual - \ ale_linters#go#gobuild#GetCommand(bufnr(''), ['/foo/bar', '/foo/baz']), + AssertLinter 'go', [ + \ 'go env GOPATH GOROOT', \ g:env_prefix . 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . 'go test --foo-bar -c -o /dev/null ./' + \] diff --git a/test/command_callback/test_gometalinter_command_callback.vader b/test/command_callback/test_gometalinter_command_callback.vader index 93a541c8..d788c5bd 100644 --- a/test/command_callback/test_gometalinter_command_callback.vader +++ b/test/command_callback/test_gometalinter_command_callback.vader @@ -1,61 +1,38 @@ Before: - Save b:ale_go_gometalinter_executable - Save b:ale_go_gometalinter_options - Save b:ale_go_gometalinter_lint_package - - let b:ale_go_gometalinter_executable = 'gometalinter' - let b:ale_go_gometalinter_options = '' - let b:ale_go_gometalinter_lint_package = 0 - - runtime ale_linters/go/gometalinter.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('go', 'gometalinter') call ale#test#SetFilename('test.go') After: - Restore + call ale#assert#TearDownLinterTest() - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The gometalinter callback should return the right defaults): - AssertEqual - \ 'gometalinter', - \ ale_linters#go#gometalinter#GetExecutable(bufnr('')) - AssertEqual +Execute(The gometalinter defaults should be correct): + AssertLinter 'gometalinter', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('gometalinter') \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' .', - \ ale_linters#go#gometalinter#GetCommand(bufnr('')) + \ . ' .' Execute(The gometalinter callback should use a configured executable): let b:ale_go_gometalinter_executable = 'something else' - AssertEqual - \ 'something else', - \ ale_linters#go#gometalinter#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'something else', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('something else') \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' .', - \ ale_linters#go#gometalinter#GetCommand(bufnr('')) + \ . ' .' Execute(The gometalinter callback should use configured options): let b:ale_go_gometalinter_options = '--foobar' - AssertEqual + AssertLinter 'gometalinter', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('gometalinter') \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' --foobar' . ' .', - \ ale_linters#go#gometalinter#GetCommand(bufnr('')) + \ . ' --foobar' . ' .' Execute(The gometalinter `lint_package` option should use the correct command): let b:ale_go_gometalinter_lint_package = 1 - AssertEqual + AssertLinter 'gometalinter', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ale#Escape('gometalinter') . ' .', - \ ale_linters#go#gometalinter#GetCommand(bufnr('')) + \ . ale#Escape('gometalinter') . ' .' diff --git a/test/command_callback/test_gosimple_command_callback.vader b/test/command_callback/test_gosimple_command_callback.vader index a0b1f468..7b8c66ae 100644 --- a/test/command_callback/test_gosimple_command_callback.vader +++ b/test/command_callback/test_gosimple_command_callback.vader @@ -1,12 +1,10 @@ Before: - runtime ale_linters/go/gosimple.vim + call ale#assert#SetUpLinterTest('go', 'gosimple') call ale#test#SetFilename('../go_files/testfile2.go') After: - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default gosimple command should be correct): - AssertEqual 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ' gosimple .', - \ ale_linters#go#gosimple#GetCommand(bufnr('')) - + AssertLinter 'gosimple', + \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && gosimple .' diff --git a/test/command_callback/test_gotype_command_callback.vader b/test/command_callback/test_gotype_command_callback.vader index 4fba3344..da9ceaf3 100644 --- a/test/command_callback/test_gotype_command_callback.vader +++ b/test/command_callback/test_gotype_command_callback.vader @@ -1,15 +1,15 @@ Before: - runtime ale_linters/go/gotype.vim + call ale#assert#SetUpLinterTest('go', 'gotype') call ale#test#SetFilename('../go_files/testfile2.go') After: - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default gotype command should be correct): - AssertEqual 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ' gotype .', - \ ale_linters#go#gotype#GetCommand(bufnr('')) + AssertLinter 'gotype', + \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && gotype .' Execute(The gotype callback should ignore test files): call ale#test#SetFilename('bla_test.go') - AssertEqual 0, ale_linters#go#gotype#GetCommand(bufnr('')) + + AssertLinter 'gotype', '' diff --git a/test/command_callback/test_govet_command_callback.vader b/test/command_callback/test_govet_command_callback.vader index a9b29605..a73118ae 100644 --- a/test/command_callback/test_govet_command_callback.vader +++ b/test/command_callback/test_govet_command_callback.vader @@ -1,16 +1,8 @@ Before: - runtime ale_linters/go/govet.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('go', 'govet') After: - Restore - - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual - \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ' go vet .', - \ ale_linters#go#govet#GetCommand(bufnr('')) + AssertLinter 'go', 'cd ' . ale#Escape(expand('%:p:h')) . ' && go vet .' diff --git a/test/command_callback/test_haml_hamllint_command_callback.vader b/test/command_callback/test_haml_hamllint_command_callback.vader index 0d9b1e06..a59446ca 100644 --- a/test/command_callback/test_haml_hamllint_command_callback.vader +++ b/test/command_callback/test_haml_hamllint_command_callback.vader @@ -1,72 +1,37 @@ Before: - runtime ale_linters/haml/hamllint.vim + call ale#assert#SetUpLinterTest('haml', 'hamllint') let g:default_command = 'haml-lint %t' - call ale#test#SetDirectory('/testplugin/test/command_callback') After: - Restore - - unlet! g:default_command unlet! b:conf + unlet! b:conf_hamllint + unlet! b:conf_rubocop - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual g:default_command, ale_linters#haml#hamllint#GetCommand(bufnr('')) + AssertLinter 'haml-lint', 'haml-lint %t' Execute(The command should have the .rubocop.yml prepended as an env var if one exists): call ale#test#SetFilename('../hamllint-test-files/rubocop-yml/subdir/file.haml') let b:conf = ale#path#Simplify(g:dir . '/../hamllint-test-files/rubocop-yml/.rubocop.yml') - if has('win32') - " Windows uses 'set var=... && command' - AssertEqual - \ 'set HAML_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf) - \ . ' && ' . g:default_command, - \ ale_linters#haml#hamllint#GetCommand(bufnr('')) - else - " Unix uses 'var=... command' - AssertEqual - \ 'HAML_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf) - \ . ' ' . g:default_command, - \ ale_linters#haml#hamllint#GetCommand(bufnr('')) - endif + AssertLinter 'haml-lint', + \ ale#Env('HAML_LINT_RUBOCOP_CONF', b:conf) . 'haml-lint %t' Execute(The command should have the nearest .haml-lint.yml set as --config if it exists): call ale#test#SetFilename('../hamllint-test-files/haml-lint-yml/subdir/file.haml') let b:conf = ale#path#Simplify(g:dir . '/../hamllint-test-files/haml-lint-yml/.haml-lint.yml') - AssertEqual - \ 'haml-lint --config ' - \ . ale#Escape(b:conf) - \ . ' %t', - \ ale_linters#haml#hamllint#GetCommand(bufnr('')) + AssertLinter 'haml-lint', + \ 'haml-lint --config ' . ale#Escape(b:conf) . ' %t', Execute(The command should include a .rubocop.yml and a .haml-lint if both are found): call ale#test#SetFilename('../hamllint-test-files/haml-lint-and-rubocop/subdir/file.haml') let b:conf_hamllint = ale#path#Simplify(g:dir . '/../hamllint-test-files/haml-lint-and-rubocop/.haml-lint.yml') let b:conf_rubocop = ale#path#Simplify(g:dir . '/../hamllint-test-files/haml-lint-and-rubocop/.rubocop.yml') - if has('win32') - " Windows uses 'set var=... && command' - AssertEqual - \ 'set HAML_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf_rubocop) - \ . ' && haml-lint --config ' - \ . ale#Escape(b:conf_hamllint) - \ . ' %t', - \ ale_linters#haml#hamllint#GetCommand(bufnr('')) - else - " Unix uses 'var=... command' - AssertEqual - \ 'HAML_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf_rubocop) - \ . ' haml-lint --config ' - \ . ale#Escape(b:conf_hamllint) - \ . ' %t', - \ ale_linters#haml#hamllint#GetCommand(bufnr('')) - endif + AssertLinter 'haml-lint', + \ ale#Env('HAML_LINT_RUBOCOP_CONF', b:conf_rubocop) + \ . 'haml-lint --config ' . ale#Escape(b:conf_hamllint) . ' %t' diff --git a/test/command_callback/test_haskell_ghc_command_callbacks.vader b/test/command_callback/test_haskell_ghc_command_callbacks.vader index edaf2b98..2f33477d 100644 --- a/test/command_callback/test_haskell_ghc_command_callbacks.vader +++ b/test/command_callback/test_haskell_ghc_command_callbacks.vader @@ -1,23 +1,12 @@ Before: - Save g:ale_haskell_ghc_options - - unlet! g:ale_haskell_ghc_options - unlet! b:ale_haskell_ghc_options - - runtime ale_linters/haskell/ghc.vim + call ale#assert#SetUpLinterTest('haskell', 'ghc') After: - Restore - unlet! b:ale_haskell_ghc_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The options should be used in the command): - AssertEqual - \ 'ghc -fno-code -v0 %t', - \ ale_linters#haskell#ghc#GetCommand(bufnr('')) + AssertLinter 'ghc', 'ghc -fno-code -v0 %t' let b:ale_haskell_ghc_options = 'foobar' - AssertEqual - \ 'ghc foobar %t', - \ ale_linters#haskell#ghc#GetCommand(bufnr('')) + AssertLinter 'ghc', 'ghc foobar %t' diff --git a/test/command_callback/test_haskell_hdevtools_command_callbacks.vader b/test/command_callback/test_haskell_hdevtools_command_callbacks.vader index c5320c5c..0ef2f0e3 100644 --- a/test/command_callback/test_haskell_hdevtools_command_callbacks.vader +++ b/test/command_callback/test_haskell_hdevtools_command_callbacks.vader @@ -1,37 +1,16 @@ Before: - Save g:ale_haskell_hdevtools_executable - Save g:ale_haskell_hdevtools_options - - unlet! g:ale_haskell_hdevtools_executable - unlet! b:ale_haskell_hdevtools_executable - unlet! g:ale_haskell_hdevtools_options - unlet! b:ale_haskell_hdevtools_options - - runtime ale_linters/haskell/hdevtools.vim + call ale#assert#SetUpLinterTest('haskell', 'hdevtools') let b:command_tail = ' check -g -Wall -p %s %t' After: - Restore unlet! b:command_tail - unlet! b:ale_haskell_hdevtools_executable - unlet! b:ale_haskell_hdevtools_options - call ale#linter#Reset() + + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'hdevtools', ale_linters#haskell#hdevtools#GetExecutable(bufnr('')) + AssertLinter 'hdevtools', ale#Escape('hdevtools') . b:command_tail let b:ale_haskell_hdevtools_executable = 'foobar' - AssertEqual 'foobar', ale_linters#haskell#hdevtools#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('hdevtools') . b:command_tail, - \ ale_linters#haskell#hdevtools#GetCommand(bufnr('')) - - let b:ale_haskell_hdevtools_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . b:command_tail, - \ ale_linters#haskell#hdevtools#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/test/command_callback/test_htmlhint_command_callback.vader b/test/command_callback/test_htmlhint_command_callback.vader index 5bb21a6b..d3f209f8 100644 --- a/test/command_callback/test_htmlhint_command_callback.vader +++ b/test/command_callback/test_htmlhint_command_callback.vader @@ -1,71 +1,51 @@ Before: - Save g:ale_html_htmlhint_options - Save g:ale_html_htmlhint_executable - Save g:ale_html_htmlhint_use_global - - unlet! g:ale_html_htmlhint_options - unlet! g:ale_html_htmlhint_executable - unlet! g:ale_html_htmlhint_use_global - - runtime ale_linters/html/htmlhint.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('html', 'htmlhint') call ale#test#SetFilename('htmlhint_paths/test.html') let g:node_executable = ale#path#Simplify( - \ g:dir - \ . '/htmlhint_paths/node_modules/.bin/htmlhint' + \ g:dir . '/htmlhint_paths/node_modules/.bin/htmlhint' \) let g:config_path = ale#path#Simplify( - \ g:dir - \ . '/htmlhint_paths/with_config/.htmlhintrc' + \ g:dir . '/htmlhint_paths/with_config/.htmlhintrc' \) After: - Restore - unlet! g:node_executable unlet! g:config_path - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual - \ ale#Escape(g:node_executable) . ' --format=unix %t', - \ ale_linters#html#htmlhint#GetCommand(bufnr('')) + AssertLinter g:node_executable, + \ ale#Escape(g:node_executable) . ' --format=unix %t' Execute(The global executable should be uesd if the option is set): let g:ale_html_htmlhint_executable = 'foo' let g:ale_html_htmlhint_use_global = 1 - AssertEqual - \ ale#Escape('foo') . ' --format=unix %t', - \ ale_linters#html#htmlhint#GetCommand(bufnr('')) + AssertLinter 'foo', ale#Escape('foo') . ' --format=unix %t', " This is so old configurations which might include this still work. Execute(--format=unix should be removed from the options if added): let g:ale_html_htmlhint_options = '--format=unix' - AssertEqual - \ ale#Escape(g:node_executable) . ' --format=unix %t', - \ ale_linters#html#htmlhint#GetCommand(bufnr('')) + AssertLinter g:node_executable, + \ ale#Escape(g:node_executable) . ' --format=unix %t' Execute(The configuration file should be automatically detected): call ale#test#SetFilename('htmlhint_paths/with_config/test.html') - AssertEqual + AssertLinter g:node_executable, \ ale#Escape(g:node_executable) \ . ' --config ' . ale#Escape(g:config_path) - \ . ' --format=unix %t', - \ ale_linters#html#htmlhint#GetCommand(bufnr('')) + \ . ' --format=unix %t' " This is so old configurations which might include the config will work. Execute(The configuration file should be configurable through the options variable): call ale#test#SetFilename('htmlhint_paths/with_config/test.html') let g:ale_html_htmlhint_options = '--config=/foo/bar/.htmlhintrc' - AssertEqual + AssertLinter g:node_executable, \ ale#Escape(g:node_executable) \ . ' --config=/foo/bar/.htmlhintrc' - \ . ' --format=unix %t', - \ ale_linters#html#htmlhint#GetCommand(bufnr('')) + \ . ' --format=unix %t' diff --git a/test/command_callback/test_idris_command_callbacks.vader b/test/command_callback/test_idris_command_callbacks.vader index 03a69f39..ce7cd270 100644 --- a/test/command_callback/test_idris_command_callbacks.vader +++ b/test/command_callback/test_idris_command_callbacks.vader @@ -1,42 +1,21 @@ Before: - Save g:ale_idris_idris_executable - Save g:ale_idris_idris_options - - unlet! g:ale_idris_idris_executable - unlet! b:ale_idris_idris_executable - unlet! g:ale_idris_idris_options - unlet! b:ale_idris_idris_options - - runtime ale_linters/idris/idris.vim + call ale#assert#SetUpLinterTest('idris', 'idris') After: - Restore unlet! b:command_tail - unlet! b:ale_idris_idris_executable - unlet! b:ale_idris_idris_options - call ale#linter#Reset() -Execute(The executable should be configurable): - AssertEqual 'idris', ale_linters#idris#idris#GetExecutable(bufnr('')) - - let b:ale_idris_idris_executable = 'foobar' - - AssertEqual 'foobar', ale_linters#idris#idris#GetExecutable(bufnr('')) + call ale#assert#TearDownLinterTest() Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('idris') . ' --total --warnpartial --warnreach --warnipkg --check %s', - \ ale_linters#idris#idris#GetCommand(bufnr('')) + AssertLinter 'idris', + \ ale#Escape('idris') . ' --total --warnpartial --warnreach --warnipkg --check %s' let b:ale_idris_idris_executable = 'foobar' - AssertEqual - \ ale#Escape('foobar') . ' --total --warnpartial --warnreach --warnipkg --check %s', - \ ale_linters#idris#idris#GetCommand(bufnr('')) + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' --total --warnpartial --warnreach --warnipkg --check %s' Execute(The options should be configurable): let b:ale_idris_idris_options = '--something' - AssertEqual - \ ale#Escape('idris') . ' --something --check %s', - \ ale_linters#idris#idris#GetCommand(bufnr('')) + AssertLinter 'idris', ale#Escape('idris') . ' --something --check %s' diff --git a/test/command_callback/test_iverilog_command_callback.vader b/test/command_callback/test_iverilog_command_callback.vader index 2c633178..d7a29f05 100644 --- a/test/command_callback/test_iverilog_command_callback.vader +++ b/test/command_callback/test_iverilog_command_callback.vader @@ -1,24 +1,14 @@ Before: - Save g:ale_verilog_iverilog_options - - unlet! g:ale_verilog_iverilog_options - - runtime ale_linters/verilog/iverilog.vim + call ale#assert#SetUpLinterTest('verilog', 'iverilog') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default iverilog command should be correct): - AssertEqual - \ 'iverilog -t null -Wall %t', - \ ale_linters#verilog#iverilog#GetCommand(bufnr('')) + AssertLinter 'iverilog', 'iverilog -t null -Wall %t' Execute(iverilog options should be configurable): " Additional args for the linter let g:ale_verilog_iverilog_options = '-y.' - AssertEqual - \ 'iverilog -t null -Wall -y. %t', - \ ale_linters#verilog#iverilog#GetCommand(bufnr('')) + AssertLinter 'iverilog', 'iverilog -t null -Wall -y. %t' diff --git a/test/command_callback/test_javac_command_callback.vader b/test/command_callback/test_javac_command_callback.vader index b0d0e7c7..07a0794a 100644 --- a/test/command_callback/test_javac_command_callback.vader +++ b/test/command_callback/test_javac_command_callback.vader @@ -1,15 +1,10 @@ Before: - call ale#test#SetDirectory('/testplugin/test/command_callback') - - Save g:ale_java_javac_executable - Save g:ale_java_javac_options - Save g:ale_java_javac_classpath - - unlet! g:ale_java_javac_executable - unlet! g:ale_java_javac_options - unlet! g:ale_java_javac_classpath + call ale#assert#SetUpLinterTest('java', 'javac') + call ale#test#SetFilename('dummy.java') let g:cp_sep = has('unix') ? ':' : ';' + let g:prefix = 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' + \ . ale#Escape('javac') . ' -Xlint' function! GetCommand(previous_output) abort let l:command = ale_linters#java#javac#GetCommand( @@ -25,69 +20,58 @@ Before: return join(l:split_command) endfunction - runtime ale_linters/java/javac.vim - call ale#engine#InitBufferInfo(bufnr('')) - - call ale#test#SetFilename('dummy.java') - - let g:prefix = 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ale#Escape('javac') . ' -Xlint' - After: - call ale#test#RestoreDirectory() - - Restore - unlet! g:cp_sep unlet! g:prefix delfunction GetCommand - call ale#linter#Reset() - " We need to clean up the buffer to remove the temporary directories created - " for the command. - call ale#engine#Cleanup(bufnr('')) + call ale#assert#TearDownLinterTest() Execute(The javac callback should return the correct default value): - AssertEqual g:prefix . ' -d TEMP %t', GetCommand([]) + AssertLinter 'javac', g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should use g:ale_java_javac_classpath correctly): let g:ale_java_javac_classpath = 'foo.jar' - AssertEqual + AssertLinter 'javac', \ g:prefix \ . ' -cp ' . ale#Escape('foo.jar') - \ . ' -d TEMP %t', - \ GetCommand([]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The executable should be configurable): let g:ale_java_javac_executable = 'foobar' - AssertEqual 'foobar', ale_linters#java#javac#GetExecutable(bufnr('')) - - AssertEqual + AssertLinter 'foobar', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('foobar') . ' -Xlint' - \ . ' -d TEMP %t', - \ GetCommand([]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should include discovered classpaths): - AssertEqual + WithChainResults [ + \ '[DEBUG] Ignore this.', + \ '[INFO] Something we should ignore.', + \ '/foo/bar.jar', + \ '/xyz/abc.jar', + \] + + AssertLinter 'javac', \ g:prefix \ . ' -cp ' \ . ale#Escape(join(['/foo/bar.jar', '/xyz/abc.jar'], g:cp_sep)) - \ . ' -d TEMP %t', - \ GetCommand([ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ ]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should combine discovered classpaths and manual ones): let g:ale_java_javac_classpath = 'configured.jar' - AssertEqual + WithChainResults [ + \ '[DEBUG] Ignore this.', + \ '[INFO] Something we should ignore.', + \ '/foo/bar.jar', + \ '/xyz/abc.jar', + \] + + AssertLinter 'javac', \ g:prefix \ . ' -cp ' \ . ale#Escape(join( @@ -98,17 +82,11 @@ Execute(The javac callback should combine discovered classpaths and manual ones) \ ], \ g:cp_sep \ )) - \ . ' -d TEMP %t', - \ GetCommand([ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ ]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' let g:ale_java_javac_classpath = 'configured.jar' . g:cp_sep . 'configured2.jar' - AssertEqual + AssertLinter 'javac', \ g:prefix \ . ' -cp ' \ . ale#Escape(join( @@ -120,55 +98,46 @@ Execute(The javac callback should combine discovered classpaths and manual ones) \ ], \ g:cp_sep \ )) - \ . ' -d TEMP %t', - \ GetCommand([ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ ]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should detect source directories): call ale#engine#Cleanup(bufnr('')) noautocmd e! java_paths/src/main/java/com/something/dummy call ale#engine#InitBufferInfo(bufnr('')) - AssertEqual + AssertLinter 'javac', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' . ale#Escape('javac') . ' -Xlint' \ . ' -sourcepath ' . ale#Escape( \ ale#path#Simplify(g:dir . '/java_paths/src/main/java/') \ ) - \ . ' -d TEMP %t', - \ GetCommand([]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should combine detected source directories and classpaths): call ale#engine#Cleanup(bufnr('')) call ale#test#SetFilename('java_paths/src/main/java/com/something/dummy.java') call ale#engine#InitBufferInfo(bufnr('')) - AssertEqual + WithChainResults [ + \ '[DEBUG] Ignore this.', + \ '[INFO] Something we should ignore.', + \ '/foo/bar.jar', + \ '/xyz/abc.jar', + \] + AssertLinter 'javac', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' . ale#Escape('javac') . ' -Xlint' \ . ' -cp ' . ale#Escape(join(['/foo/bar.jar', '/xyz/abc.jar'], g:cp_sep)) \ . ' -sourcepath ' . ale#Escape( \ ale#path#Simplify(g:dir . '/java_paths/src/main/java/') \ ) - \ . ' -d TEMP %t', - \ GetCommand([ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ ]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should use g:ale_java_javac_options correctly): let g:ale_java_javac_options = '--anything --else' let b:command = ale_linters#java#javac#GetCommand(bufnr(''), []) - AssertEqual - \ g:prefix - \ . ' -d TEMP --anything --else %t', - \ GetCommand([]) + AssertLinter 'javac', + \ g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' --anything --else %t' Execute(The javac callback should include src/test/java for test paths): call ale#engine#Cleanup(bufnr('')) @@ -177,25 +146,23 @@ Execute(The javac callback should include src/test/java for test paths): noautocmd e! java_paths/src/test/java/com/something/dummy call ale#engine#InitBufferInfo(bufnr('')) - AssertEqual + AssertLinter 'javac', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' . ale#Escape('javac') . ' -Xlint' \ . ' -sourcepath ' . ale#Escape(join([ \ ale#path#Simplify(g:dir . '/java_paths/src/main/java/'), \ ale#path#Simplify(g:dir . '/java_paths/src/test/java/'), \ ], g:cp_sep)) - \ . ' -d TEMP %t', - \ GetCommand([]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should include src/main/jaxb when available): call ale#engine#Cleanup(bufnr('')) noautocmd e! java_paths_with_jaxb/src/main/java/com/something/dummy call ale#engine#InitBufferInfo(bufnr('')) - AssertEqual + AssertLinter 'javac', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' . ale#Escape('javac') . ' -Xlint' \ . ' -sourcepath ' . ale#Escape(join([ \ ale#path#Simplify(g:dir . '/java_paths_with_jaxb/src/main/java/'), \ ale#path#Simplify(g:dir . '/java_paths_with_jaxb/src/main/jaxb/'), \ ], g:cp_sep)) - \ . ' -d TEMP %t', - \ GetCommand([]) + \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' diff --git a/test/command_callback/test_jscs_command_callback.vader b/test/command_callback/test_jscs_command_callback.vader index f118c039..7cdf5467 100644 --- a/test/command_callback/test_jscs_command_callback.vader +++ b/test/command_callback/test_jscs_command_callback.vader @@ -1,25 +1,15 @@ Before: - runtime ale_linters/javascript/jscs.vim + call ale#assert#SetUpLinterTest('javascript', 'jscs') After: - call ale#linter#Reset() - let g:ale_javascript_jscs_executable = 'jscs' + call ale#assert#TearDownLinterTest() Execute(Should return the correct default values): - AssertEqual - \ 'jscs', - \ ale_linters#javascript#jscs#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('jscs') . ' --reporter inline --no-colors -', - \ ale_linters#javascript#jscs#GetCommand(bufnr('')) - + AssertLinter 'jscs', + \ ale#Escape('jscs') . ' --reporter inline --no-colors -' Execute(Should allow using a custom executable): let g:ale_javascript_jscs_executable = 'foobar' - AssertEqual - \ 'foobar', - \ ale_linters#javascript#jscs#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foobar') . ' --reporter inline --no-colors -', - \ ale_linters#javascript#jscs#GetCommand(bufnr('')) + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' --reporter inline --no-colors -' diff --git a/test/command_callback/test_less_stylelint_command_callback.vader b/test/command_callback/test_less_stylelint_command_callback.vader index a5912ecf..8d23deb6 100644 --- a/test/command_callback/test_less_stylelint_command_callback.vader +++ b/test/command_callback/test_less_stylelint_command_callback.vader @@ -1,31 +1,10 @@ Before: - Save g:ale_less_stylelint_executable - Save g:ale_less_stylelint_use_global - Save g:ale_less_stylelint_options - + call ale#assert#SetUpLinterTest('less', 'stylelint') unlet! b:executable - unlet! g:ale_less_stylelint_executable - unlet! g:ale_less_stylelint_use_global - unlet! g:ale_less_stylelint_options - - call ale#test#SetDirectory('/testplugin/test/command_callback') - call ale#test#SetFilename('testfile.less') - - runtime ale_linters/less/stylelint.vim - After: - Restore - unlet! b:executable - unlet! b:ale_less_stylelint_executable - unlet! b:ale_less_stylelint_use_global - unlet! b:ale_less_stylelint_options - - call ale#test#SetFilename('test.txt') - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(node_modules directories should be discovered): call ale#test#SetFilename('stylelint_paths/nested/testfile.less') @@ -35,10 +14,7 @@ Execute(node_modules directories should be discovered): \ . '/stylelint_paths/node_modules/.bin/stylelint' \) - AssertEqual b:executable, ale_linters#less#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape(b:executable) . ' --stdin-filename %s', - \ ale_linters#less#stylelint#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin-filename %s' Execute(The global override should work): let b:ale_less_stylelint_executable = 'foobar' @@ -46,15 +22,10 @@ Execute(The global override should work): call ale#test#SetFilename('stylelint_paths/nested/testfile.less') - AssertEqual 'foobar', ale_linters#less#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foobar') . ' --stdin-filename %s', - \ ale_linters#less#stylelint#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin-filename %s' Execute(Extra options should be configurable): let b:ale_less_stylelint_options = '--whatever' - AssertEqual 'stylelint', ale_linters#less#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('stylelint') . ' --whatever --stdin-filename %s', - \ ale_linters#less#stylelint#GetCommand(bufnr('')) + AssertLinter 'stylelint', + \ ale#Escape('stylelint') . ' --whatever --stdin-filename %s' diff --git a/test/command_callback/test_lessc_command_callback.vader b/test/command_callback/test_lessc_command_callback.vader index ec2899d1..79f57d06 100644 --- a/test/command_callback/test_lessc_command_callback.vader +++ b/test/command_callback/test_lessc_command_callback.vader @@ -1,31 +1,13 @@ Before: - Save g:ale_less_lessc_executable - Save g:ale_less_lessc_use_global - Save g:ale_less_lessc_options - - unlet! b:executable - - unlet! g:ale_less_lessc_executable - unlet! g:ale_less_lessc_use_global - unlet! g:ale_less_lessc_options - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('less', 'lessc') call ale#test#SetFilename('testfile.less') - runtime ale_linters/less/lessc.vim + unlet! b:executable After: - Restore - unlet! b:executable - unlet! b:ale_less_lessc_executable - unlet! b:ale_less_lessc_use_global - unlet! b:ale_less_lessc_options - call ale#test#SetFilename('test.txt') - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(node_modules directories should be discovered): call ale#test#SetFilename('lessc_paths/nested/testfile.less') @@ -35,17 +17,11 @@ Execute(node_modules directories should be discovered): \ . '/lessc_paths/node_modules/.bin/lessc' \) - AssertEqual - \ b:executable, - \ ale_linters#less#lessc#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape(b:executable) - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir . '/lessc_paths/nested')) - \ . ' -', - \ ale_linters#less#lessc#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) + \ . ' --no-color --lint' + \ . ' --include-path=' + \ . ale#Escape(ale#path#Simplify(g:dir . '/lessc_paths/nested')) + \ . ' -' Execute(The global override should work): let b:ale_less_lessc_executable = 'foobar' @@ -53,30 +29,18 @@ Execute(The global override should work): call ale#test#SetFilename('lessc_paths/nested/testfile.less') - AssertEqual - \ 'foobar', - \ ale_linters#less#lessc#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('foobar') - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir . '/lessc_paths/nested')) - \ . ' -', - \ ale_linters#less#lessc#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') + \ . ' --no-color --lint' + \ . ' --include-path=' + \ . ale#Escape(ale#path#Simplify(g:dir . '/lessc_paths/nested')) + \ . ' -' Execute(Extra options should be configurable): let b:ale_less_lessc_options = '--whatever' - AssertEqual - \ 'lessc', - \ ale_linters#less#lessc#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('lessc') - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir)) - \ . ' --whatever' - \ . ' -', - \ ale_linters#less#lessc#GetCommand(bufnr('')) + AssertLinter 'lessc', ale#Escape('lessc') + \ . ' --no-color --lint' + \ . ' --include-path=' + \ . ale#Escape(ale#path#Simplify(g:dir)) + \ . ' --whatever' + \ . ' -' diff --git a/test/command_callback/test_lintr_command_callback.vader b/test/command_callback/test_lintr_command_callback.vader index 2f7dfb1d..8a0e6c1c 100644 --- a/test/command_callback/test_lintr_command_callback.vader +++ b/test/command_callback/test_lintr_command_callback.vader @@ -1,48 +1,36 @@ Before: - Save g:ale_r_lintr_options - - unlet! g:ale_r_lintr_options - unlet! b:ale_r_lintr_options - - runtime ale_linters/r/lintr.vim + call ale#assert#SetUpLinterTest('r', 'lintr') After: - Restore - - unlet! b:ale_r_lintr_options - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default lintr command should be correct): - AssertEqual + AssertLinter 'Rscript', \ 'cd ' . ale#Escape(getcwd()) . ' && ' \ . 'Rscript --vanilla -e ' \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint(cache = FALSE, commandArgs(TRUE), ' - \ . 'with_defaults())') - \ . ' %t', - \ ale_linters#r#lintr#GetCommand(bufnr('')) + \ . 'lint(cache = FALSE, commandArgs(TRUE), ' + \ . 'with_defaults())') + \ . ' %t' Execute(The lintr options should be configurable): let b:ale_r_lintr_options = 'with_defaults(object_usage_linter = NULL)' - AssertEqual + AssertLinter 'Rscript', \ 'cd ' . ale#Escape(getcwd()) . ' && ' \ . 'Rscript --vanilla -e ' \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint(cache = FALSE, commandArgs(TRUE), ' - \ . 'with_defaults(object_usage_linter = NULL))') - \ . ' %t', - \ ale_linters#r#lintr#GetCommand(bufnr('')) + \ . 'lint(cache = FALSE, commandArgs(TRUE), ' + \ . 'with_defaults(object_usage_linter = NULL))') + \ . ' %t' Execute(If the lint_package flag is set, lintr::lint_package should be called): let b:ale_r_lintr_lint_package = 1 - AssertEqual + AssertLinter 'Rscript', \ 'cd ' . ale#Escape(getcwd()) . ' && ' \ . 'Rscript --vanilla -e ' \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint_package(cache = FALSE, ' - \ . 'linters = with_defaults())') - \ . ' %t', - \ ale_linters#r#lintr#GetCommand(bufnr('')) + \ . 'lint_package(cache = FALSE, ' + \ . 'linters = with_defaults())') + \ . ' %t' diff --git a/test/command_callback/test_llc_command_callback.vader b/test/command_callback/test_llc_command_callback.vader index 296b277a..a0caaa48 100644 --- a/test/command_callback/test_llc_command_callback.vader +++ b/test/command_callback/test_llc_command_callback.vader @@ -1,10 +1,5 @@ Before: - Save g:ale_llvm_llc_executable - - unlet! g:ale_llvm_llc_executable - unlet! b:ale_llvm_llc_executable - - runtime ale_linters/llvm/llc.vim + call ale#assert#SetUpLinterTest('llvm', 'llc') function! AssertHasPrefix(str, prefix) abort let msg = printf("'%s' is expected to be prefixed with '%s'", a:str, a:prefix) @@ -12,28 +7,15 @@ Before: endfunction After: - unlet! g:ale_llvm_llc_executable - unlet! b:ale_llvm_llc_executable delfunction AssertHasPrefix - Restore -Execute(llc command is customizable): - let cmd = ale_linters#llvm#llc#GetCommand(bufnr('')) - call AssertHasPrefix(cmd, ale#Escape('llc')) + call ale#assert#TearDownLinterTest() + +Execute(The llc command should be customizable): + AssertLinter 'llc', + \ ale#Escape('llc') . ' -filetype=null -o=' . g:ale#util#nul_file let g:ale_llvm_llc_executable = 'llc-5.0' - let cmd = ale_linters#llvm#llc#GetCommand(bufnr('')) - call AssertHasPrefix(cmd, ale#Escape('llc-5.0')) - let b:ale_llvm_llc_executable = 'llc-4.0' - let cmd = ale_linters#llvm#llc#GetCommand(bufnr('')) - call AssertHasPrefix(cmd, ale#Escape('llc-4.0')) - -Execute(GetCommand() escapes the returned path): - let b:ale_llvm_llc_executable = '/path/space contained/llc' - let cmd = ale_linters#llvm#llc#GetCommand(bufnr('')) - call AssertHasPrefix(cmd, ale#Escape('/path/space contained/llc')) - -Execute(GetExecutable() does not escape the returned path): - let b:ale_llvm_llc_executable = '/path/space contained/llc' - AssertEqual ale_linters#llvm#llc#GetExecutable(bufnr('')), '/path/space contained/llc' + AssertLinter 'llc-5.0', + \ ale#Escape('llc-5.0') . ' -filetype=null -o=' . g:ale#util#nul_file diff --git a/test/command_callback/test_luac_command_callback.vader b/test/command_callback/test_luac_command_callback.vader index f9eb4d3f..8a2345ec 100644 --- a/test/command_callback/test_luac_command_callback.vader +++ b/test/command_callback/test_luac_command_callback.vader @@ -1,16 +1,13 @@ Before: - runtime ale_linters/lua/luac.vim + call ale#assert#SetUpLinterTest('lua', 'luac') After: - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual ale#Escape('luac') . ' -p -', - \ join(split(ale_linters#lua#luac#GetCommand(1))) + AssertLinter 'luac', ale#Escape('luac') . ' -p - ' Execute(The luac executable should be configurable): let g:ale_lua_luac_executable = 'luac.sh' - AssertEqual 'luac.sh', ale_linters#lua#luac#GetExecutable(1) - AssertEqual ale#Escape('luac.sh') . ' -p -', - \ join(split(ale_linters#lua#luac#GetCommand(1))) + AssertLinter 'luac.sh', ale#Escape('luac.sh') . ' -p - ' diff --git a/test/command_callback/test_luacheck_command_callback.vader b/test/command_callback/test_luacheck_command_callback.vader index 6f7f3a00..58d0cdc0 100644 --- a/test/command_callback/test_luacheck_command_callback.vader +++ b/test/command_callback/test_luacheck_command_callback.vader @@ -1,24 +1,23 @@ Before: - runtime ale_linters/lua/luacheck.vim + call ale#assert#SetUpLinterTest('lua', 'luacheck') After: - call ale#linter#Reset() - let g:ale_lua_luacheck_options = '' - let g:ale_lua_luacheck_executable = 'luacheck' + call ale#assert#TearDownLinterTest() Execute(The lua luacheck command callback should return the correct default string): - AssertEqual ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -', - \ join(split(ale_linters#lua#luacheck#GetCommand(1))) + AssertLinter 'luacheck', + \ ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -' Execute(The lua luacheck command callback should let you set options): let g:ale_lua_luacheck_options = '--config filename' - AssertEqual ale#Escape('luacheck') . ' --config filename --formatter plain --codes --filename %s -', - \ join(split(ale_linters#lua#luacheck#GetCommand(1))) + AssertLinter 'luacheck', + \ ale#Escape('luacheck') + \ . ' --config filename' + \ . ' --formatter plain --codes --filename %s -' Execute(The luacheck executable should be configurable): let g:ale_lua_luacheck_executable = 'luacheck.sh' - AssertEqual 'luacheck.sh', ale_linters#lua#luacheck#GetExecutable(1) - AssertEqual ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -', - \ join(split(ale_linters#lua#luacheck#GetCommand(1))) + AssertLinter 'luacheck.sh', + \ ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -' diff --git a/test/command_callback/test_markdown_mdl_command_callback.vader b/test/command_callback/test_markdown_mdl_command_callback.vader index 2fb9a206..e029bf9b 100644 --- a/test/command_callback/test_markdown_mdl_command_callback.vader +++ b/test/command_callback/test_markdown_mdl_command_callback.vader @@ -1,35 +1,19 @@ Before: - Save g:ale_markdown_mdl_executable - Save g:ale_markdown_mdl_options - - unlet! g:ale_markdown_mdl_executable - unlet! g:ale_markdown_mdl_options - - runtime ale_linters/markdown/mdl.vim + call ale#assert#SetUpLinterTest('markdown', 'mdl') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual ale_linters#markdown#mdl#GetExecutable(bufnr('')), 'mdl' - AssertEqual - \ ale_linters#markdown#mdl#GetCommand(bufnr('')), - \ ale#Escape('mdl') + AssertLinter 'mdl', ale#Escape('mdl') Execute(The executable and options should be configurable): let g:ale_markdown_mdl_executable = 'foo bar' let g:ale_markdown_mdl_options = '--wat' - AssertEqual ale_linters#markdown#mdl#GetExecutable(bufnr('')), 'foo bar' - AssertEqual - \ ale_linters#markdown#mdl#GetCommand(bufnr('')), - \ ale#Escape('foo bar') . ' --wat' + AssertLinter 'foo bar', ale#Escape('foo bar') . ' --wat' Execute(Setting bundle appends 'exec mdl'): let g:ale_markdown_mdl_executable = 'path to/bundle' - AssertEqual - \ ale#Escape('path to/bundle') . ' exec mdl', - \ ale_linters#markdown#mdl#GetCommand(bufnr('')) + AssertLinter 'path to/bundle', ale#Escape('path to/bundle') . ' exec mdl' diff --git a/test/command_callback/test_mercury_mmc_command_callback.vader b/test/command_callback/test_mercury_mmc_command_callback.vader index 7ebf49c3..2948e799 100644 --- a/test/command_callback/test_mercury_mmc_command_callback.vader +++ b/test/command_callback/test_mercury_mmc_command_callback.vader @@ -1,42 +1,25 @@ Before: - Save g:ale_mercury_mmc_executable - Save g:ale_mercury_mmc_options - - unlet! g:ale_mercury_mmc_executable - unlet! b:ale_mercury_mmc_executable - unlet! g:ale_mercury_mmc_options - unlet! b:ale_mercury_mmc_options - - runtime ale_linters/mercury/mmc.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('mercury', 'mmc') + call ale#test#SetFilename('dummy') After: - unlet! b:ale_mercury_mmc_executable - unlet! b:ale_mercury_mmc_options - - Restore - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual + AssertLinter 'mmc', \ ale#path#BufferCdString(bufnr('')) - \ . 'mmc --errorcheck-only --make --output-compile-error-lines 100 dummy', - \ - \ ale_linters#mercury#mmc#GetCommand(bufnr('')) + \ . 'mmc --errorcheck-only --make --output-compile-error-lines 100 dummy' Execute(The executable should be configurable): let b:ale_mercury_mmc_executable = 'foo' - AssertEqual + + AssertLinter 'foo', \ ale#path#BufferCdString(bufnr('')) - \ . 'foo --errorcheck-only --make --output-compile-error-lines 100 dummy', - \ - \ ale_linters#mercury#mmc#GetCommand(bufnr('')) + \ . 'foo --errorcheck-only --make --output-compile-error-lines 100 dummy' Execute(The options should be configurable): let b:ale_mercury_mmc_options = '--bar' - AssertEqual + + AssertLinter 'mmc', \ ale#path#BufferCdString(bufnr('')) - \ . 'mmc --errorcheck-only --bar dummy', - \ - \ ale_linters#mercury#mmc#GetCommand(bufnr('')) + \ . 'mmc --errorcheck-only --bar dummy' diff --git a/test/command_callback/test_mypy_command_callback.vader b/test/command_callback/test_mypy_command_callback.vader index 0fb4cc54..988dfb1b 100644 --- a/test/command_callback/test_mypy_command_callback.vader +++ b/test/command_callback/test_mypy_command_callback.vader @@ -1,106 +1,71 @@ Before: - Save g:ale_python_mypy_executable - Save g:ale_python_mypy_options - Save g:ale_python_mypy_use_global - - unlet! g:ale_python_mypy_executable - unlet! g:ale_python_mypy_options - unlet! g:ale_python_mypy_use_global + call ale#assert#SetUpLinterTest('python', 'mypy') + call ale#test#SetFilename('test.py') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - runtime ale_linters/python/mypy.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') - call ale#test#SetFilename('test.py') - After: - Restore - unlet! b:bin_dir unlet! b:executable - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The mypy callbacks should return the correct default values): - AssertEqual - \ 'mypy', - \ ale_linters#python#mypy#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'mypy', \ 'cd ' . ale#Escape(g:dir) . ' && ' . ale#Escape('mypy') \ . ' --show-column-numbers ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(The mypy executable should be configurable, and escaped properly): let g:ale_python_mypy_executable = 'executable with spaces' - AssertEqual - \ 'executable with spaces', - \ ale_linters#python#mypy#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'executable with spaces', \ 'cd ' . ale#Escape(g:dir) . ' && ' . ale#Escape('executable with spaces') \ . ' --show-column-numbers ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(The mypy command callback should let you set options): let g:ale_python_mypy_options = '--some-option' - AssertEqual + AssertLinter 'mypy', \ 'cd ' . ale#Escape(g:dir) . ' && ' . ale#Escape('mypy') \ . ' --show-column-numbers --some-option ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(The mypy command should switch directories to the detected project root): silent execute 'file ' . fnameescape(g:dir . '/python_paths/no_virtualenv/subdir/foo/bar.py') - AssertEqual - \ 'mypy', - \ ale_linters#python#mypy#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'mypy', \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/python_paths/no_virtualenv/subdir')) \ . ' && ' . ale#Escape('mypy') \ . ' --show-column-numbers ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(The mypy callbacks should detect virtualenv directories and switch to the project root): silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') let b:executable = ale#path#Simplify(g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/mypy') - AssertEqual - \ b:executable, - \ ale_linters#python#mypy#GetExecutable(bufnr('')) - AssertEqual + AssertLinter b:executable, \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/python_paths/with_virtualenv/subdir')) \ . ' && ' . ale#Escape(b:executable) \ . ' --show-column-numbers ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(You should able able to use the global mypy instead): silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') let g:ale_python_mypy_use_global = 1 - AssertEqual - \ 'mypy', - \ ale_linters#python#mypy#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'mypy', \ 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/python_paths/with_virtualenv/subdir')) \ . ' && ' . ale#Escape('mypy') \ . ' --show-column-numbers ' - \ . '--shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . '--shadow-file %s %t %s' Execute(Setting executable to 'pipenv' appends 'run mypy'): let g:ale_python_mypy_executable = 'path/to/pipenv' - AssertEqual + AssertLinter 'path/to/pipenv', \ ale#path#BufferCdString(bufnr('')) \ . ale#Escape('path/to/pipenv') . ' run mypy' - \ . ' --show-column-numbers --shadow-file %s %t %s', - \ ale_linters#python#mypy#GetCommand(bufnr('')) + \ . ' --show-column-numbers --shadow-file %s %t %s' diff --git a/test/command_callback/test_nagelfar_command_callbacks.vader b/test/command_callback/test_nagelfar_command_callbacks.vader index 5c6be7f1..94bb1d53 100644 --- a/test/command_callback/test_nagelfar_command_callbacks.vader +++ b/test/command_callback/test_nagelfar_command_callbacks.vader @@ -1,42 +1,19 @@ Before: - Save g:ale_tcl_nagelfar_executable - Save g:ale_tcl_nagelfar_options - - unlet! g:ale_tcl_nagelfar_executable - unlet! b:ale_tcl_nagelfar_executable - unlet! g:ale_tcl_nagelfar_options - unlet! b:ale_tcl_nagelfar_options - - runtime ale_linters/tcl/nagelfar.vim + call ale#assert#SetUpLinterTest('tcl', 'nagelfar') After: - Restore unlet! b:command_tail - unlet! b:ale_tcl_nagelfar_executable - unlet! b:ale_tcl_nagelfar_options - call ale#linter#Reset() + + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'nagelfar.tcl', ale_linters#tcl#nagelfar#GetExecutable(bufnr('')) + AssertLinter 'nagelfar.tcl', ale#Escape('nagelfar.tcl') . ' %s' let b:ale_tcl_nagelfar_executable = 'foobar' - AssertEqual 'foobar', ale_linters#tcl#nagelfar#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('nagelfar.tcl') . ' %s', - \ ale_linters#tcl#nagelfar#GetCommand(bufnr('')) - - let b:ale_tcl_nagelfar_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . ' %s', - \ ale_linters#tcl#nagelfar#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' %s' Execute(The options should be configurable): let b:ale_tcl_nagelfar_options = '--something' - AssertEqual - \ ale#Escape('nagelfar.tcl') . ' --something %s', - \ ale_linters#tcl#nagelfar#GetCommand(bufnr('')) + AssertLinter 'nagelfar.tcl', ale#Escape('nagelfar.tcl') . ' --something %s' diff --git a/test/command_callback/test_nasm_nasm_command_callbacks.vader b/test/command_callback/test_nasm_nasm_command_callbacks.vader index 5053e536..4e0cf608 100644 --- a/test/command_callback/test_nasm_nasm_command_callbacks.vader +++ b/test/command_callback/test_nasm_nasm_command_callbacks.vader @@ -1,13 +1,5 @@ Before: - Save g:ale_nasm_nasm_executable - Save g:ale_nasm_nasm_options - - unlet! g:ale_nasm_nasm_executable - unlet! b:ale_nasm_nasm_executable - unlet! g:ale_nasm_nasm_options - unlet! b:ale_nasm_nasm_options - - runtime ale_linters/nasm/nasm.vim + call ale#assert#SetUpLinterTest('nasm', 'nasm') let b:command_tail = \ ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' %s' @@ -15,38 +7,25 @@ Before: \ ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' -w+orphan-labels %s' After: - Restore unlet! b:command_tail unlet! b:command_tail_opt - unlet! b:ale_nasm_nasm_executable - unlet! b:ale_nasm_nasm_options - call ale#linter#Reset() + + call ale#assert#TearDownLinterTest() Execute(The executable should be configurable): - AssertEqual 'nasm', ale_linters#nasm#nasm#GetExecutable(bufnr('')) - - let b:ale_nasm_nasm_executable = '/opt/nasm/nasm' - - AssertEqual '/opt/nasm/nasm', ale_linters#nasm#nasm#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('nasm') . b:command_tail, - \ ale_linters#nasm#nasm#GetCommand(bufnr('')) + AssertLinter 'nasm', ale#Escape('nasm') . b:command_tail, let b:ale_nasm_nasm_executable = '~/nasm' - AssertEqual - \ ale#Escape('~/nasm') . b:command_tail, - \ ale_linters#nasm#nasm#GetCommand(bufnr('')) + AssertLinter '~/nasm', ale#Escape('~/nasm') . b:command_tail Execute(The options should be configurable): - AssertEqual '', ale_linters#nasm#nasm#GetOptions(bufnr('')) let b:ale_nasm_nasm_options = '-w-macro-params' - AssertEqual '-w-macro-params', ale_linters#nasm#nasm#GetOptions(bufnr('')) + + AssertLinter 'nasm', ale#Escape('nasm') + \ . ' -X gnu -I ' . ale#Escape(getcwd() . (has('win32') ? '\' : '/')) . ' -w-macro-params %s' Execute(The options should be used in command): - let b:ale_nasm_nasm_options = '-w+orphan-labels' - AssertEqual - \ ale#Escape('nasm') . b:command_tail_opt, - \ ale_linters#nasm#nasm#GetCommand(bufnr('')) + let b:ale_nasm_nasm_options = '-w+orphan-labels' + + AssertLinter 'nasm', ale#Escape('nasm') . b:command_tail_opt diff --git a/test/command_callback/test_ocaml_ols_callbacks.vader b/test/command_callback/test_ocaml_ols_callbacks.vader index d10898fa..c77e2909 100644 --- a/test/command_callback/test_ocaml_ols_callbacks.vader +++ b/test/command_callback/test_ocaml_ols_callbacks.vader @@ -1,54 +1,40 @@ Before: + call ale#assert#SetUpLinterTest('ocaml', 'ols') + Save &filetype - Save g:ale_ocaml_ols_executable - Save g:ale_ocaml_ols_use_global - let &filetype = 'ocaml' - unlet! g:ale_ocaml_ols_executable - unlet! g:ale_ocaml_ols_use_global - - runtime ale_linters/ocaml/ols.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The language string should be correct): - AssertEqual 'ocaml', ale#handlers#ols#GetLanguage(bufnr('')) + AssertLSPLanguage 'ocaml' Execute(The default executable should be correct): - AssertEqual 'ocaml-language-server', ale#handlers#ols#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('ocaml-language-server') . ' --stdio', - \ ale#handlers#ols#GetCommand(bufnr('')) + AssertLinter 'ocaml-language-server', + \ ale#Escape('ocaml-language-server') . ' --stdio' Execute(The project root should be detected correctly): - AssertEqual '', ale#handlers#ols#GetProjectRoot(bufnr('')) + AssertLSPProject '' call ale#test#SetFilename('ols_paths/file.ml') - AssertEqual - \ ale#path#Simplify(g:dir . '/ols_paths'), - \ ale#handlers#ols#GetProjectRoot(bufnr('')) + AssertLSPProject ale#path#Simplify(g:dir . '/ols_paths') Execute(The local executable should be used when available): call ale#test#SetFilename('ols_paths/file.ml') - AssertEqual - \ ale#path#Simplify(g:dir . '/ols_paths/node_modules/.bin/ocaml-language-server'), - \ ale#handlers#ols#GetExecutable(bufnr('')) + AssertLinter ale#path#Simplify(g:dir . '/ols_paths/node_modules/.bin/ocaml-language-server'), + \ ale#Escape(ale#path#Simplify(g:dir . '/ols_paths/node_modules/.bin/ocaml-language-server')) . ' --stdio' Execute(The gloabl executable should always be used when use_global is set): let g:ale_ocaml_ols_use_global = 1 call ale#test#SetFilename('ols_paths/file.ml') - AssertEqual 'ocaml-language-server', ale#handlers#ols#GetExecutable(bufnr('')) + AssertLinter 'ocaml-language-server', + \ ale#Escape('ocaml-language-server') . ' --stdio' Execute(The executable should be configurable): let g:ale_ocaml_ols_executable = 'foobar' - AssertEqual 'foobar', ale#handlers#ols#GetExecutable(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio' diff --git a/test/command_callback/test_perl_command_callback.vader b/test/command_callback/test_perl_command_callback.vader index ba85e53b..3c4b661c 100644 --- a/test/command_callback/test_perl_command_callback.vader +++ b/test/command_callback/test_perl_command_callback.vader @@ -1,37 +1,14 @@ Before: - Save g:ale_perl_perl_executable - Save g:ale_perl_perl_options - - unlet! g:ale_perl_perl_executable - unlet! g:ale_perl_perl_options - - runtime ale_linters/perl/perl.vim + call ale#assert#SetUpLinterTest('perl', 'perl') After: - Restore - - unlet! b:ale_perl_perl_executable - unlet! b:ale_perl_perl_options - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default Perl command callback should be correct): - AssertEqual - \ 'perl', - \ ale_linters#perl#perl#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('perl') . ' -c -Mwarnings -Ilib %t', - \ ale_linters#perl#perl#GetCommand(bufnr('')) + AssertLinter 'perl', ale#Escape('perl') . ' -c -Mwarnings -Ilib %t' Execute(Overriding the executable and command should work): let b:ale_perl_perl_executable = 'foobar' let b:ale_perl_perl_options = '-w' - AssertEqual - \ 'foobar', - \ ale_linters#perl#perl#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('foobar') . ' -w %t', - \ ale_linters#perl#perl#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' -w %t' diff --git a/test/command_callback/test_perlcritic_command_callback.vader b/test/command_callback/test_perlcritic_command_callback.vader index e8d8cc18..0f1e2856 100644 --- a/test/command_callback/test_perlcritic_command_callback.vader +++ b/test/command_callback/test_perlcritic_command_callback.vader @@ -1,67 +1,36 @@ Before: - Save g:ale_perl_perlcritic_profile - Save g:ale_perl_perlcritic_options - Save g:ale_perl_perlcritic_executable - Save g:ale_perl_perlcritic_showrules - - unlet! g:ale_perl_perlcritic_options - unlet! g:ale_perl_perlcritic_executable - unlet! g:ale_perl_perlcritic_showrules + call ale#assert#SetUpLinterTest('perl', 'perlcritic') + call ale#test#SetFilename('test.pl') let g:ale_perl_perlcritic_profile = '' - runtime ale_linters/perl/perlcritic.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') - call ale#test#SetFilename('test.pl') - After: - Restore - - unlet! b:ale_perl_perlcritic_profile - unlet! b:ale_perl_perlcritic_options - unlet! b:ale_perl_perlcritic_executable - unlet! b:ale_perl_perlcritic_showrules unlet! b:readme_path - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The command should be correct with g:ale_perl_perlcritic_showrules off): let b:ale_perl_perlcritic_showrules = 0 - AssertEqual - \ ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') - \ . ' --nocolor', - \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + AssertLinter 'perlcritic', ale#Escape('perlcritic') + \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' Execute(The command should be correct with g:ale_perl_perlcritic_showrules on): let b:ale_perl_perlcritic_showrules = 1 - AssertEqual - \ ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m [%p]\n') - \ . ' --nocolor', - \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + AssertLinter 'perlcritic', ale#Escape('perlcritic') + \ . ' --verbose ' . ale#Escape('%l:%c %m [%p]\n') . ' --nocolor' Execute(The command search for the profile file when set): let b:ale_perl_perlcritic_profile = 'README.md' let b:readme_path = ale#path#Simplify(expand('%:p:h:h:h') . '/README.md') - AssertEqual - \ ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') - \ . ' --nocolor' - \ . ' --profile ' . ale#Escape(b:readme_path), - \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + AssertLinter 'perlcritic', ale#Escape('perlcritic') + \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' + \ . ' --profile ' . ale#Escape(b:readme_path) Execute(Extra options should be set appropriately): let b:ale_perl_perlcritic_options = 'beep boop' - AssertEqual - \ ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') - \ . ' --nocolor' - \ . ' beep boop', - \ ale_linters#perl#perlcritic#GetCommand(bufnr('')) + AssertLinter 'perlcritic', ale#Escape('perlcritic') + \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' + \ . ' beep boop' diff --git a/test/command_callback/test_php_langserver_callbacks.vader b/test/command_callback/test_php_langserver_callbacks.vader index ebcae0e7..3b0a427e 100644 --- a/test/command_callback/test_php_langserver_callbacks.vader +++ b/test/command_callback/test_php_langserver_callbacks.vader @@ -1,49 +1,29 @@ Before: - Save g:ale_php_langserver_executable - Save g:ale_php_langserver_config_path - Save g:ale_php_langserver_use_global - - unlet! g:ale_php_langserver_executable - unlet! g:ale_php_langserver_config_path - unlet! g:ale_php_langserver_use_global - - runtime ale_linters/php/langserver.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('php', 'langserver') After: - Restore - if isdirectory(g:dir . '/.git') call delete(g:dir . '/.git', 'd') endif - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default executable path should be correct): - AssertEqual - \ 'php-language-server.php', - \ ale_linters#php#langserver#GetExecutable(bufnr('')) - AssertEqual - \ 'php ' . ale#Escape('php-language-server.php'), - \ ale_linters#php#langserver#GetCommand(bufnr('')) + AssertLinter 'php-language-server.php', + \ 'php ' . ale#Escape('php-language-server.php') Execute(Vendor executables should be detected): call ale#test#SetFilename('php-langserver-project/test.php') - AssertEqual + AssertLinter \ ale#path#Simplify(g:dir . '/php-langserver-project/vendor/bin/php-language-server.php'), - \ ale_linters#php#langserver#GetExecutable(bufnr('')) - AssertEqual \ 'php ' . ale#Escape(ale#path#Simplify( \ g:dir \ . '/php-langserver-project/vendor/bin/php-language-server.php' - \ )), - \ ale_linters#php#langserver#GetCommand(bufnr('')) + \ )) Execute(The project path should be correct for .git directories): call ale#test#SetFilename('php-langserver-project/test.php') call mkdir(g:dir . '/.git') - AssertEqual g:dir, ale_linters#php#langserver#GetProjectRoot(bufnr('')) + AssertLSPProject g:dir diff --git a/test/command_callback/test_phpmd_command_callbacks.vader b/test/command_callback/test_phpmd_command_callbacks.vader index 928b9771..64922820 100644 --- a/test/command_callback/test_phpmd_command_callbacks.vader +++ b/test/command_callback/test_phpmd_command_callbacks.vader @@ -1,20 +1,12 @@ Before: - Save g:ale_php_phpmd_executable - - unlet! g:ale_php_phpmd_executable - - runtime ale_linters/php/phpmd.vim + call ale#assert#SetUpLinterTest('php', 'phpmd') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(Custom executables should be used for the executable and command): let g:ale_php_phpmd_executable = 'phpmd_test' - AssertEqual 'phpmd_test', ale_linters#php#phpmd#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'phpmd_test', \ ale#Escape('phpmd_test') - \ . ' %s text cleancode,codesize,controversial,design,naming,unusedcode --ignore-violations-on-exit %t', - \ ale_linters#php#phpmd#GetCommand(bufnr('')) + \ . ' %s text cleancode,codesize,controversial,design,naming,unusedcode --ignore-violations-on-exit %t' diff --git a/test/command_callback/test_phpstan_command_callbacks.vader b/test/command_callback/test_phpstan_command_callbacks.vader index 169c5bb7..c7db587a 100644 --- a/test/command_callback/test_phpstan_command_callbacks.vader +++ b/test/command_callback/test_phpstan_command_callbacks.vader @@ -1,38 +1,24 @@ Before: - Save g:ale_php_phpstan_executable - Save g:ale_php_phpstan_level - Save g:ale_php_phpstan_configuration - - unlet! g:ale_php_phpstan_executable - unlet! g:ale_php_phpstan_level - unlet! g:ale_php_phpstan_configuration - - runtime ale_linters/php/phpstan.vim + call ale#assert#SetUpLinterTest('php', 'phpstan') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(Custom executables should be used for the executable and command): let g:ale_php_phpstan_executable = 'phpstan_test' - AssertEqual 'phpstan_test', ale_linters#php#phpstan#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('phpstan_test') . ' analyze -l4 --errorFormat raw %s', - \ ale_linters#php#phpstan#GetCommand(bufnr('')) + AssertLinter 'phpstan_test', + \ ale#Escape('phpstan_test') . ' analyze -l4 --errorFormat raw %s' Execute(project with level set to 3): call ale#test#SetFilename('phpstan-test-files/foo/test.php') let g:ale_php_phpstan_level = 3 - AssertEqual - \ ale#Escape('phpstan') . ' analyze -l3 --errorFormat raw %s', - \ ale_linters#php#phpstan#GetCommand(bufnr('')) + AssertLinter 'phpstan', + \ ale#Escape('phpstan') . ' analyze -l3 --errorFormat raw %s' Execute(Custom phpstan configuration file): let g:ale_php_phpstan_configuration = 'phpstan_config' - AssertEqual - \ ale#Escape('phpstan') . ' analyze -l4 --errorFormat raw -c phpstan_config %s', - \ ale_linters#php#phpstan#GetCommand(bufnr('')) + AssertLinter 'phpstan', + \ ale#Escape('phpstan') . ' analyze -l4 --errorFormat raw -c phpstan_config %s' diff --git a/test/command_callback/test_pony_ponyc_command_callbacks.vader b/test/command_callback/test_pony_ponyc_command_callbacks.vader index 7acbfa9d..3a3b32ec 100644 --- a/test/command_callback/test_pony_ponyc_command_callbacks.vader +++ b/test/command_callback/test_pony_ponyc_command_callbacks.vader @@ -1,23 +1,12 @@ Before: - Save g:ale_pony_ponyc_options - - unlet! g:ale_pony_ponyc_options - unlet! b:ale_pony_ponyc_options - - runtime ale_linters/pony/ponyc.vim + call ale#assert#SetUpLinterTest('pony', 'ponyc') After: - Restore - unlet! b:ale_pony_ponyc_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The options should be used in the command): - AssertEqual - \ ale#Escape('ponyc') . ' --pass paint', - \ ale_linters#pony#ponyc#GetCommand(bufnr('')) + AssertLinter 'ponyc', ale#Escape('ponyc') . ' --pass paint' let b:ale_pony_ponyc_options = 'foobar' - AssertEqual - \ ale#Escape('ponyc') . ' foobar', - \ ale_linters#pony#ponyc#GetCommand(bufnr('')) + AssertLinter 'ponyc', ale#Escape('ponyc') . ' foobar' diff --git a/test/command_callback/test_prospector_command_callback.vader b/test/command_callback/test_prospector_command_callback.vader index 04cd58ed..316b9883 100644 --- a/test/command_callback/test_prospector_command_callback.vader +++ b/test/command_callback/test_prospector_command_callback.vader @@ -1,23 +1,12 @@ Before: - Save g:ale_python_mypy_executable - Save g:ale_python_mypy_options - - unlet! g:ale_python_mypy_executable - unlet! g:ale_python_mypy_options - - runtime ale_linters/python/prospector.vim + call ale#assert#SetUpLinterTest('python', 'prospector') After: - Restore - - unlet! b:executable - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(Setting executable to 'pipenv' appends 'run prospector'): let g:ale_python_prospector_executable = 'path/to/pipenv' - AssertEqual + AssertLinter 'path/to/pipenv', \ ale#Escape('path/to/pipenv') . ' run prospector' - \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s', - \ ale_linters#python#prospector#GetCommand(bufnr('')) + \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s' diff --git a/test/command_callback/test_proto_command_callback.vader b/test/command_callback/test_proto_command_callback.vader index 76050c61..726588c0 100644 --- a/test/command_callback/test_proto_command_callback.vader +++ b/test/command_callback/test_proto_command_callback.vader @@ -1,21 +1,16 @@ Before: + call ale#assert#SetUpLinterTest('proto', 'protoc_gen_lint') call ale#test#SetFilename('test.proto') After: - Restore - - unlet! b:ale_proto_protoc_gen_lint_options - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual - \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --lint_out=. ' . '%s', - \ ale_linters#proto#protoc_gen_lint#GetCommand(bufnr('')) + AssertLinter 'protoc', + \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --lint_out=. ' . '%s' Execute(The callback should include any additional options): let b:ale_proto_protoc_gen_lint_options = '--some-option' - AssertEqual - \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --some-option --lint_out=. ' . '%s', - \ ale_linters#proto#protoc_gen_lint#GetCommand(bufnr('')) + AssertLinter 'protoc', + \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --some-option --lint_out=. ' . '%s' diff --git a/test/command_callback/test_puglint_command_callback.vader b/test/command_callback/test_puglint_command_callback.vader index f9b4a856..69c86b25 100644 --- a/test/command_callback/test_puglint_command_callback.vader +++ b/test/command_callback/test_puglint_command_callback.vader @@ -1,71 +1,48 @@ Before: - Save g:ale_pug_puglint_options - Save g:ale_pug_puglint_executable - Save g:ale_pug_puglint_use_global - - let g:ale_pug_puglint_options = '' - let g:ale_pug_puglint_executable = 'pug-lint' - let g:ale_pug_puglint_use_global = 0 - - call ale#test#SetDirectory('/testplugin/test/command_callback') - - runtime ale_linters/pug/puglint.vim + call ale#assert#SetUpLinterTest('pug', 'puglint') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(puglint should detect local executables and package.json): call ale#test#SetFilename('puglint_project/test.pug') - AssertEqual + AssertLinter \ ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint'), - \ ale_linters#pug#puglint#GetExecutable(bufnr('')) - - AssertEqual \ ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint')) \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/package.json')) - \ . ' -r inline %t', - \ ale_linters#pug#puglint#GetCommand(bufnr('')) + \ . ' -r inline %t' Execute(puglint should use global executables if configured): let g:ale_pug_puglint_use_global = 1 call ale#test#SetFilename('puglint_project/test.pug') - AssertEqual 'pug-lint', ale_linters#pug#puglint#GetExecutable(bufnr('')) - - AssertEqual + AssertLinter 'pug-lint', \ ale#Escape('pug-lint') \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/package.json')) - \ . ' -r inline %t', - \ ale_linters#pug#puglint#GetCommand(bufnr('')) + \ . ' -r inline %t' Execute(puglint should detect .pug-lintrc): call ale#test#SetFilename('puglint_project/puglint_rc_dir/subdir/test.pug') - AssertEqual + AssertLinter ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint'), \ ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint')) \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/puglint_rc_dir/.pug-lintrc')) - \ . ' -r inline %t', - \ ale_linters#pug#puglint#GetCommand(bufnr('')) + \ . ' -r inline %t' Execute(puglint should detect .pug-lintrc.js): call ale#test#SetFilename('puglint_project/puglint_rc_js_dir/subdir/test.pug') - AssertEqual + AssertLinter ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint'), \ ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint')) \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/puglint_rc_js_dir/.pug-lintrc.js')) - \ . ' -r inline %t', - \ ale_linters#pug#puglint#GetCommand(bufnr('')) + \ . ' -r inline %t' Execute(puglint should detect .pug-lintrc.json): call ale#test#SetFilename('puglint_project/puglint_rc_json_dir/subdir/test.pug') - AssertEqual + AssertLinter ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint'), \ ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/node_modules/.bin/pug-lint')) \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/puglint_project/puglint_rc_json_dir/.pug-lintrc.json')) - \ . ' -r inline %t', - \ ale_linters#pug#puglint#GetCommand(bufnr('')) + \ . ' -r inline %t' diff --git a/test/command_callback/test_pycodestyle_command_callback.vader b/test/command_callback/test_pycodestyle_command_callback.vader index 90b07a24..851eede9 100644 --- a/test/command_callback/test_pycodestyle_command_callback.vader +++ b/test/command_callback/test_pycodestyle_command_callback.vader @@ -1,34 +1,26 @@ Before: - Save g:ale_python_pycodestyle_executable - Save g:ale_python_pycodestyle_options - Save g:ale_python_pycodestyle_use_global - - runtime ale_linters/python/pycodestyle.vim + call ale#assert#SetUpLinterTest('python', 'pycodestyle') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The pycodestyle command callback should return default string): - AssertEqual ale#Escape('pycodestyle') . ' -', - \ ale_linters#python#pycodestyle#GetCommand(bufnr('')) + AssertLinter 'pycodestyle', ale#Escape('pycodestyle') . ' -' Execute(The pycodestyle command callback should allow options): let g:ale_python_pycodestyle_options = '--exclude=test*.py' - AssertEqual ale#Escape('pycodestyle') . ' --exclude=test*.py -', - \ ale_linters#python#pycodestyle#GetCommand(bufnr('')) + AssertLinter 'pycodestyle', + \ ale#Escape('pycodestyle') . ' --exclude=test*.py -' Execute(The pycodestyle executable should be configurable): let g:ale_python_pycodestyle_executable = '~/.local/bin/pycodestyle' - AssertEqual ale#Escape('~/.local/bin/pycodestyle') . ' -', - \ ale_linters#python#pycodestyle#GetCommand(bufnr('')) + AssertLinter '~/.local/bin/pycodestyle', + \ ale#Escape('~/.local/bin/pycodestyle') . ' -' Execute(Setting executable to 'pipenv' appends 'run pycodestyle'): let g:ale_python_pycodestyle_executable = 'path/to/pipenv' - AssertEqual - \ ale#Escape('path/to/pipenv') . ' run pycodestyle -', - \ ale_linters#python#pycodestyle#GetCommand(bufnr('')) + AssertLinter 'path/to/pipenv', + \ ale#Escape('path/to/pipenv') . ' run pycodestyle -' diff --git a/test/command_callback/test_pyflakes_command_callback.vader b/test/command_callback/test_pyflakes_command_callback.vader index 491432e9..efc925fe 100644 --- a/test/command_callback/test_pyflakes_command_callback.vader +++ b/test/command_callback/test_pyflakes_command_callback.vader @@ -1,34 +1,20 @@ Before: - Save g:ale_python_pyflakes_executable - Save g:ale_python_pyflakes_use_global - - unlet! g:ale_python_pyflakes_executable - unlet! g:ale_python_pyflakes_use_global - + call ale#assert#SetUpLinterTest('python', 'pyflakes') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - call ale#test#SetDirectory('/testplugin/test/command_callback') - - runtime ale_linters/python/pyflakes.vim - After: - Restore - unlet! b:bin_dir unlet! b:executable - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The pyflakes command callback should return default string): - AssertEqual ale#Escape('pyflakes') . ' %t', - \ ale_linters#python#pyflakes#GetCommand(bufnr('')) + AssertLinter 'pyflakes', ale#Escape('pyflakes') . ' %t' Execute(The pyflakes executable should be configurable): let g:ale_python_pyflakes_executable = '~/.local/bin/pyflakes' - AssertEqual ale#Escape('~/.local/bin/pyflakes') . ' %t', - \ ale_linters#python#pyflakes#GetCommand(bufnr('')) + AssertLinter '~/.local/bin/pyflakes', + \ ale#Escape('~/.local/bin/pyflakes') . ' %t' Execute(The pyflakes executable should be run from the virtualenv path): call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py') @@ -37,20 +23,17 @@ Execute(The pyflakes executable should be run from the virtualenv path): \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/pyflakes' \) - AssertEqual ale#Escape(b:executable) . ' %t', - \ ale_linters#python#pyflakes#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) . ' %t' Execute(You should be able to override the pyflakes virtualenv lookup): call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py') let g:ale_python_pyflakes_use_global = 1 - AssertEqual ale#Escape('pyflakes') . ' %t', - \ ale_linters#python#pyflakes#GetCommand(bufnr('')) + AssertLinter 'pyflakes', ale#Escape('pyflakes') . ' %t' Execute(Setting executable to 'pipenv' appends 'run pyflakes'): let g:ale_python_pyflakes_executable = 'path/to/pipenv' - AssertEqual + AssertLinter 'path/to/pipenv', \ ale#Escape('path/to/pipenv') . ' run pyflakes %t', - \ ale_linters#python#pyflakes#GetCommand(bufnr('')) diff --git a/test/command_callback/test_pylint_command_callback.vader b/test/command_callback/test_pylint_command_callback.vader index f8cb5800..be2908f9 100644 --- a/test/command_callback/test_pylint_command_callback.vader +++ b/test/command_callback/test_pylint_command_callback.vader @@ -1,79 +1,46 @@ Before: - Save g:ale_python_pylint_executable - Save g:ale_python_pylint_options - Save g:ale_python_pylint_use_global - Save g:ale_python_pylint_change_directory - - unlet! g:ale_python_pylint_executable - unlet! g:ale_python_pylint_options - unlet! g:ale_python_pylint_use_global - unlet! g:ale_python_pylint_change_directory - - runtime ale_linters/python/pylint.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('python', 'pylint') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - let b:command_tail = ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - unlet! b:bin_dir unlet! b:executable + unlet! b:command_tail + + call ale#assert#TearDownLinterTest() Execute(The pylint callbacks should return the correct default values): - AssertEqual - \ 'pylint', - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'pylint', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('pylint') . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape('pylint') . ' ' . b:command_tail Execute(The option for disabling changing directories should work): let g:ale_python_pylint_change_directory = 0 - AssertEqual - \ 'pylint', - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - \ - AssertEqual - \ ale#Escape('pylint') . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + AssertLinter 'pylint', ale#Escape('pylint') . ' ' . b:command_tail Execute(The pylint executable should be configurable, and escaped properly): let g:ale_python_pylint_executable = 'executable with spaces' - AssertEqual - \ 'executable with spaces', - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'executable with spaces', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('executable with spaces') . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape('executable with spaces') . ' ' . b:command_tail Execute(The pylint command callback should let you set options): let g:ale_python_pylint_options = '--some-option' - AssertEqual + AssertLinter 'pylint', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('pylint') . ' --some-option' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape('pylint') . ' --some-option' . b:command_tail Execute(The pylint callbacks shouldn't detect virtualenv directories where they don't exist): silent execute 'file ' . fnameescape(g:dir . '/python_paths/no_virtualenv/subdir/foo/bar.py') - AssertEqual - \ 'pylint', - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'pylint', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('pylint') . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape('pylint') . ' ' . b:command_tail Execute(The pylint callbacks should detect virtualenv directories): silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') @@ -82,32 +49,22 @@ Execute(The pylint callbacks should detect virtualenv directories): \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/pylint' \) - AssertEqual - \ b:executable, - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - - AssertEqual + AssertLinter b:executable, \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape(b:executable) . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape(b:executable) . ' ' . b:command_tail Execute(You should able able to use the global pylint instead): silent execute 'file ' . fnameescape(g:dir . '/python_paths/with_virtualenv/subdir/foo/bar.py') let g:ale_python_pylint_use_global = 1 - AssertEqual - \ 'pylint', - \ ale_linters#python#pylint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'pylint', \ ale#path#BufferCdString(bufnr('')) - \ . ale#Escape('pylint') . ' ' . b:command_tail, - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ale#Escape('pylint') . ' ' . b:command_tail Execute(Setting executable to 'pipenv' appends 'run pylint'): let g:ale_python_pylint_executable = 'path/to/pipenv' - AssertEqual + AssertLinter 'path/to/pipenv', \ ale#path#BufferCdString(bufnr('')) \ . ale#Escape('path/to/pipenv') . ' run pylint' - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s', - \ ale_linters#python#pylint#GetCommand(bufnr('')) + \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' diff --git a/test/command_callback/test_pyls_command_callback.vader b/test/command_callback/test_pyls_command_callback.vader index 4bef4742..53bf3000 100644 --- a/test/command_callback/test_pyls_command_callback.vader +++ b/test/command_callback/test_pyls_command_callback.vader @@ -1,34 +1,21 @@ Before: - Save g:ale_python_pyls_executable - Save g:ale_python_pyls_use_global - - unlet! g:ale_python_pyls_executable - unlet! g:ale_python_pyls_use_global + call ale#assert#SetUpLinterTest('python', 'pyls') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - call ale#test#SetDirectory('/testplugin/test/command_callback') - - runtime ale_linters/python/pyls.vim - After: - Restore - unlet! b:bin_dir unlet! b:executable - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The pyls command callback should return default string): - AssertEqual ale#Escape('pyls'), - \ ale_linters#python#pyls#GetCommand(bufnr('')) + AssertLinter 'pyls', ale#Escape('pyls') Execute(The pyls executable should be configurable): let g:ale_python_pyls_executable = '~/.local/bin/pyls' - AssertEqual ale#Escape('~/.local/bin/pyls'), - \ ale_linters#python#pyls#GetCommand(bufnr('')) + AssertLinter '~/.local/bin/pyls' , ale#Escape('~/.local/bin/pyls') Execute(The pyls executable should be run from the virtualenv path): call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py') @@ -45,12 +32,9 @@ Execute(You should be able to override the pyls virtualenv lookup): let g:ale_python_pyls_use_global = 1 - AssertEqual ale#Escape('pyls'), - \ ale_linters#python#pyls#GetCommand(bufnr('')) + AssertLinter 'pyls', ale#Escape('pyls') Execute(Setting executable to 'pipenv' appends 'run pyls'): let g:ale_python_pyls_executable = 'path/to/pipenv' - AssertEqual - \ ale#Escape('path/to/pipenv') . ' run pyls', - \ ale_linters#python#pyls#GetCommand(bufnr('')) + AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run pyls' diff --git a/test/command_callback/test_pyre_command_callback.vader b/test/command_callback/test_pyre_command_callback.vader index 395f951f..6ad19b56 100644 --- a/test/command_callback/test_pyre_command_callback.vader +++ b/test/command_callback/test_pyre_command_callback.vader @@ -1,34 +1,20 @@ Before: - Save g:ale_python_pyre_executable - Save g:ale_python_pyre_use_global - - unlet! g:ale_python_pyre_executable - unlet! g:ale_python_pyre_use_global - + call ale#assert#SetUpLinterTest('python', 'pyre') let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - call ale#test#SetDirectory('/testplugin/test/command_callback') - - runtime ale_linters/python/pyre.vim - After: - Restore - unlet! b:bin_dir unlet! b:executable - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The pyre command callback should return default string): - AssertEqual ale#Escape('pyre') . ' persistent', - \ ale_linters#python#pyre#GetCommand(bufnr('')) + AssertLinter 'pyre', ale#Escape('pyre') . ' persistent' Execute(The pyre executable should be configurable): let g:ale_python_pyre_executable = '~/.local/bin/pyre' - AssertEqual ale#Escape('~/.local/bin/pyre') . ' persistent', - \ ale_linters#python#pyre#GetCommand(bufnr('')) + AssertLinter '~/.local/bin/pyre', + \ ale#Escape('~/.local/bin/pyre') . ' persistent' Execute(The pyre executable should be run from the virtualenv path): call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py') @@ -37,20 +23,17 @@ Execute(The pyre executable should be run from the virtualenv path): \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/pyre' \) - AssertEqual ale#Escape(b:executable) . ' persistent', - \ ale_linters#python#pyre#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) . ' persistent' Execute(You should be able to override the pyre virtualenv lookup): call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py') let g:ale_python_pyre_use_global = 1 - AssertEqual ale#Escape('pyre') . ' persistent', - \ ale_linters#python#pyre#GetCommand(bufnr('')) + AssertLinter 'pyre', ale#Escape('pyre') . ' persistent' Execute(Setting executable to 'pipenv' appends 'run pyre'): let g:ale_python_pyre_executable = 'path/to/pipenv' - AssertEqual - \ ale#Escape('path/to/pipenv') . ' run pyre persistent', - \ ale_linters#python#pyre#GetCommand(bufnr('')) + AssertLinter 'path/to/pipenv', + \ ale#Escape('path/to/pipenv') . ' run pyre persistent' diff --git a/test/command_callback/test_pyrex_cython_command_callback.vader b/test/command_callback/test_pyrex_cython_command_callback.vader index 527ed2dd..b9020f11 100644 --- a/test/command_callback/test_pyrex_cython_command_callback.vader +++ b/test/command_callback/test_pyrex_cython_command_callback.vader @@ -1,50 +1,30 @@ Before: - Save g:ale_pyrex_cython_executable - Save g:ale_pyrex_cython_options - - unlet! g:ale_pyrex_cython_executable - unlet! b:ale_pyrex_cython_executable - unlet! g:ale_pyrex_cython_options - unlet! b:ale_pyrex_cython_options - - runtime ale_linters/pyrex/cython.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('pyrex', 'cython') After: - Restore - unlet! b:ale_pyrex_cython_options - unlet! b:ale_pyrex_cython_executable - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The default cython command should be correct): - AssertEqual - \ ale#Escape('cython') + AssertLinter 'cython', ale#Escape('cython') \ . ' --working ' . ale#Escape(g:dir) \ . ' --include-dir ' . ale#Escape(g:dir) \ . ' --warning-extra' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t', - \ ale_linters#pyrex#cython#GetCommand(bufnr('')) + \ . ' --output-file ' . g:ale#util#nul_file . ' %t' Execute(The cython executable should be configurable): let b:ale_pyrex_cython_executable = 'cython_foobar' - AssertEqual - \ ale#Escape('cython_foobar') + AssertLinter 'cython_foobar', ale#Escape('cython_foobar') \ . ' --working ' . ale#Escape(g:dir) \ . ' --include-dir ' . ale#Escape(g:dir) \ . ' --warning-extra' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t', - \ ale_linters#pyrex#cython#GetCommand(bufnr('')) + \ . ' --output-file ' . g:ale#util#nul_file . ' %t' Execute(Additional cython options should be configurable): let b:ale_pyrex_cython_options = '--foobar' - AssertEqual - \ ale#Escape('cython') + AssertLinter 'cython', ale#Escape('cython') \ . ' --working ' . ale#Escape(g:dir) \ . ' --include-dir ' . ale#Escape(g:dir) \ . ' --foobar' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t', - \ ale_linters#pyrex#cython#GetCommand(bufnr('')) + \ . ' --output-file ' . g:ale#util#nul_file . ' %t' diff --git a/test/command_callback/test_qmlfmt_command_callback.vader b/test/command_callback/test_qmlfmt_command_callback.vader index 263caea7..53502f4d 100644 --- a/test/command_callback/test_qmlfmt_command_callback.vader +++ b/test/command_callback/test_qmlfmt_command_callback.vader @@ -1,18 +1,13 @@ Before: - runtime ale_linters/qml/qmlfmt.vim + call ale#assert#SetUpLinterTest('qml', 'qmlfmt') After: - let g:ale_qml_qmlfmt_executable = 'qmlfmt' - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The qml qmlfmt command callback should return the correct default string): - AssertEqual ale#Escape('qmlfmt') . ' -e', - \ join(split(ale_linters#qml#qmlfmt#GetCommand(1))) + AssertLinter 'qmlfmt', ale#Escape('qmlfmt') . ' -e', Execute(The qmlfmt executable should be configurable): let g:ale_qml_qmlfmt_executable = '~/.local/bin/qmlfmt' - AssertEqual '~/.local/bin/qmlfmt', ale_linters#qml#qmlfmt#GetExecutable(1) - AssertEqual ale#Escape('~/.local/bin/qmlfmt') . ' -e', - \ join(split(ale_linters#qml#qmlfmt#GetCommand(1))) + AssertLinter '~/.local/bin/qmlfmt', ale#Escape('~/.local/bin/qmlfmt') . ' -e' diff --git a/test/command_callback/test_rails_best_practices_command_callback.vader b/test/command_callback/test_rails_best_practices_command_callback.vader index b4d2e82d..bc7c8e85 100644 --- a/test/command_callback/test_rails_best_practices_command_callback.vader +++ b/test/command_callback/test_rails_best_practices_command_callback.vader @@ -1,10 +1,5 @@ Before: - Save g:ale_ruby_rails_best_practices_executable - - let g:ale_ruby_rails_best_practices_executable = 'rails_best_practices' - - runtime ale_linters/ruby/rails_best_practices.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('ruby', 'rails_best_practices') call ale#test#SetFilename('../ruby_fixtures/valid_rails_app/db/test.rb') let b:args = '--silent -f json' @@ -13,45 +8,35 @@ Before: let b:suffix = has('win32') ? '; type %t' : '' After: - Restore - unlet! b:args unlet! b:app_path unlet! b:suffix - - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(Executable should default to rails_best_practices): - AssertEqual - \ ale#Escape('rails_best_practices') + AssertLinter 'rails_best_practices', ale#Escape('rails_best_practices') \ . ' ' . b:args \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix, - \ ale_linters#ruby#rails_best_practices#GetCommand(bufnr('')) + \ . b:suffix Execute(Should be able to set a custom executable): let g:ale_ruby_rails_best_practices_executable = 'bin/rails_best_practices' - AssertEqual - \ ale#Escape('bin/rails_best_practices') + AssertLinter 'bin/rails_best_practices', ale#Escape('bin/rails_best_practices') \ . ' ' . b:args \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix, - \ ale_linters#ruby#rails_best_practices#GetCommand(bufnr('')) + \ . b:suffix Execute(Setting bundle appends 'exec rails_best_practices'): let g:ale_ruby_rails_best_practices_executable = 'path to/bundle' - AssertEqual - \ ale#Escape('path to/bundle') . ' exec rails_best_practices' + AssertLinter 'path to/bundle', ale#Escape('path to/bundle') + \ . ' exec rails_best_practices' \ . ' ' . b:args \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix, - \ ale_linters#ruby#rails_best_practices#GetCommand(bufnr('')) + \ . b:suffix Execute(Command callback should be empty when not in a valid Rails app): call ale#test#SetFilename('../ruby_fixtures/not_a_rails_app/test.rb') - AssertEqual - \ '', - \ ale_linters#ruby#rails_best_practices#GetCommand(bufnr('')) + AssertLinter 'rails_best_practices', '' diff --git a/test/command_callback/test_reason_ols_callbacks.vader b/test/command_callback/test_reason_ols_callbacks.vader index 5fb39afe..53ef7fab 100644 --- a/test/command_callback/test_reason_ols_callbacks.vader +++ b/test/command_callback/test_reason_ols_callbacks.vader @@ -1,54 +1,41 @@ Before: + call ale#assert#SetUpLinterTest('reason', 'ols') + Save &filetype - Save g:ale_reason_ols_executable - Save g:ale_reason_ols_use_global - let &filetype = 'reason' - unlet! g:ale_reason_ols_executable - unlet! g:ale_reason_ols_use_global - - runtime ale_linters/reason/ols.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The language string should be correct): - AssertEqual 'reason', ale#handlers#ols#GetLanguage(bufnr('')) + AssertLSPLanguage 'reason' Execute(The default executable should be correct): - AssertEqual 'ocaml-language-server', ale#handlers#ols#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('ocaml-language-server') . ' --stdio', - \ ale#handlers#ols#GetCommand(bufnr('')) + AssertLinter 'ocaml-language-server', + \ ale#Escape('ocaml-language-server') . ' --stdio' Execute(The project root should be detected correctly): - AssertEqual '', ale#handlers#ols#GetProjectRoot(bufnr('')) + AssertLSPProject '' call ale#test#SetFilename('ols_paths/file.re') - AssertEqual - \ ale#path#Simplify(g:dir . '/ols_paths'), - \ ale#handlers#ols#GetProjectRoot(bufnr('')) + AssertLSPProject ale#path#Simplify(g:dir . '/ols_paths') Execute(The local executable should be used when available): call ale#test#SetFilename('ols_paths/file.re') - AssertEqual + AssertLinter \ ale#path#Simplify(g:dir . '/ols_paths/node_modules/.bin/ocaml-language-server'), - \ ale#handlers#ols#GetExecutable(bufnr('')) + \ ale#Escape(ale#path#Simplify(g:dir . '/ols_paths/node_modules/.bin/ocaml-language-server')) . ' --stdio' Execute(The gloabl executable should always be used when use_global is set): let g:ale_reason_ols_use_global = 1 call ale#test#SetFilename('ols_paths/file.re') - AssertEqual 'ocaml-language-server', ale#handlers#ols#GetExecutable(bufnr('')) + AssertLinter 'ocaml-language-server', + \ ale#Escape('ocaml-language-server') . ' --stdio' Execute(The executable should be configurable): let g:ale_reason_ols_executable = 'foobar' - AssertEqual 'foobar', ale#handlers#ols#GetExecutable(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio' diff --git a/test/command_callback/test_reek_command_callback.vader b/test/command_callback/test_reek_command_callback.vader index 41e749c1..059e5e36 100644 --- a/test/command_callback/test_reek_command_callback.vader +++ b/test/command_callback/test_reek_command_callback.vader @@ -1,34 +1,34 @@ Before: - runtime ale_linters/ruby/reek.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('ruby', 'reek') After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - call ale#semver#ResetVersionCache() + call ale#assert#TearDownLinterTest() Execute(The reek callbacks should return the correct default values): - AssertEqual + WithChainResults ['reek 5.0.0'] + AssertLinter 'reek', [ \ 'reek --version', - \ ale_linters#ruby#reek#VersionCheck(bufnr('')) - AssertEqual \ 'reek -f json --no-progress --no-color --stdin-filename %s', - \ ale_linters#ruby#reek#GetCommand(bufnr(''), ['reek 5.0.0']) + \] " Try with older versions. call ale#semver#ResetVersionCache() - AssertEqual + + WithChainResults ['reek 4.8.2'] + AssertLinter 'reek', [ + \ 'reek --version', \ 'reek -f json --no-progress --no-color', - \ ale_linters#ruby#reek#GetCommand(bufnr(''), ['reek 4.8.2']) + \] Execute(The reek version check should be cached): - AssertEqual + WithChainResults ['reek 5.0.0'] + AssertLinter 'reek', [ + \ 'reek --version', \ 'reek -f json --no-progress --no-color --stdin-filename %s', - \ ale_linters#ruby#reek#GetCommand(bufnr(''), ['reek 5.0.0']) + \] - AssertEqual + WithChainResults [] + AssertLinter 'reek', [ \ '', - \ ale_linters#ruby#reek#VersionCheck(bufnr('')) - AssertEqual \ 'reek -f json --no-progress --no-color --stdin-filename %s', - \ ale_linters#ruby#reek#GetCommand(bufnr(''), []) + \] diff --git a/test/command_callback/test_rubocop_command_callback.vader b/test/command_callback/test_rubocop_command_callback.vader index f0aa194f..7f42a8c0 100644 --- a/test/command_callback/test_rubocop_command_callback.vader +++ b/test/command_callback/test_rubocop_command_callback.vader @@ -1,39 +1,29 @@ Before: - Save g:ale_ruby_rubocop_executable - - let g:ale_ruby_rubocop_executable = 'rubocop' - - runtime ale_linters/ruby/rubocop.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('ruby', 'rubocop') call ale#test#SetFilename('dummy.rb') -After: - Restore + let g:ale_ruby_rubocop_executable = 'rubocop' + let g:ale_ruby_rubocop_options = '' - call ale#linter#Reset() - call ale#test#RestoreDirectory() +After: + call ale#assert#TearDownLinterTest() Execute(Executable should default to rubocop): - AssertEqual - \ ale#Escape('rubocop') + AssertLinter 'rubocop', ale#Escape('rubocop') \ . ' --format json --force-exclusion --stdin ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')), - \ ale_linters#ruby#rubocop#GetCommand(bufnr('')) + \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')) Execute(Should be able to set a custom executable): let g:ale_ruby_rubocop_executable = 'bin/rubocop' - AssertEqual - \ ale#Escape('bin/rubocop') + AssertLinter 'bin/rubocop' , ale#Escape('bin/rubocop') \ . ' --format json --force-exclusion --stdin ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')), - \ ale_linters#ruby#rubocop#GetCommand(bufnr('')) + \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')) Execute(Setting bundle appends 'exec rubocop'): let g:ale_ruby_rubocop_executable = 'path to/bundle' - AssertEqual - \ ale#Escape('path to/bundle') . ' exec rubocop' + AssertLinter 'path to/bundle', ale#Escape('path to/bundle') + \ . ' exec rubocop' \ . ' --format json --force-exclusion --stdin ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')), - \ ale_linters#ruby#rubocop#GetCommand(bufnr('')) + \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.rb')) diff --git a/test/command_callback/test_ruby_command_callback.vader b/test/command_callback/test_ruby_command_callback.vader index 3813d56b..b6bac14f 100644 --- a/test/command_callback/test_ruby_command_callback.vader +++ b/test/command_callback/test_ruby_command_callback.vader @@ -1,25 +1,13 @@ Before: - Save g:ale_ruby_ruby_executable - - unlet! g:ale_ruby_ruby_executable - - runtime ale_linters/ruby/ruby.vim + call ale#assert#SetUpLinterTest('ruby', 'ruby') After: - Restore - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual 'ruby', ale_linters#ruby#ruby#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('ruby') . ' -w -c -T1 %t', - \ ale_linters#ruby#ruby#GetCommand(bufnr('')) + AssertLinter 'ruby', ale#Escape('ruby') . ' -w -c -T1 %t' Execute(The executable should be configurable): let g:ale_ruby_ruby_executable = 'foobar' - AssertEqual 'foobar', ale_linters#ruby#ruby#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foobar') . ' -w -c -T1 %t', - \ ale_linters#ruby#ruby#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' -w -c -T1 %t' diff --git a/test/command_callback/test_rust_rls_callbacks.vader b/test/command_callback/test_rust_rls_callbacks.vader index 16bde98a..a710161d 100644 --- a/test/command_callback/test_rust_rls_callbacks.vader +++ b/test/command_callback/test_rust_rls_callbacks.vader @@ -1,45 +1,25 @@ Before: - Save g:ale_rust_rls_executable - Save g:ale_rust_rls_toolchain - - unlet! g:ale_rust_rls_executable - unlet! g:ale_rust_rls_toolchain - - runtime ale_linters/rust/rls.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('rust', 'rls') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default executable path should be correct): - AssertEqual 'rls', ale_linters#rust#rls#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('rls') . ' +' . ale#Escape('nightly'), - \ ale_linters#rust#rls#GetCommand(bufnr('')) + AssertLinter 'rls', ale#Escape('rls') . ' +' . ale#Escape('nightly') Execute(The toolchain should be configurable): let g:ale_rust_rls_toolchain = 'stable' - AssertEqual - \ ale#Escape('rls') . ' +' . ale#Escape('stable'), - \ ale_linters#rust#rls#GetCommand(bufnr('')) + AssertLinter 'rls', ale#Escape('rls') . ' +' . ale#Escape('stable') Execute(The toolchain should be ommitted if not given): let g:ale_rust_rls_toolchain = '' - AssertEqual - \ ale#Escape('rls'), - \ ale_linters#rust#rls#GetCommand(bufnr('')) + AssertLinter 'rls', ale#Escape('rls') Execute(The project root should be detected correctly): - AssertEqual '', ale_linters#rust#rls#GetProjectRoot(bufnr('')) + AssertLSPProject '' call ale#test#SetFilename('rust-rls-project/test.rs') - AssertEqual - \ ale#path#Simplify(g:dir . '/rust-rls-project'), - \ ale_linters#rust#rls#GetProjectRoot(bufnr('')) + AssertLSPProject ale#path#Simplify(g:dir . '/rust-rls-project') diff --git a/test/command_callback/test_rustc_command_callback.vader b/test/command_callback/test_rustc_command_callback.vader index fe46c9ad..7ca02760 100644 --- a/test/command_callback/test_rustc_command_callback.vader +++ b/test/command_callback/test_rustc_command_callback.vader @@ -1,37 +1,21 @@ Before: - Save g:ale_rust_rustc_options - - unlet! g:ale_rust_rustc_options - - runtime ale_linters/rust/rustc.vim - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('rust', 'rustc') After: - Restore - - unlet! b:ale_rust_rustc_options - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual - \ 'rustc --error-format=json -Z no-trans -', - \ ale_linters#rust#rustc#RustcCommand(bufnr('')) + AssertLinter 'rustc', 'rustc --error-format=json -Z no-trans -' Execute(The options should be configurable): let b:ale_rust_rustc_options = '--foo' - AssertEqual - \ 'rustc --error-format=json --foo -', - \ ale_linters#rust#rustc#RustcCommand(bufnr('')) + AssertLinter 'rustc', 'rustc --error-format=json --foo -' Execute(Some default paths should be included when the project is a Cargo project): call ale#test#SetFilename('cargo_paths/test.rs') - AssertEqual - \ 'rustc --error-format=json -Z no-trans' + AssertLinter 'rustc', 'rustc --error-format=json -Z no-trans' \ . ' -L ' . ale#Escape(ale#path#GetAbsPath(g:dir, 'cargo_paths/target/debug/deps')) \ . ' -L ' . ale#Escape(ale#path#GetAbsPath(g:dir, 'cargo_paths/target/release/deps')) - \ . ' -', - \ ale_linters#rust#rustc#RustcCommand(bufnr('')) + \ . ' -' diff --git a/test/command_callback/test_sasslint_command_callback.vader b/test/command_callback/test_sasslint_command_callback.vader index 1db7e5fb..4d7cc4c7 100644 --- a/test/command_callback/test_sasslint_command_callback.vader +++ b/test/command_callback/test_sasslint_command_callback.vader @@ -1,12 +1,11 @@ Before: - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('sass', 'sasslint') call ale#test#SetFilename('test.sass') After: - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The default sasslint command should be correct): - AssertEqual + AssertLinter 'sass-lint', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . ale#Escape('sass-lint') . ' -v -q -f compact %t', - \ ale#handlers#sasslint#GetCommand(bufnr('')) + \ . ale#Escape('sass-lint') . ' -v -q -f compact %t' diff --git a/test/command_callback/test_scalac_command_callback.vader b/test/command_callback/test_scalac_command_callback.vader index 6bb31b3f..115731b3 100644 --- a/test/command_callback/test_scalac_command_callback.vader +++ b/test/command_callback/test_scalac_command_callback.vader @@ -1,17 +1,13 @@ Before: - runtime ale_linters/scala/scalac.vim + call ale#assert#SetUpLinterTest('scala', 'scalac') After: - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Given scala(An empty Scala file): Execute(The default executable and command should be correct): - AssertEqual 'scalac', ale_linters#scala#scalac#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('scalac') . ' -Ystop-after:parser %t', - \ ale_linters#scala#scalac#GetCommand(bufnr('')) + AssertLinter 'scalac', ale#Escape('scalac') . ' -Ystop-after:parser %t' Given scala.sbt(An empty SBT file): Execute(scalac should not be run for sbt files): - AssertEqual '', ale_linters#scala#scalac#GetExecutable(bufnr('')) - AssertEqual '', ale_linters#scala#scalac#GetCommand(bufnr('')) + AssertLinter '', '' diff --git a/test/command_callback/test_scalastyle_command_callback.vader b/test/command_callback/test_scalastyle_command_callback.vader index 953d57b3..3c28f7a3 100644 --- a/test/command_callback/test_scalastyle_command_callback.vader +++ b/test/command_callback/test_scalastyle_command_callback.vader @@ -1,36 +1,34 @@ Before: - Save g:ale_scala_scalastyle_options - Save g:ale_scalastyle_config_loc - - unlet! g:ale_scala_scalastyle_options - unlet! g:ale_scalastyle_config_loc - - runtime ale_linters/scala/scalastyle.vim + call ale#assert#SetUpLinterTest('scala', 'scalastyle') After: - Restore - + unlet! g:ale_scalastyle_config_loc call ale#linter#Reset() Execute(Should return the correct default command): - AssertEqual - \ 'scalastyle %t', - \ ale_linters#scala#scalastyle#GetCommand(bufnr('')) + AssertLinter 'scalastyle', 'scalastyle %t' Execute(Should allow using a custom config file): + let b:ale_scala_scalastyle_config = '/dooper/config.xml' + + AssertLinter 'scalastyle', 'scalastyle' + \ . ' --config ' . ale#Escape('/dooper/config.xml') + \ . ' %t' + +Execute(Should support a legacy option for the scalastyle config): + unlet! g:ale_scala_scalastyle_config let g:ale_scalastyle_config_loc = '/dooper/config.xml' - AssertEqual - \ 'scalastyle' - \ . ' --config ' . ale#Escape('/dooper/config.xml') - \ . ' %t', - \ ale_linters#scala#scalastyle#GetCommand(bufnr('')) + call ale#linter#Reset() + runtime ale_linters/scala/scalastyle.vim + + AssertLinter 'scalastyle', 'scalastyle' + \ . ' --config ' . ale#Escape('/dooper/config.xml') + \ . ' %t' Execute(Should allow using custom options): - let g:ale_scala_scalastyle_options = '--warnings false --quiet true' + let b:ale_scala_scalastyle_options = '--warnings false --quiet true' - AssertEqual - \ 'scalastyle' + AssertLinter 'scalastyle', 'scalastyle' \ . ' --warnings false --quiet true' - \ . ' %t', - \ ale_linters#scala#scalastyle#GetCommand(bufnr('')) + \ . ' %t' diff --git a/test/command_callback/test_shellcheck_command_callback.vader b/test/command_callback/test_shellcheck_command_callback.vader index 68694b67..23684026 100644 --- a/test/command_callback/test_shellcheck_command_callback.vader +++ b/test/command_callback/test_shellcheck_command_callback.vader @@ -1,129 +1,95 @@ Before: - Save g:ale_sh_shellcheck_exclusions - Save g:ale_sh_shellcheck_executable - Save g:ale_sh_shellcheck_options - - unlet! g:ale_sh_shellcheck_exclusions - unlet! g:ale_sh_shellcheck_executable - unlet! g:ale_sh_shellcheck_options - - runtime ale_linters/sh/shellcheck.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('sh', 'shellcheck') call ale#test#SetFilename('test.sh') let b:prefix = 'cd ' . ale#Escape(ale#path#Simplify(g:dir)) . ' && ' let b:suffix = ' -f gcc -' After: - Restore - - unlet! b:ale_sh_shellcheck_exclusions - unlet! b:ale_sh_shellcheck_executable - unlet! b:ale_sh_shellcheck_options unlet! b:is_bash unlet! b:prefix - - call ale#test#RestoreDirectory() - - call ale#linter#Reset() + unlet! b:suffix + call ale#assert#TearDownLinterTest() Execute(The default shellcheck command should be correct): - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) + AssertLinter 'shellcheck', b:prefix . ale#Escape('shellcheck') . b:suffix Execute(The shellcheck command should accept options): let b:ale_sh_shellcheck_options = '--foobar' - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . ' --foobar' . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) + AssertLinter 'shellcheck', + \ b:prefix . ale#Escape('shellcheck') . ' --foobar' . b:suffix Execute(The shellcheck command should accept options and exclusions): let b:ale_sh_shellcheck_options = '--foobar' let b:ale_sh_shellcheck_exclusions = 'foo,bar' - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . ' --foobar -e foo,bar' . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) + AssertLinter 'shellcheck', + \ b:prefix . ale#Escape('shellcheck') . ' --foobar -e foo,bar' . b:suffix Execute(The shellcheck command should include the dialect): let b:is_bash = 1 - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . ' -s bash' . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) + AssertLinter 'shellcheck', + \ b:prefix . ale#Escape('shellcheck') . ' -s bash' . b:suffix Execute(The shellcheck command should include the dialect before options and exclusions): let b:is_bash = 1 let b:ale_sh_shellcheck_options = '--foobar' let b:ale_sh_shellcheck_exclusions = 'foo,bar' - AssertEqual - \ b:prefix - \ . ale#Escape('shellcheck') + AssertLinter 'shellcheck', b:prefix . ale#Escape('shellcheck') \ . ' -s bash --foobar -e foo,bar' - \ . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) - -Execute(The VersionCheck function should return the --version command): - AssertEqual - \ ale#Escape('shellcheck') . ' --version', - \ ale_linters#sh#shellcheck#VersionCheck(bufnr('')) - - let g:ale_sh_shellcheck_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . ' --version', - \ ale_linters#sh#shellcheck#VersionCheck(bufnr('')) + \ . b:suffix Execute(The -x option should be added when the version is new enough): - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . ' -x' . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), [ - \ 'ShellCheck - shell script analysis tool', - \ 'version: 0.4.4', - \ 'license: GNU General Public License, version 3', - \ 'website: http://www.shellcheck.net', - \ ]) + AssertLinter 'shellcheck', [ + \ ale#Escape('shellcheck') . ' --version', + \ b:prefix . ale#Escape('shellcheck') . b:suffix, + \] - " We should cache the version check - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . ' -x' . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) - - AssertEqual '', ale_linters#sh#shellcheck#VersionCheck(bufnr('')) - -Execute(The version check shouldn't be run again for new versions): - call ale_linters#sh#shellcheck#GetCommand(bufnr(''), [ + WithChainResults [ \ 'ShellCheck - shell script analysis tool', \ 'version: 0.4.4', \ 'license: GNU General Public License, version 3', \ 'website: http://www.shellcheck.net', - \]) - -Execute(The -x option should not be added when the version is too old): - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), [ - \ 'ShellCheck - shell script analysis tool', - \ 'version: 0.3.9', - \ 'license: GNU General Public License, version 3', - \ 'website: http://www.shellcheck.net', - \ ]) + \] + AssertLinter 'shellcheck', [ + \ ale#Escape('shellcheck') . ' --version', + \ b:prefix . ale#Escape('shellcheck') . ' -x' . b:suffix, + \] " We should cache the version check - AssertEqual - \ b:prefix . ale#Escape('shellcheck') . b:suffix, - \ ale_linters#sh#shellcheck#GetCommand(bufnr(''), []) + WithChainResults [] + AssertLinter 'shellcheck', [ + \ '', + \ b:prefix . ale#Escape('shellcheck') . ' -x' . b:suffix, + \] -Execute(The version check shouldn't be run again for old versions): - call ale_linters#sh#shellcheck#GetCommand(bufnr(''), [ +Execute(The -x option should not be added when the version is too old): + WithChainResults [ \ 'ShellCheck - shell script analysis tool', \ 'version: 0.3.9', \ 'license: GNU General Public License, version 3', \ 'website: http://www.shellcheck.net', - \]) + \] + AssertLinter 'shellcheck', [ + \ ale#Escape('shellcheck') . ' --version', + \ b:prefix . ale#Escape('shellcheck') . b:suffix, + \] - AssertEqual '', ale_linters#sh#shellcheck#VersionCheck(bufnr('')) +Execute(The version check shouldn't be run again for old versions): + WithChainResults [ + \ 'ShellCheck - shell script analysis tool', + \ 'version: 0.3.9', + \ 'license: GNU General Public License, version 3', + \ 'website: http://www.shellcheck.net', + \] + AssertLinter 'shellcheck', [ + \ ale#Escape('shellcheck') . ' --version', + \ b:prefix . ale#Escape('shellcheck') . b:suffix, + \] + AssertLinter 'shellcheck', [ + \ '', + \ b:prefix . ale#Escape('shellcheck') . b:suffix, + \] diff --git a/test/command_callback/test_slimlint_command_callback.vader b/test/command_callback/test_slimlint_command_callback.vader index 38588a1f..3522c2fa 100644 --- a/test/command_callback/test_slimlint_command_callback.vader +++ b/test/command_callback/test_slimlint_command_callback.vader @@ -1,39 +1,19 @@ Before: - runtime ale_linters/slim/slimlint.vim - + call ale#assert#SetUpLinterTest('slim', 'slimlint') let g:default_command = 'slim-lint %t' - call ale#test#SetDirectory('/testplugin/test/command_callback') - After: - Restore - - unlet! g:default_command - unlet! b:conf - - call ale#linter#Reset() - call ale#test#RestoreDirectory() + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual g:default_command, ale_linters#slim#slimlint#GetCommand(bufnr('')) + AssertLinter 'slim-lint', 'slim-lint %t' Execute(The command should have the .rubocop.yml prepended as an env var if one exists): call ale#test#SetFilename('../slimlint-test-files/subdir/file.slim') - let b:conf = ale#path#Simplify(g:dir . '/../slimlint-test-files/.rubocop.yml') - - if has('win32') - " Windows uses 'set var=... && command' - AssertEqual - \ 'set SLIM_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf) - \ . ' && ' . g:default_command, - \ ale_linters#slim#slimlint#GetCommand(bufnr('')) - else - " Unix uses 'var=... command' - AssertEqual - \ 'SLIM_LINT_RUBOCOP_CONF=' - \ . ale#Escape(b:conf) - \ . ' ' . g:default_command, - \ ale_linters#slim#slimlint#GetCommand(bufnr('')) - endif + AssertLinter 'slim-lint', + \ ale#Env( + \ 'SLIM_LINT_RUBOCOP_CONF', + \ ale#path#Simplify(g:dir . '/../slimlint-test-files/.rubocop.yml') + \ ) + \ . 'slim-lint %t' diff --git a/test/command_callback/test_standard_command_callback.vader b/test/command_callback/test_standard_command_callback.vader index 3dee2856..a47e2ec9 100644 --- a/test/command_callback/test_standard_command_callback.vader +++ b/test/command_callback/test_standard_command_callback.vader @@ -1,28 +1,10 @@ Before: - Save g:ale_javascript_standard_executable - Save g:ale_javascript_standard_use_global - Save g:ale_javascript_standard_options - - unlet! b:executable - unlet! g:ale_javascript_standard_executable - unlet! b:ale_javascript_standard_executable - unlet! g:ale_javascript_standard_use_global - unlet! g:ale_javascript_standard_options - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('javascript', 'standard') call ale#test#SetFilename('testfile.js') - - runtime ale_linters/javascript/standard.vim + unlet! b:executable After: - Restore - - unlet! b:executable - - call ale#test#SetFilename('test.txt') - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(bin/cmd.js paths should be preferred): call ale#test#SetFilename('standard-test-files/with-cmd/testfile.js') @@ -32,15 +14,10 @@ Execute(bin/cmd.js paths should be preferred): \ . '/standard-test-files/with-cmd/node_modules/standard/bin/cmd.js' \) - AssertEqual - \ b:executable, - \ ale_linters#javascript#standard#GetExecutable(bufnr('')) - - AssertEqual + AssertLinter b:executable, \ (has('win32') ? 'node.exe ' : '') \ . ale#Escape(b:executable) - \ . ' --stdin %s', - \ ale_linters#javascript#standard#GetCommand(bufnr('')) + \ . ' --stdin %s' Execute(.bin directories should be used too): call ale#test#SetFilename('standard-test-files/with-bin/testfile.js') @@ -50,38 +27,17 @@ Execute(.bin directories should be used too): \ . '/standard-test-files/with-bin/node_modules/.bin/standard' \) - AssertEqual - \ b:executable, - \ ale_linters#javascript#standard#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape(b:executable) - \ . ' --stdin %s', - \ ale_linters#javascript#standard#GetCommand(bufnr('')) + AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin %s' Execute(The global executable should be used otherwise): - AssertEqual - \ 'standard', - \ ale_linters#javascript#standard#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('standard') . ' --stdin %s', - \ ale_linters#javascript#standard#GetCommand(bufnr('')) + AssertLinter 'standard', ale#Escape('standard') . ' --stdin %s' Execute(The global executable should be configurable): let b:ale_javascript_standard_executable = 'foobar' - AssertEqual - \ 'foobar', - \ ale_linters#javascript#standard#GetExecutable(bufnr('')) - - AssertEqual - \ ale#Escape('foobar') . ' --stdin %s', - \ ale_linters#javascript#standard#GetCommand(bufnr('')) + AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin %s' Execute(The options should be configurable): let b:ale_javascript_standard_options = '--wat' - AssertEqual - \ ale#Escape('standard') . ' --wat --stdin %s', - \ ale_linters#javascript#standard#GetCommand(bufnr('')) + AssertLinter 'standard', ale#Escape('standard') . ' --wat --stdin %s' diff --git a/test/command_callback/test_staticcheck_command_callback.vader b/test/command_callback/test_staticcheck_command_callback.vader index e9628eb6..918c12a0 100644 --- a/test/command_callback/test_staticcheck_command_callback.vader +++ b/test/command_callback/test_staticcheck_command_callback.vader @@ -1,41 +1,26 @@ Before: - Save b:ale_go_staticcheck_options - Save b:ale_go_staticcheck_lint_package - - let b:ale_go_staticcheck_options = '' - let b:ale_go_staticcheck_lint_package = 0 - - runtime ale_linters/go/staticcheck.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('go', 'staticcheck') call ale#test#SetFilename('test.go') After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The staticcheck callback should return the right defaults): - AssertEqual + AssertLinter 'staticcheck', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . 'staticcheck ' - \ . ale#Escape(expand('%' . ':t')), - \ ale_linters#go#staticcheck#GetCommand(bufnr('')) + \ . ale#Escape(expand('%' . ':t')) Execute(The staticcheck callback should use configured options): let b:ale_go_staticcheck_options = '-test' - AssertEqual + AssertLinter 'staticcheck', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . 'staticcheck ' - \ . '-test ' . ale#Escape(expand('%' . ':t')), - \ ale_linters#go#staticcheck#GetCommand(bufnr('')) + \ . '-test ' . ale#Escape(expand('%' . ':t')) Execute(The staticcheck `lint_package` option should use the correct command): let b:ale_go_staticcheck_lint_package = 1 - AssertEqual - \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' - \ . 'staticcheck .', - \ ale_linters#go#staticcheck#GetCommand(bufnr('')) + AssertLinter 'staticcheck', + \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && staticcheck .', diff --git a/test/command_callback/test_swaglint_command_callback.vader b/test/command_callback/test_swaglint_command_callback.vader index 51a10094..fe8fb722 100644 --- a/test/command_callback/test_swaglint_command_callback.vader +++ b/test/command_callback/test_swaglint_command_callback.vader @@ -1,43 +1,29 @@ Before: - runtime ale_linters/yaml/swaglint.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('yaml', 'swaglint') After: - let g:ale_yaml_swaglint_executable = 'swaglint' - let g:ale_yaml_swaglint_use_global = 0 - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The yaml swaglint command callback should return the correct default string): - AssertEqual 'swaglint', - \ ale_linters#yaml#swaglint#GetExecutable(bufnr('')) - AssertEqual 'swaglint -r compact --stdin', - \ ale_linters#yaml#swaglint#GetCommand(bufnr('')) + AssertLinter 'swaglint', 'swaglint -r compact --stdin' Execute(The yaml swaglint command callback should be configurable): let g:ale_yaml_swaglint_executable = '~/.local/bin/swaglint' - AssertEqual '~/.local/bin/swaglint', - \ ale_linters#yaml#swaglint#GetExecutable(bufnr('')) - AssertEqual '~/.local/bin/swaglint -r compact --stdin', - \ ale_linters#yaml#swaglint#GetCommand(bufnr('')) + + AssertLinter '~/.local/bin/swaglint', + \ '~/.local/bin/swaglint -r compact --stdin' Execute(The yaml swaglint command callback should allow a global installation to be used): let g:ale_yaml_swaglint_executable = '/usr/local/bin/swaglint' let g:ale_yaml_swaglint_use_global = 1 - AssertEqual '/usr/local/bin/swaglint', - \ ale_linters#yaml#swaglint#GetExecutable(bufnr('')) - AssertEqual '/usr/local/bin/swaglint -r compact --stdin', - \ ale_linters#yaml#swaglint#GetCommand(bufnr('')) + + AssertLinter '/usr/local/bin/swaglint', + \ '/usr/local/bin/swaglint -r compact --stdin' Execute(The yaml swaglint command callback should allow a local installation to be used): call ale#test#SetFilename('swaglint_paths/docs/swagger.yaml') - AssertEqual + AssertLinter \ ale#path#Simplify(g:dir . '/swaglint_paths/node_modules/.bin/swaglint'), - \ ale_linters#yaml#swaglint#GetExecutable(bufnr('')) - - AssertEqual \ ale#path#Simplify(g:dir . '/swaglint_paths/node_modules/.bin/swaglint') - \ . ' -r compact --stdin', - \ ale_linters#yaml#swaglint#GetCommand(bufnr('')) + \ . ' -r compact --stdin' diff --git a/test/command_callback/test_terraform_tflint_command_callback.vader b/test/command_callback/test_terraform_tflint_command_callback.vader index a4ae56b0..c32d9bcf 100644 --- a/test/command_callback/test_terraform_tflint_command_callback.vader +++ b/test/command_callback/test_terraform_tflint_command_callback.vader @@ -1,30 +1,19 @@ Before: - Save g:ale_terraform_tflint_executable - Save g:ale_terraform_tflint_options - - runtime ale_linters/terraform/tflint.vim + call ale#assert#SetUpLinterTest('terraform', 'tflint') After: - Restore + call ale#assert#TearDownLinterTest() - call ale#linter#Reset() +Execute(The default command should be correct): + AssertLinter 'tflint', ale#Escape('tflint') . ' -f json %t' Execute(The default executable should be configurable): - AssertEqual 'tflint', ale_linters#terraform#tflint#GetExecutable(bufnr('')) + let b:ale_terraform_tflint_executable = 'asdf' - let g:ale_terraform_tflint_executable = 'asdf' + AssertLinter 'asdf', ale#Escape('asdf') . ' -f json %t' - AssertEqual 'asdf', ale_linters#terraform#tflint#GetExecutable(bufnr('')) - -Execute(The default command should be good): - let g:ale_terraform_tflint_executable = 'tflint' - AssertEqual - \ ale#Escape('tflint') . ' -f json %t', - \ ale_linters#terraform#tflint#GetCommand(bufnr('')) - -Execute(Overriding things should work): +Execute(Overriding options should work): let g:ale_terraform_tflint_executable = 'fnord' let g:ale_terraform_tflint_options = '--whatever' - AssertEqual - \ ale#Escape('fnord') . ' --whatever -f json %t', - \ ale_linters#terraform#tflint#GetCommand(bufnr('')) + + AssertLinter 'fnord', ale#Escape('fnord') . ' --whatever -f json %t' diff --git a/test/command_callback/test_textlint_command_callbacks.vader b/test/command_callback/test_textlint_command_callbacks.vader index 212f34d3..794c7fde 100644 --- a/test/command_callback/test_textlint_command_callbacks.vader +++ b/test/command_callback/test_textlint_command_callbacks.vader @@ -1,85 +1,65 @@ " Author: januswel, w0rp Before: + " This is just one language for the linter. + call ale#assert#SetUpLinterTest('markdown', 'textlint') + + " The configuration is shared between many languages. Save g:ale_textlint_executable Save g:ale_textlint_use_global Save g:ale_textlint_options - unlet! g:ale_textlint_executable + let g:ale_textlint_executable = 'textlint' + let g:ale_textlint_use_global = 0 + let g:ale_textlint_options = '' + unlet! b:ale_textlint_executable - unlet! g:ale_textlint_use_global unlet! b:ale_textlint_use_global - unlet! g:ale_textlint_options unlet! b:ale_textlint_options - runtime autoload/ale/handlers/textlint.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') - After: - Restore - unlet! b:command_tail unlet! b:ale_textlint_executable unlet! b:ale_textlint_use_global unlet! b:ale_textlint_options - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() + +Execute(The default command should be correct): + AssertLinter 'textlint', + \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s' Execute(The executable should be configurable): - AssertEqual 'textlint', ale#handlers#textlint#GetExecutable(bufnr('')) - let b:ale_textlint_executable = 'foobar' - AssertEqual 'foobar', ale#handlers#textlint#GetExecutable(bufnr('')) - -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) - - let b:ale_textlint_executable = 'foobar' - - AssertEqual - \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) - \ + AssertLinter 'foobar', + \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s' Execute(The options should be configurable): let b:ale_textlint_options = '--something' - AssertEqual - \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) + AssertLinter 'textlint', + \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s' Execute(The local executable from .bin should be used if available): call ale#test#SetFilename('textlint_paths/with_bin_path/foo.txt') - AssertEqual + AssertLinter \ ale#path#Simplify(g:dir . '/textlint_paths/with_bin_path/node_modules/.bin/textlint'), - \ ale#handlers#textlint#GetExecutable(bufnr('')) - - AssertEqual \ ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_bin_path/node_modules/.bin/textlint')) - \ . ' -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) + \ . ' -f json --stdin --stdin-filename %s' Execute(The local executable from textlint/bin should be used if available): call ale#test#SetFilename('textlint_paths/with_textlint_bin_path/foo.txt') - AssertEqual - \ ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#handlers#textlint#GetExecutable(bufnr('')) - if has('win32') - AssertEqual + AssertLinter + \ ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), \ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) + \ . ' -f json --stdin --stdin-filename %s' else - AssertEqual + AssertLinter + \ ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), \ ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s', - \ ale#handlers#textlint#GetCommand(bufnr('')) + \ . ' -f json --stdin --stdin-filename %s' endif diff --git a/test/command_callback/test_thrift_command_callback.vader b/test/command_callback/test_thrift_command_callback.vader index 7d4e436c..ea217259 100644 --- a/test/command_callback/test_thrift_command_callback.vader +++ b/test/command_callback/test_thrift_command_callback.vader @@ -1,13 +1,6 @@ Before: - Save g:ale_thrift_thrift_executable - Save g:ale_thrift_thrift_generators - Save g:ale_thrift_thrift_includes - Save g:ale_thrift_thrift_options - - unlet! b:ale_thrift_thrift_executable - unlet! b:ale_thrift_thrift_generators - unlet! b:ale_thrift_thrift_includes - unlet! b:ale_thrift_thrift_options + call ale#assert#SetUpLinterTest('thrift', 'thrift') + let b:suffix = ' -out ' . ale#Escape('TEMP_DIR') . ' %t' function! GetCommand(buffer) abort call ale#engine#InitBufferInfo(a:buffer) @@ -24,62 +17,37 @@ Before: return join(l:split_command) endfunction - runtime ale_linters/thrift/thrift.vim - After: - Restore - + unlet! b:suffix delfunction GetCommand - unlet! b:ale_thrift_thrift_executable - unlet! b:ale_thrift_thrift_generators - unlet! b:ale_thrift_thrift_includes - unlet! b:ale_thrift_thrift_options - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() + +Execute(The default command should be correct): + AssertLinter 'thrift', ale#Escape('thrift') . ' --gen cpp -strict' . b:suffix Execute(The executable should be configurable): - AssertEqual 'thrift', ale_linters#thrift#thrift#GetExecutable(bufnr('')) - let b:ale_thrift_thrift_executable = 'foobar' - AssertEqual 'foobar', ale_linters#thrift#thrift#GetExecutable(bufnr('')) -Execute(The executable should be used in the command): - AssertEqual - \ ale#Escape('thrift') . ' --gen cpp -strict -out TEMP %t', - \ GetCommand(bufnr('%')) - - let b:ale_thrift_thrift_executable = 'foobar' - AssertEqual - \ ale#Escape('foobar') . ' --gen cpp -strict -out TEMP %t', - \ GetCommand(bufnr('%')) + AssertLinter 'foobar', ale#Escape('foobar') . ' --gen cpp -strict' . b:suffix Execute(The list of generators should be configurable): let b:ale_thrift_thrift_generators = ['java', 'py:dynamic'] - AssertEqual - \ ale#Escape('thrift') . ' --gen java --gen py:dynamic -strict -out TEMP %t', - \ GetCommand(bufnr('%')) + AssertLinter 'thrift', ale#Escape('thrift') + \ . ' --gen java --gen py:dynamic -strict' . b:suffix let b:ale_thrift_thrift_generators = [] - AssertEqual - \ ale#Escape('thrift') . ' --gen cpp -strict -out TEMP %t', - \ GetCommand(bufnr('%')) + AssertLinter 'thrift', ale#Escape('thrift') . ' --gen cpp -strict' . b:suffix Execute(The list of include paths should be configurable): let b:ale_thrift_thrift_includes = ['included/path'] - AssertEqual - \ ale#Escape('thrift') - \ . ' --gen cpp' - \ . ' -I included/path' - \ . ' -strict -out TEMP %t', - \ GetCommand(bufnr('%')) + AssertLinter 'thrift', ale#Escape('thrift') + \ . ' --gen cpp -I included/path -strict' . b:suffix Execute(The string of compiler options should be configurable): let b:ale_thrift_thrift_options = '-strict --allow-64bit-consts' - AssertEqual - \ ale#Escape('thrift') - \ . ' --gen cpp -strict --allow-64bit-consts' - \ . ' -out TEMP %t', - \ GetCommand(bufnr('%')) + AssertLinter 'thrift', ale#Escape('thrift') + \ . ' --gen cpp -strict --allow-64bit-consts' . b:suffix diff --git a/test/command_callback/test_tslint_command_callback.vader b/test/command_callback/test_tslint_command_callback.vader index 0c2f3abf..bd8a12ec 100644 --- a/test/command_callback/test_tslint_command_callback.vader +++ b/test/command_callback/test_tslint_command_callback.vader @@ -1,43 +1,19 @@ Before: - call ale#assert#Init() - - Save g:ale_typescript_tslint_executable - Save g:ale_typescript_tslint_config_path - Save g:ale_typescript_tslint_rules_dir - Save g:ale_typescript_tslint_use_global - - unlet! g:ale_typescript_tslint_executable - unlet! g:ale_typescript_tslint_config_path - unlet! g:ale_typescript_tslint_rules_dir - unlet! g:ale_typescript_tslint_use_global - - runtime ale_linters/typescript/tslint.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') + call ale#assert#SetUpLinterTest('typescript', 'tslint') call ale#test#SetFilename('test.ts') After: - Restore - - unlet! b:ale_typescript_tslint_executable - unlet! b:ale_typescript_tslint_config_path - unlet! b:ale_typescript_tslint_rules_dir - unlet! b:ale_typescript_tslint_use_global - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The default tslint command should be correct): - AssertLinter - \ 'tslint', + AssertLinter 'tslint', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('tslint') . ' --format json %t' Execute(The rules directory option should be included if set): let b:ale_typescript_tslint_rules_dir = '/foo/bar' - AssertLinter - \ 'tslint', + AssertLinter 'tslint', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('tslint') . ' --format json' \ . ' -r ' . ale#Escape('/foo/bar') @@ -46,7 +22,6 @@ Execute(The rules directory option should be included if set): Execute(The executable should be configurable and escaped): let b:ale_typescript_tslint_executable = 'foo bar' - AssertLinter - \ 'foo bar', + AssertLinter 'foo bar', \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('foo bar') . ' --format json %t' diff --git a/test/command_callback/test_vint_command_callback.vader b/test/command_callback/test_vint_command_callback.vader index ddf39f31..e0051f26 100644 --- a/test/command_callback/test_vint_command_callback.vader +++ b/test/command_callback/test_vint_command_callback.vader @@ -1,39 +1,23 @@ Before: - Save g:ale_vim_vint_executable - - unlet! g:ale_vim_vint_executable - - runtime ale_linters/vim/vint.vim - + call ale#assert#SetUpLinterTest('vim', 'vint') let b:command_tail = (has('nvim') ? ' --enable-neovim' : '') \ . ' -f "{file_path}:{line_number}:{column_number}: {severity}: {description} (see {reference})" %t' - call ale#semver#ResetVersionCache() After: - Restore - - call ale#linter#Reset() - call ale#semver#ResetVersionCache() - unlet! b:bin_dir unlet! b:executable + call ale#assert#TearDownLinterTest() Execute(The default command should be correct): - AssertEqual 'vint', ale_linters#vim#vint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'vint', [ \ ale#Escape('vint') .' --version', - \ ale_linters#vim#vint#VersionCommand(bufnr('')) - AssertEqual \ ale#Escape('vint') .' -s --no-color' . b:command_tail, - \ ale_linters#vim#vint#GetCommand(bufnr(''), []) + \] Execute(The executable should be configurable): let g:ale_vim_vint_executable = 'foobar' - AssertEqual 'foobar', ale_linters#vim#vint#GetExecutable(bufnr('')) - AssertEqual + AssertLinter 'foobar', [ \ ale#Escape('foobar') .' --version', - \ ale_linters#vim#vint#VersionCommand(bufnr('')) - AssertEqual \ ale#Escape('foobar') .' -s --no-color' . b:command_tail, - \ ale_linters#vim#vint#GetCommand(bufnr(''), []) + \] diff --git a/test/command_callback/test_write_good_command_callback.vader b/test/command_callback/test_write_good_command_callback.vader index 4b5ed7b7..9ffa39bd 100644 --- a/test/command_callback/test_write_good_command_callback.vader +++ b/test/command_callback/test_write_good_command_callback.vader @@ -1,6 +1,8 @@ Before: - call ale#assert#Init() + " This is just one example of a language using the linter. + call ale#assert#SetUpLinterTest('markdown', 'writegood') + " The options are shared between many languages. Save g:ale_writegood_options Save g:ale_writegood_executable Save g:ale_writegood_use_global @@ -9,18 +11,11 @@ Before: unlet! g:ale_writegood_executable unlet! g:ale_writegood_use_global - runtime ale_linters/markdown/write-good.vim - - call ale#test#SetDirectory('/testplugin/test/command_callback') call ale#test#SetFilename('testfile.txt') - call ale#handlers#writegood#ResetOptions() After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The global executable should be used when the local one cannot be found): AssertLinter diff --git a/test/command_callback/test_xmllint_command_callback.vader b/test/command_callback/test_xmllint_command_callback.vader index 12ca15de..5a2377c2 100644 --- a/test/command_callback/test_xmllint_command_callback.vader +++ b/test/command_callback/test_xmllint_command_callback.vader @@ -1,25 +1,20 @@ Before: - runtime ale_linters/xml/xmllint.vim + call ale#assert#SetUpLinterTest('xml', 'xmllint') After: - let g:ale_xml_xmllint_options = '' - let g:ale_xml_xmllint_executable = 'xmllint' - - call ale#linter#Reset() + call ale#assert#TearDownLinterTest() Execute(The xml xmllint command callback should return the correct default string): - AssertEqual ale#Escape('xmllint') . ' --noout -', - \ join(split(ale_linters#xml#xmllint#GetCommand(1))) + AssertLinter 'xmllint', ale#Escape('xmllint') . ' --noout -' Execute(The xml xmllint command callback should let you set options): let g:ale_xml_xmllint_options = '--xinclude --postvalid' - AssertEqual ale#Escape('xmllint') . ' --xinclude --postvalid --noout -', - \ join(split(ale_linters#xml#xmllint#GetCommand(1))) + AssertLinter 'xmllint', + \ ale#Escape('xmllint') . ' --xinclude --postvalid --noout -' Execute(The xmllint executable should be configurable): let g:ale_xml_xmllint_executable = '~/.local/bin/xmllint' - AssertEqual '~/.local/bin/xmllint', ale_linters#xml#xmllint#GetExecutable(1) - AssertEqual ale#Escape('~/.local/bin/xmllint') . ' --noout -', - \ join(split(ale_linters#xml#xmllint#GetCommand(1))) + AssertLinter '~/.local/bin/xmllint', + \ ale#Escape('~/.local/bin/xmllint') . ' --noout -' diff --git a/test/fixers/test_tslint_fixer_callback.vader b/test/fixers/test_tslint_fixer_callback.vader index 5bfafe24..aa9c0322 100644 --- a/test/fixers/test_tslint_fixer_callback.vader +++ b/test/fixers/test_tslint_fixer_callback.vader @@ -2,13 +2,16 @@ Before: Save g:ale_typescript_tslint_executable Save g:ale_typescript_tslint_config_path - let g:ale_typescript_tslint_executable = 'xxxinvalid' - let g:ale_typescript_tslint_config_path = 'tslint.json' + unlet! g:ale_typescript_tslint_executable + unlet! g:ale_typescript_tslint_config_path + unlet! b:ale_typescript_tslint_executable + unlet! b:ale_typescript_tslint_config_path - call ale#test#SetDirectory('/testplugin/test/fixers') + call ale#handlers#tslint#InitVariables() + + call ale#test#SetDirectory('/testplugin/test/command_callback') silent cd .. silent cd command_callback - let g:dir = getcwd() After: Restore @@ -16,12 +19,13 @@ After: call ale#test#RestoreDirectory() Execute(The tslint callback should return the correct default values): + let g:ale_typescript_tslint_config_path = 'tslint.json' call ale#test#SetFilename('../prettier-test-files/testfile.ts') AssertEqual \ { \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_typescript_tslint_executable) + \ 'command': ale#Escape('tslint') \ . ' -c ' . ale#Escape('tslint.json') \ . ' --fix %t', \ }, @@ -34,8 +38,8 @@ Execute(The tslint callback should include custom tslint config option): AssertEqual \ { \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_typescript_tslint_executable) - \ . ' -c ' . ale#Escape(g:ale_typescript_tslint_config_path) + \ 'command': ale#Escape('tslint') + \ . ' -c ' . ale#Escape('.tslintrc') \ . ' --fix %t', \ }, \ ale#fixers#tslint#Fix(bufnr('')) diff --git a/test/test_ale_lint_command.vader b/test/test_ale_lint_command.vader index 15f1f054..6434e45f 100644 --- a/test/test_ale_lint_command.vader +++ b/test/test_ale_lint_command.vader @@ -38,6 +38,7 @@ After: Restore unlet! g:expected_loclist + unlet! b:i call ale#engine#Cleanup(bufnr('')) call ale#linter#Reset() @@ -54,14 +55,21 @@ Given foobar (Some imaginary filetype): Execute(ALELint should run the linters): AssertEqual 'foobar', &filetype - ALELint - call ale#engine#WaitForJobs(2000) + " Try to run the linter a few times, as it fails randomly in NeoVim. + for b:i in range(5) + ALELint + call ale#engine#WaitForJobs(2000) - if !has('nvim') - " Sleep so the delayed list function can run. - " This breaks the tests in NeoVim for some reason. - sleep 1ms - endif + if !has('nvim') + " Sleep so the delayed list function can run. + " This breaks the tests in NeoVim for some reason. + sleep 1ms + endif + + if getloclist(0) == g:expected_loclist + break + endif + endfor " Check the loclist AssertEqual g:expected_loclist, getloclist(0) diff --git a/test/test_env_function.vader b/test/test_env_function.vader new file mode 100644 index 00000000..856a3f57 --- /dev/null +++ b/test/test_env_function.vader @@ -0,0 +1,8 @@ +Execute(ale#Env should produce the correct syntax): + if has('win32') + AssertEqual 'set name=xxx && ', ale#Env('name', 'xxx') + AssertEqual 'set name="foo bar" && ', ale#Env('name', 'foo bar') + else + AssertEqual 'name=''xxx'' ', ale#Env('name', 'xxx') + AssertEqual 'name=''foo bar'' ', ale#Env('name', 'foo bar') + endif