Before: silent! cd /testplugin/test/command_callback let b:dir = getcwd() After: silent execute 'cd ' . fnameescape(b:dir) unlet! b:dir call ale#linter#Reset() Execute(The default C cppcheck command should be correct): runtime ale_linters/c/cppcheck.vim call ale#test#SetFilename('cppcheck_paths/two/foo.cpp') AssertEqual \ 'cppcheck -q --language=c --enable=style %t', \ ale_linters#c#cppcheck#GetCommand(bufnr('')) Execute(cppcheck for C should detect compile_commands.json files): runtime ale_linters/c/cppcheck.vim call ale#test#SetFilename('cppcheck_paths/one/foo.cpp') AssertEqual \ 'cd ' . ale#Escape(b:dir . '/cppcheck_paths/one') . ' && ' \ . 'cppcheck -q --language=c --project=compile_commands.json --enable=style %t', \ ale_linters#c#cppcheck#GetCommand(bufnr('')) Execute(The default C++ cppcheck command should be correct): runtime ale_linters/cpp/cppcheck.vim call ale#test#SetFilename('cppcheck_paths/two/foo.cpp') AssertEqual \ 'cppcheck -q --language=c++ --enable=style %t', \ ale_linters#cpp#cppcheck#GetCommand(bufnr('')) Execute(cppcheck for C++ should detect compile_commands.json files): runtime ale_linters/cpp/cppcheck.vim call ale#test#SetFilename('cppcheck_paths/one/foo.cpp') AssertEqual \ 'cd ' . ale#Escape(b:dir . '/cppcheck_paths/one') . ' && ' \ . 'cppcheck -q --language=c++ --project=compile_commands.json --enable=style %t', \ ale_linters#cpp#cppcheck#GetCommand(bufnr(''))