Before:
  Save g:ale_buffer_info
  Save g:ale_enabled
  Save b:ale_enabled
  Save g:ale_maximum_file_size
  Save b:ale_maximum_file_size

  function! SetUpCursorData()
    let g:ale_buffer_info = {
    \ bufnr('%'): {
    \   'loclist': [
    \     {
    \       'lnum': 2,
    \       'col': 10,
    \       'linter_name': 'testlinter',
    \       'type': 'W',
    \       'text': 'X'
    \     },
    \   ],
    \ },
    \}

    call cursor(2, 16)
  endfunction

  function! TestCallback(buffer, output)
    return []
  endfunction

  call ale#linter#Define('foobar', {
  \ 'name': 'testlinter',
  \ 'callback': 'TestCallback',
  \ 'executable': 'echo',
  \ 'command': 'true',
  \})

  function GetLastMessage()
    redir => l:output
      silent mess
    redir END

    " Filter out messages that could come from saving this test file.
    let l:lines = filter(split(l:output, "\n"), 'v:val !~ ''written\|No line''')

    return empty(l:lines) ? '' : l:lines[-1]
  endfunction

  echomsg ''

After:
  Restore
  call ale#linter#Reset()
  delfunction TestCallback
  delfunction GetLastMessage
  delfunction SetUpCursorData

Given foobar (Some imaginary filetype):
  foo
  bar
  baz

Execute(Linting shouldn't happen when ALE is disabled globally):
  let g:ale_enabled = 0
  let g:ale_buffer_info = {}

  call ale#Queue(0)

  AssertEqual {}, g:ale_buffer_info
  call SetUpCursorData()
  call ale#cursor#EchoCursorWarning()
  AssertEqual '', GetLastMessage()

Execute(Linting shouldn't happen when ALE is disabled locally):
  let b:ale_enabled = 0
  let g:ale_buffer_info = {}

  call ale#Queue(0)

  AssertEqual {}, g:ale_buffer_info
  call SetUpCursorData()
  call ale#cursor#EchoCursorWarning()
  AssertEqual '', GetLastMessage()

Execute(Linting shouldn't happen when the file is too large with global options):
  let g:ale_maximum_file_size = 12
  let g:ale_buffer_info = {}

  call ale#Queue(0)

  AssertEqual {}, g:ale_buffer_info
  " We shouldn't show cursor warnings.
  call SetUpCursorData()
  call ale#cursor#EchoCursorWarning()
  AssertEqual '', GetLastMessage()

Execute(Linting shouldn't happen when the file is too large with local options):
  let b:ale_maximum_file_size = 12
  let g:ale_buffer_info = {}

  call ale#Queue(0)

  AssertEqual {}, g:ale_buffer_info
  call SetUpCursorData()
  call ale#cursor#EchoCursorWarning()
  AssertEqual '', GetLastMessage()
