" Setup and helpers for all tests.

Before:
  Save g:neomake

  let g:neomake_test_messages = []
  let g:neomake_test_errors = []
  let g:_neomake_test_asserted_messages = []
  let g:neomake_test_log_all_messages = 1
  let g:neomake_test_messages_last_idx = -1
  let g:neomake_test_buffers_before = filter(range(1, bufnr('$')), 'bufexists(v:val)')

  if has('patch-7.4.2200')
    call setloclist(0, [], ' ', {'title': 'neomake_test_init'})
    call setqflist([], ' ', {'title': 'neomake_test_init'})
  else
    call setloclist(0, [])
    call setqflist([])
  endif

  " One-time setup.
  if exists(':NeomakeTestsWaitForFinishedJobs') != 2
    if !exists('g:loaded_neomake')
      " When running a .vader file manually, without Neomake being loaded.
      let plugin_dir = fnamemodify(g:vader_current_file, ':p:h:h:h')
      let &runtimepath .= ','.plugin_dir
      exe 'source' plugin_dir.'/plugin/neomake.vim'
    endif

    exe 'source' finddir('include', fnamemodify(g:vader_file, ':p:h').';').'/init.vim'

    " Work around https://github.com/vim/vim/issues/1676.
    if has('patch-7.4.2017') && (!has('patch-8.0.0607') && !has('nvim-0.2.1'))
      Log 'NOTE: using cache busting to work around Vim issue 1676.'
      let g:neomake_test_cache_bust = [0, 0]
    endif

    " Save list of already defined (and whitelisted functions).
    " This gets used to check that no new global functions are left over
    " on teardown.
    let g:neomake_test_funcs_before = map(split(neomake#utils#redir('function /\C^[A-Z]'), '\n'),
        \ "substitute(v:val, '\\v^function (.*)\\(.*$', '\\1', '')")

    call extend(g:neomake_test_funcs_before, [
        \ 'GetVimIndent', 'GetVimIndentIntern',
        \ 'GetPythonIndent',
        \ 'GetJavascriptIndent',
        \ 'GetShIndent',
        \ 'FugitiveReloadCheck',
        \ ])

    let g:neomake_test_augroups_before = split(substitute(neomake#utils#redir('augroup'), '^[ \n]\+', '', ''), '\s\+')
  endif

After:
  NeomakeTestsGlobalAfter

  " Work around https://github.com/vim/vim/issues/1676.
  if exists('g:neomake_test_cache_bust')
    let bust_name = 'bust_cache_'.g:neomake_test_cache_bust[1]
    lgetexpr bust_name.':1676:workaround_vim_issue'
    exe 'bwipe' bust_name
    let g:neomake_test_cache_bust = [0, g:neomake_test_cache_bust[1]+1]
  endif