--- /dev/null
+Before:
+ Save g:ale_set_loclist
+ Save g:ale_set_quickfix
+ Save g:ale_loclist_msg_format
+ Save g:ale_open_list
+ Save g:ale_buffer_info
+ Save g:ale_set_lists_synchronously
+
+ let g:ale_set_lists_synchronously = 1
+ let g:ale_loclist_msg_format = '%code: %%s'
+ let g:ale_open_list = 0
+ let g:loclist = []
+ let g:ale_buffer_info = {bufnr(''): {'loclist': g:loclist}}
+
+ function! AddItem(data) abort
+ let l:item = {
+ \ 'bufnr': bufnr(''),
+ \ 'lnum': 1,
+ \ 'col': 1,
+ \ 'type': 'E',
+ \ 'linter_name': 'some_linter',
+ \}
+
+ call add(g:loclist, extend(l:item, a:data))
+ endfunction
+
+After:
+ Restore
+
+ unlet! g:loclist
+ unlet! b:ale_loclist_msg_format
+
+ delfunction AddItem
+
+ call setloclist(0, [])
+ call setqflist([])
+
+Execute(Formatting with codes should work for the loclist):
+ call AddItem({'text': "nocode\r"})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': 'nocode',
+ \ },
+ \ ],
+ \ ale#test#GetLoclistWithoutNewerKeys()
+
+ call remove(g:loclist, 0)
+ call AddItem({'text': 'withcode', 'code': 'E123'})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': 'E123: withcode',
+ \ },
+ \ ],
+ \ ale#test#GetLoclistWithoutNewerKeys()
+
+Execute(Formatting with codes should work for the quickfix list):
+ let g:ale_set_loclist = 0
+ let g:ale_set_quickfix = 1
+
+ call AddItem({'text': "nocode\r"})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': 'nocode',
+ \ },
+ \ ],
+ \ ale#test#GetQflistWithoutNewerKeys()
+
+ call remove(g:loclist, 0)
+ call AddItem({'text': 'withcode', 'code': 'E123'})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': 'E123: withcode',
+ \ },
+ \ ],
+ \ ale#test#GetQflistWithoutNewerKeys()
+
+Execute(Formatting with the linter name should work for the loclist):
+ let g:ale_loclist_msg_format = '(%linter%) %s'
+
+ call AddItem({'text': 'whatever'})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': '(some_linter) whatever',
+ \ },
+ \ ],
+ \ ale#test#GetLoclistWithoutNewerKeys()
+
+Execute(Formatting with the linter name should work for the quickfix list):
+ let g:ale_loclist_msg_format = '(%linter%) %s'
+ let g:ale_set_loclist = 0
+ let g:ale_set_quickfix = 1
+
+ call AddItem({'text': 'whatever'})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': '(some_linter) whatever',
+ \ },
+ \ ],
+ \ ale#test#GetQflistWithoutNewerKeys()
+
+Execute(The buffer loclist format option should take precedence):
+ let g:ale_loclist_msg_format = '(%linter%) %s'
+ let b:ale_loclist_msg_format = 'FOO %s'
+
+ call AddItem({'text': 'whatever'})
+ call ale#list#SetLists(bufnr(''), g:loclist)
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'bufnr': bufnr(''),
+ \ 'col': 1,
+ \ 'valid': 1,
+ \ 'vcol': 0,
+ \ 'nr': 0,
+ \ 'type': 'E',
+ \ 'pattern': '',
+ \ 'text': 'FOO whatever',
+ \ },
+ \ ],
+ \ ale#test#GetLoclistWithoutNewerKeys()