Before:
  Save g:ale_llvm_llc_executable

  unlet! g:ale_llvm_llc_executable
  unlet! b:ale_llvm_llc_executable

  runtime ale_linters/llvm/llc.vim

  function! AssertHasPrefix(str, prefix) abort
    let msg = printf("'%s' is expected to be prefixed with '%s'", a:str, a:prefix)
    AssertEqual stridx(a:str, a:prefix), 0, msg
  endfunction

After:
  unlet! g:ale_llvm_llc_executable
  unlet! b:ale_llvm_llc_executable
  delfunction AssertHasPrefix
  Restore

Execute(llc command is customizable):
  let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
  call AssertHasPrefix(cmd, ale#Escape('llc'))

  let g:ale_llvm_llc_executable = 'llc-5.0'
  let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
  call AssertHasPrefix(cmd, ale#Escape('llc-5.0'))

  let b:ale_llvm_llc_executable = 'llc-4.0'
  let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
  call AssertHasPrefix(cmd, ale#Escape('llc-4.0'))

Execute(GetCommand() escapes the returned path):
  let b:ale_llvm_llc_executable = '/path/space contained/llc'
  let cmd = ale_linters#llvm#llc#GetCommand(bufnr(''))
  call AssertHasPrefix(cmd, ale#Escape('/path/space contained/llc'))

Execute(GetExecutable() does not escape the returned path):
  let b:ale_llvm_llc_executable = '/path/space contained/llc'
  AssertEqual ale_linters#llvm#llc#GetExecutable(bufnr('')), '/path/space contained/llc'