--- /dev/null
+Before:
+ Save &shell
+ Save &shellcmdflag
+ Save g:ale_shell
+ Save g:ale_shell_arguments
+
+ Save b:ale_shell
+ Save b:ale_shell_arguments
+
+ unlet! b:ale_shell
+ unlet! b:ale_shell_arguments
+
+ unlet! g:ale_shell
+ unlet! g:ale_shell_arguments
+
+After:
+ Restore
+
+Execute(sh should be used when the shell is fish):
+ if !has('win32')
+ " Set something else, so we will replace that too.
+ let &shellcmdflag = '-f'
+ let &shell = 'fish'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+
+ let &shell = '/usr/bin/fish'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+
+ let &shell = '/usr/local/bin/fish'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+ endif
+
+Execute(sh should be used when the shell is powershell):
+ if !has('win32')
+ " Set something else, so we will replace that too.
+ let &shellcmdflag = '-f'
+ let &shell = 'pwsh'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+
+ let &shell = '/usr/bin/pwsh'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+
+ let &shell = '/usr/local/bin/pwsh'
+
+ AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+ endif
+
+Execute(Other shells should be used when set):
+ if !has('win32')
+ let &shell = '/bin/bash'
+ let &shellcmdflag = '-c'
+ let g:ale_shell = &shell
+
+ AssertEqual ['/bin/bash', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar')
+ endif
+
+Execute(cmd /s/c as a string should be used on Windows):
+ if has('win32')
+ let &shell = 'who cares'
+ let &shellcmdflag = 'whatever'
+
+ AssertEqual 'cmd /s/c "foobar"', ale#job#PrepareCommand(bufnr(''), 'foobar')
+ endif
+
+Execute(Setting g:ale_shell should cause ale#job#PrepareCommand to use set shell):
+ let g:ale_shell = '/foo/bar'
+
+ if has('win32')
+ AssertEqual ['/foo/bar', '/c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
+ else
+ AssertEqual ['/foo/bar', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
+ endif
+
+ let g:ale_shell_arguments = '-x'
+
+ AssertEqual ['/foo/bar', '-x', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
+
+Execute(Setting b:ale_shell should cause ale#job#PrepareCommand to use set shell):
+ let g:ale_shell = '/wrong/foo/bar'
+ let b:ale_shell = '/foo/bar'
+
+ if has('win32')
+ AssertEqual ['/foo/bar', '/c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
+ else
+ AssertEqual ['/foo/bar', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")
+ endif
+
+ let g:ale_shell_arguments = '--verbose -x'
+ let b:ale_shell_arguments = '-x'
+
+ AssertEqual ['/foo/bar', '-x', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar")