Before:
  Save g:ale_change_sign_column_color
  Save &verbose

  function! ParseHighlight(name) abort
    redir => l:output
      silent execute 'highlight ' . a:name
    redir end

    return substitute(join(split(l:output)[2:]), ' Last set.*', '', '')
  endfunction

  function! SetHighlight(name, syntax) abort
    let l:match = matchlist(a:syntax, '\vlinks to (.+)$')

    if !empty(l:match)
      execute 'highlight link ' . a:name . ' ' . l:match[1]
    else
      execute 'highlight ' . a:name . ' ' a:syntax
    endif
  endfunction

  let g:sign_highlight = ParseHighlight('SignColumn')

After:
  Restore

  delfunction ParseHighlight
  call SetHighlight('SignColumn', g:sign_highlight)
  delfunction SetHighlight
  unlet! g:sign_highlight

  call ale#sign#Clear()

Execute(The SignColumn highlight shouldn't be changed if the option is off):
  let g:ale_change_sign_column_color = 0
  let b:sign_highlight = ParseHighlight('SignColumn')

  call ale#sign#SetSigns(bufnr(''), [
  \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'},
  \])
  AssertEqual b:sign_highlight, ParseHighlight('SignColumn')

  call ale#sign#SetSigns(bufnr(''), [])
  AssertEqual b:sign_highlight, ParseHighlight('SignColumn')

Execute(The SignColumn highlight should be set and reset):
  let g:ale_change_sign_column_color = 1

  call ale#sign#SetSigns(bufnr(''), [
  \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'},
  \])
  AssertEqual 'links to ALESignColumnWithErrors', ParseHighlight('SignColumn')

  call ale#sign#SetSigns(bufnr(''), [])
  AssertEqual 'links to ALESignColumnWithoutErrors', ParseHighlight('SignColumn')

Execute(The SignColumn should be correctly parsed when verbose=1):
  set verbose=1
  highlight SignColumn ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey

  call ale#sign#SetUpDefaultColumnWithoutErrorsHighlight()

  AssertEqual
  \ has('nvim')
  \   ? 'ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey'
  \   : 'term=standout ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey',
  \ ParseHighlight('ALESignColumnWithoutErrors')
