Before:
  Save g:ale_php_phpstan_executable
  Save g:ale_php_phpstan_level
  Save g:ale_php_phpstan_configuration

  unlet! g:ale_php_phpstan_executable
  unlet! g:ale_php_phpstan_level
  unlet! g:ale_php_phpstan_configuration

  runtime ale_linters/php/phpstan.vim

After:
  Restore

  call ale#linter#Reset()

Execute(Custom executables should be used for the executable and command):
  let g:ale_php_phpstan_executable = 'phpstan_test'

  AssertEqual 'phpstan_test', ale_linters#php#phpstan#GetExecutable(bufnr(''))
  AssertEqual
  \ ale#Escape('phpstan_test') . ' analyze -l4 --errorFormat raw %s',
  \ ale_linters#php#phpstan#GetCommand(bufnr(''))

Execute(project with level set to 3):
  call ale#test#SetFilename('phpstan-test-files/foo/test.php')
  let g:ale_php_phpstan_level = 3

  AssertEqual
  \ ale#Escape('phpstan') . ' analyze -l3 --errorFormat raw %s',
  \ ale_linters#php#phpstan#GetCommand(bufnr(''))

Execute(Custom phpstan configuration file):
  let g:ale_php_phpstan_configuration = 'phpstan_config'

  AssertEqual
  \ ale#Escape('phpstan') . ' analyze -l4 --errorFormat raw -c phpstan_config %s',
  \ ale_linters#php#phpstan#GetCommand(bufnr(''))