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 let g:cp_sep = has('unix') ? ':' : ';' 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 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('')) Execute(The javac callback should return the correct default value): AssertEqual g:prefix . ' -d TEMP %t', GetCommand([]) Execute(The javac callback should use g:ale_java_javac_classpath correctly): let g:ale_java_javac_classpath = 'foo.jar' AssertEqual \ g:prefix \ . ' -cp ' . ale#Escape('foo.jar') \ . ' -d TEMP %t', \ GetCommand([]) Execute(The executable should be configurable): let g:ale_java_javac_executable = 'foobar' AssertEqual 'foobar', ale_linters#java#javac#GetExecutable(bufnr('')) AssertEqual \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && ' \ . ale#Escape('foobar') . ' -Xlint' \ . ' -d TEMP %t', \ GetCommand([]) Execute(The javac callback should include discovered classpaths): AssertEqual \ 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', \ ]) Execute(The javac callback should combine discovered classpaths and manual ones): let g:ale_java_javac_classpath = 'configured.jar' AssertEqual \ g:prefix \ . ' -cp ' \ . ale#Escape(join( \ [ \ '/foo/bar.jar', \ '/xyz/abc.jar', \ 'configured.jar', \ ], \ g:cp_sep \ )) \ . ' -d TEMP %t', \ GetCommand([ \ '[DEBUG] Ignore this.', \ '[INFO] Something we should ignore.', \ '/foo/bar.jar', \ '/xyz/abc.jar', \ ]) let g:ale_java_javac_classpath = 'configured.jar' . g:cp_sep . 'configured2.jar' AssertEqual \ g:prefix \ . ' -cp ' \ . ale#Escape(join( \ [ \ '/foo/bar.jar', \ '/xyz/abc.jar', \ 'configured.jar', \ 'configured2.jar', \ ], \ g:cp_sep \ )) \ . ' -d TEMP %t', \ GetCommand([ \ '[DEBUG] Ignore this.', \ '[INFO] Something we should ignore.', \ '/foo/bar.jar', \ '/xyz/abc.jar', \ ]) 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 \ '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([]) 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 \ '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', \ ]) 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([]) 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('')) AssertEqual \ '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([]) 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 \ '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([])