Given foobar (Some imaginary filetype):
  var y = 3+3;
  var y = 3

Before:
  Save g:ale_buffer_info
  Save g:ale_echo_cursor
  Save g:ale_run_synchronously
  Save g:ale_set_highlights
  Save g:ale_set_loclist
  Save g:ale_set_quickfix
  Save g:ale_set_signs
  Save g:ale_command_wrapper
  Save g:ale_use_neovim_diagnostics_api

  let g:ale_command_wrapper = ''
  let g:ale_buffer_info = {}
  let g:ale_run_synchronously = 1
  unlet! g:ale_run_synchronously_callbacks
  let g:ale_set_signs = 1
  " Disable features we don't need for these tests.
  let g:ale_set_quickfix = 0
  let g:ale_set_loclist = 0
  let g:ale_set_highlights = 0
  let g:ale_echo_cursor = 0
  let g:ale_use_neovim_diagnostics_api = 0

  call ale#sign#Clear()

  function! TestCallback(buffer, output)
    return [
    \ {'lnum': 1, 'text': 'foo', 'type': 'W'},
    \ {'lnum': 2, 'text': 'foo', 'type': 'E'},
    \]
  endfunction

  function! CollectSigns()
    redir => l:output
      if has('nvim-0.4.2') || has('patch-8.1.614')
        silent exec 'sign place group=ale_signs'
      else
        silent exec 'sign place'
      endif
    redir END

    let l:actual_sign_list = []

    for l:line in split(l:output, "\n")
      let l:match = matchlist(l:line, ale#sign#ParsePattern())

      if len(l:match) > 0
        call add(l:actual_sign_list, [l:match[1], l:match[3]])
      endif
    endfor

    return l:actual_sign_list
  endfunction

  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter',
  \ 'callback': 'TestCallback',
  \ 'executable': has('win32') ? 'cmd' : 'echo',
  \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''',
  \})

After:
  delfunction TestCallback
  delfunction CollectSigns

  unlet! g:ale_run_synchronously_callbacks
  call ale#sign#Clear()
  call ale#linter#Reset()

Execute(The signs should be updated after linting is done):
  ALELint
  call ale#test#FlushJobs()

  AssertEqual [['1', 'ALEWarningSign'], ['2', 'ALEErrorSign']], CollectSigns()

Execute(Signs should not be set when diagnostics API integration is enabled):
  let g:ale_use_neovim_diagnostics_api = 1
  ALELint
  call ale#test#FlushJobs()

  AssertEqual [], CollectSigns()
