Before: call ale#test#SetDirectory('/testplugin/test/command_callback') Save g:ale_java_javac_options Save g:ale_java_javac_classpath 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')) . ' && 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 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('')) :e! java_paths/src/main/java/com/something/dummy call ale#engine#InitBufferInfo(bufnr('')) AssertEqual \ 'cd ' . ale#Escape(expand('%:p:h')) . ' && javac -Xlint' \ . ' -sourcepath ' . ale#Escape( \ ale#path#Winify(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')) . ' && javac -Xlint' \ . ' -cp ' . ale#Escape(join(['/foo/bar.jar', '/xyz/abc.jar'], g:cp_sep)) \ . ' -sourcepath ' . ale#Escape( \ ale#path#Winify(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([])