Before: call ale#assert#SetUpLinterTest('java', 'javac') call ale#test#SetFilename('dummy.java') let g:cp_sep = has('unix') ? ':' : ';' let g:prefix = ale#path#CdString(expand('%:p:h')) \ . ale#Escape('javac') . ' -Xlint' function! GetCommand(previous_output) abort let l:command = ale_linters#java#javac#GetCommand( \ bufnr(''), \ a:previous_output \) let l:split_command = split(l:command) let l:index = index(l:split_command, '-d') let l:split_command[l:index + 1] = 'TEMP' return join(l:split_command) endfunction After: unlet! g:cp_sep unlet! g:prefix delfunction GetCommand call ale#assert#TearDownLinterTest() Execute(The javac callback should return the correct default value): 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' AssertLinter 'javac', \ g:prefix \ . ' -cp ' . ale#Escape('foo.jar') \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The executable should be configurable): let g:ale_java_javac_executable = 'foobar' AssertLinter 'foobar', \ ale#path#CdString(expand('%:p:h')) \ . ale#Escape('foobar') . ' -Xlint' \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should include discovered classpaths): 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 ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should combine discovered classpaths and manual ones): let g:ale_java_javac_classpath = 'configured.jar' 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', \ 'configured.jar', \ ], \ g:cp_sep \ )) \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' let g:ale_java_javac_classpath = 'configured.jar' . g:cp_sep . 'configured2.jar' AssertLinter 'javac', \ g:prefix \ . ' -cp ' \ . ale#Escape(join( \ [ \ '/foo/bar.jar', \ '/xyz/abc.jar', \ 'configured.jar', \ 'configured2.jar', \ ], \ g:cp_sep \ )) \ . ' -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('')) AssertLinter 'javac', \ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint' \ . ' -sourcepath ' . ale#Escape( \ ale#path#Simplify(g:dir . '/java_paths/src/main/java/') \ ) \ . ' -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('')) WithChainResults [ \ '[DEBUG] Ignore this.', \ '[INFO] Something we should ignore.', \ '/foo/bar.jar', \ '/xyz/abc.jar', \] AssertLinter 'javac', \ ale#path#CdString(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 ' . 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(''), []) 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('')) " The test path is only included for test files. " Regular Java files shouldn't import from tests. noautocmd e! java_paths/src/test/java/com/something/dummy call ale#engine#InitBufferInfo(bufnr('')) AssertLinter 'javac', \ ale#path#CdString(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 ' . 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('')) AssertLinter 'javac', \ ale#path#CdString(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 ' . ale#Escape('TEMP_DIR') . ' %t' Execute(The javac callback should add -sourcepath even if src/java/main doesn't exist): call ale#engine#Cleanup(bufnr('')) call ale#test#SetFilename('java_paths_no_main/src/test/java/com/something/dummy.java') call ale#engine#InitBufferInfo(bufnr('')) AssertLinter 'javac', \ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint' \ . ' -sourcepath ' . ale#Escape(join([ \ ale#path#Simplify(g:dir . '/java_paths_no_main/src/test/java/'), \ ], g:cp_sep)) \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'