Before:
  Save g:ale_python_pyflakes_executable
  Save g:ale_python_pyflakes_use_global

  unlet! g:ale_python_pyflakes_executable
  unlet!  g:ale_python_pyflakes_use_global

  let b:bin_dir = has('win32') ? 'Scripts' : 'bin'

  call ale#test#SetDirectory('/testplugin/test/command_callback')

  runtime ale_linters/python/pyflakes.vim

After:
  Restore

  unlet! b:bin_dir
  unlet! b:executable

  call ale#test#RestoreDirectory()
  call ale#linter#Reset()

Execute(The pyflakes command callback should return default string):
  AssertEqual ale#Escape('pyflakes') . ' %t',
  \ ale_linters#python#pyflakes#GetCommand(bufnr(''))

Execute(The pyflakes executable should be configurable):
  let g:ale_python_pyflakes_executable = '~/.local/bin/pyflakes'

  AssertEqual ale#Escape('~/.local/bin/pyflakes') . ' %t',
  \ ale_linters#python#pyflakes#GetCommand(bufnr(''))

Execute(The pyflakes executable should be run from the virtualenv path):
  call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py')

  let b:executable = ale#path#Winify(
  \ g:dir . '/python_paths/with_virtualenv/env/' . b:bin_dir . '/pyflakes'
  \)

  AssertEqual ale#Escape(b:executable) . ' %t',
  \ ale_linters#python#pyflakes#GetCommand(bufnr(''))

Execute(You should be able to override the pyflakes virtualenv lookup):
  call ale#test#SetFilename('python_paths/with_virtualenv/subdir/foo/bar.py')

  let g:ale_python_pyflakes_use_global = 1

  AssertEqual ale#Escape('pyflakes') . ' %t',
  \ ale_linters#python#pyflakes#GetCommand(bufnr(''))