Include: include/setup.vader

Execute (No error when matches are cleared manually):
  new

  call neomake#highlights#AddHighlight({'bufnr': bufnr('%'), 'type': 'E', 'col': 1, 'lnum': 1}, 'file')
  if !has('nvim')
    AssertEqual w:neomake_highlights, []
  endif
  doautocmd BufEnter
  if !has('nvim')
    AssertEqual len(w:neomake_highlights), 1
  endif
  call clearmatches()
  " No-op in Neovim (same as BufEnter above), but should be defined.
  call neomake#highlights#ShowHighlights()
  if !has('nvim')
    AssertEqual len(w:neomake_highlights), 1
    AssertEqual w:neomake_highlights[0], getmatches()[0].id

    if exists('*matchaddpos')
      AssertEqual getmatches(),
      \ [{'group': 'NeomakeError', 'id': 5, 'priority': 10, 'pos1': [1, 1, 1]}]
    else
      AssertEqual getmatches(),
      \ [{'group': 'NeomakeError', 'pattern': '\%1l\%1c.\{1}', 'priority': 10, 'id': 5}]
    endif
  endif
  bwipe

Execute (neomake#highlights#AddHighlight with off-columns):
  " This documents the current behavior.
  " I have tried to limit it to the length of the current line etc, but it
  " seems to better use the given values as-is.
  " Currently it will highlight an empty line completely, if there is an error
  " reported for column 1.
  new
  let bufnr = bufnr('%')
  let entry = {'bufnr': bufnr, 'type': 'E', 'col': 1, 'lnum': 1}

  call neomake#highlights#AddHighlight(entry, 'file')
  let highlights = neomake#highlights#_get()['file'][bufnr]
  if !has('nvim')
    AssertEqual highlights['NeomakeError'], [[1, 1, 1]]
  endif

  normal! ifoo

  call neomake#highlights#ResetFile(bufnr)
  call neomake#highlights#AddHighlight(entry, 'file')
  let highlights = neomake#highlights#_get()['file'][bufnr]
  if !has('nvim')
    AssertEqual highlights['NeomakeError'], [[1, 1, 1]]
  endif

  call neomake#highlights#ResetFile(bufnr)
  AssertEqual has_key(neomake#highlights#_get()['file'], bufnr), 0

  let entry = {'bufnr': bufnr, 'type': 'E', 'col': 1, 'lnum': 1, 'length': 4}
  call neomake#highlights#AddHighlight(entry, 'file')
  let highlights = neomake#highlights#_get()['file'][bufnr]
  if !has('nvim')
    AssertEqual highlights['NeomakeError'], [[1, 1, 4]]
  endif
  bwipe!

Execute (neomake#highlights#AddHighlight handles entries with line=0, col=0):
  Save g:neomake_highlight_lines
  let entry = {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 0, 'col': 0}
  lockvar entry

  let g:neomake_highlight_lines = 0
  call neomake#highlights#AddHighlight(entry, 'file')
  let g:neomake_highlight_lines = 1
  call neomake#highlights#AddHighlight(entry, 'file')

Execute (neomake#highlights#AddHighlight handles entries with line=0, col=1):
  Save g:neomake_highlight_lines
  let entry = {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 0, 'col': 1}
  lockvar entry

  let g:neomake_highlight_lines = 0
  call neomake#highlights#AddHighlight(entry, 'file')
  let g:neomake_highlight_lines = 1
  call neomake#highlights#AddHighlight(entry, 'file')

Execute (neomake#highlights#AddHighlight: handles both col/line):
  Save g:neomake_highlight_lines
  Save g:neomake_highlight_columns

  let g:neomake_highlight_columns = 1
  let g:neomake_highlight_lines = 1

  new
  let bufnr = bufnr('%')

  " Highlights column if present in entry.
  let entry = {'bufnr': bufnr, 'type': 'E', 'col': 1, 'lnum': 1}

  call neomake#highlights#AddHighlight(entry, 'file')
  let highlights = neomake#highlights#_get()['file'][bufnr]
  if !has('nvim')
    AssertEqual highlights['NeomakeError'], [[1, 1, 1]]
  endif

  " Highlights line if column is not present in entry.
  let entry = {'bufnr': bufnr, 'type': 'E', 'col': 0, 'lnum': 1}

  call neomake#highlights#ResetFile(bufnr)
  call neomake#highlights#AddHighlight(entry, 'file')
  let highlights = neomake#highlights#_get()['file'][bufnr]
  if !has('nvim')
    AssertEqual highlights['NeomakeError'], [1]
  endif
  bwipe!

Execute (Highlights get (re-)defined on ColorScheme event):
  if exists('g:colors_name')
    let colorscheme = g:colors_name
    let had_colorscheme = 1
  else
    let colorscheme = 'default'
    let had_colorscheme = 0
  endif
  let orig = neomake#utils#redir('hi NeomakeError')
  exe 'colorscheme' colorscheme
  let new = neomake#utils#redir('hi NeomakeError')
  if had_colorscheme
    AssertEqual orig, new
  else
    Assert stridx(new, 'cleared') == -1, 'highlight is not cleared.'
  endif