mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 05:30:07 +08:00
812 lines
24 KiB
Plaintext
812 lines
24 KiB
Plaintext
|
Include: include/setup.vader
|
||
|
|
||
|
Execute (Displays custom formatted quickfix buffer):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
let bufnr = bufnr('%')
|
||
|
noautocmd set filetype=python
|
||
|
Assert !hlexists('neomakePythonLint'), 'neomakePythonLint does not exist'
|
||
|
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'type': 'E',
|
||
|
\ 'text': 'E123 Line 1 nmcfg:{"name": "python", "short": "Alph"}',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 2,
|
||
|
\ 'col': 5,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'type': '',
|
||
|
\ 'text': 'Line 2',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'type': 'E',
|
||
|
\ 'text': 'No line',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 4,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'type': 'W',
|
||
|
\ 'text': 'Line 4 (warning)',
|
||
|
\ },
|
||
|
\ ])
|
||
|
|
||
|
lopen
|
||
|
let loclist_bufnr = bufnr('%')
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
Assert hlexists('neomakePythonLint'), 'neomakePythonLint does exists'
|
||
|
|
||
|
AssertEqual getline(1, '$'), [
|
||
|
\ 'Alph 1:- E123 Line 1',
|
||
|
\ 'Alph 2:5 Line 2',
|
||
|
\ 'Alph No line',
|
||
|
\ 'Alph 4:- Line 4 (warning)',
|
||
|
\ ]
|
||
|
|
||
|
normal! 0
|
||
|
" :normal! ignores autocmd's here?
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'E123'
|
||
|
AssertEqual getpos('.')[1:2], [1, 10]
|
||
|
" Error code highlighted via syntax.
|
||
|
AssertEqual map(synstack(1, 10), 'synIDattr(v:val,"name")'), ['neomakePythonLint']
|
||
|
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5000 line=1 name=neomake_file_err buffer='.loclist_bufnr.'.', 3
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5001 line=2 name=neomake_file_err buffer='.loclist_bufnr.'.', 3
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5002 line=4 name=neomake_file_warn buffer='.loclist_bufnr.'.', 3
|
||
|
AssertEqual neomake#signs#by_lnum(loclist_bufnr), {
|
||
|
\ '1': [[5000, 'neomake_file_err']],
|
||
|
\ '2': [[5001, 'neomake_file_err']],
|
||
|
\ '4': [[5002, 'neomake_file_warn']],
|
||
|
\ }
|
||
|
if exists('*matchaddpos')
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pos1'), [[1, 6, 4]]
|
||
|
else
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pattern'), ['\%1c\%6c.\{4}']
|
||
|
endif
|
||
|
|
||
|
wincmd p
|
||
|
|
||
|
" Test changing the location list while it's open
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'E42 Line 1 nmcfg:{"name": "Beta", "short": "Beta"}',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 2,
|
||
|
\ 'col': 5,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 2',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 3,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 3 nmcfg:{"name": "Gamma", "short": "Gamm"}',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 4,
|
||
|
\ 'col': 5,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 4',
|
||
|
\ }])
|
||
|
" AssertNeomakeMessage 'Reusing sign: id=5000, type=neomake_file_err, lnum=1.', 3
|
||
|
" AssertNeomakeMessage 'Reusing sign: id=5001, type=neomake_file_err, lnum=2.', 3
|
||
|
AssertNeomakeMessage 'Upgrading sign for lnum=4: sign place 5002 name=neomake_file_err buffer='.loclist_bufnr.'.', 3
|
||
|
AssertNeomakeMessage 'Reused 2 signs.', 3
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5003 line=3 name=neomake_file_err buffer='.loclist_bufnr.'.', 3
|
||
|
|
||
|
wincmd p
|
||
|
|
||
|
Assert hlexists('neomakePythonLint'), 'neomakePythonLint does exists'
|
||
|
if exists('*matchaddpos')
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pos1'), [[1, 6, 4]]
|
||
|
else
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pattern'), ['\%1c\%6c.\{4}']
|
||
|
endif
|
||
|
|
||
|
" Does not highlight E42 (no "python" maker/syntax in new list).
|
||
|
AssertEqual map(synstack(1, 10), 'synIDattr(v:val,"name")'), []
|
||
|
|
||
|
AssertEqual getline(1, '$'), [
|
||
|
\ 'Beta 1:- E42 Line 1',
|
||
|
\ 'Beta 2:5 Line 2',
|
||
|
\ 'Gamm 3:- Line 3',
|
||
|
\ 'Gamm 4:5 Line 4']
|
||
|
|
||
|
normal! G0
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'Line'
|
||
|
AssertEqual getpos('.')[1:2], [4, 10]
|
||
|
|
||
|
" Highlights E42 (with "python" maker/syntax in new list).
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'E42 Line 1 nmcfg:{"name": "python", "short": "Beta"}',
|
||
|
\ }])
|
||
|
AssertEqual map(synstack(1, 10), 'synIDattr(v:val,"name")'), ['neomakePythonLint']
|
||
|
|
||
|
close
|
||
|
finally
|
||
|
Assert exists('#neomake_qf'), '#neomake_qf exists'
|
||
|
call neomake#quickfix#disable()
|
||
|
Assert !exists('#neomake_qf'), '#neomake_qf does not exist'
|
||
|
bwipe
|
||
|
endtry
|
||
|
|
||
|
Execute (Sets quickfix title (location list, command maker)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
set ft=neomake_tests
|
||
|
let bufnr = bufnr('%')
|
||
|
file custom_file
|
||
|
|
||
|
let maker1 = copy(g:error_maker)
|
||
|
let maker1.short_name = 'errmkr'
|
||
|
let maker1.serialize = 1
|
||
|
function! maker1.postprocess(entry)
|
||
|
if has('patch-7.4.2200')
|
||
|
if has('patch-8.0.1040') " 'efm' in setqflist/getqflist"
|
||
|
AssertEqual getloclist(0, {'title': 1}).title,
|
||
|
\ 'neomake_test_init'
|
||
|
else
|
||
|
Assert getloclist(0, {'title': 1}).title
|
||
|
\ =~# '\V:\?Neomake[file]: custom_file (error-maker..., maker2?)'
|
||
|
endif
|
||
|
endif
|
||
|
let a:entry.bufnr = bufnr('%')
|
||
|
let a:entry.lnum = 1
|
||
|
return a:entry
|
||
|
endfunction
|
||
|
|
||
|
let maker2 = copy(g:error_maker)
|
||
|
let maker2.name = 'maker2'
|
||
|
function! maker2.postprocess(entry)
|
||
|
if has('patch-7.4.2200')
|
||
|
if has('patch-8.0.1040') " 'efm' in setqflist/getqflist"
|
||
|
AssertEqual getloclist(0, {'title': 1}).title,
|
||
|
\ 'Neomake[file]: custom_file (error-maker..., maker2?)'
|
||
|
else
|
||
|
Assert getloclist(0, {'title': 1}).title
|
||
|
\ =~# '\V:\?Neomake[file]: custom_file (error-maker..., maker2?)'
|
||
|
endif
|
||
|
endif
|
||
|
return a:entry
|
||
|
endfunction
|
||
|
|
||
|
CallNeomake 1, [maker1, maker2]
|
||
|
|
||
|
if has('patch-7.4.2200')
|
||
|
AssertEqual getloclist(0, {'title': 1}).title,
|
||
|
\ 'Neomake[file]: custom_file (error-maker(1), maker2(1))'
|
||
|
endif
|
||
|
|
||
|
" Location list entry contains marker.
|
||
|
AssertEqual map(getloclist(0), 'v:val.text'), [
|
||
|
\ 'error nmcfg:{''short'': ''errmkr'', ''name'': ''error-maker''}',
|
||
|
\ 'error nmcfg:{''short'': ''make'', ''name'': ''maker2''}']
|
||
|
|
||
|
lopen
|
||
|
AssertEqual w:quickfix_title, 'Neomake[file]: custom_file (error-maker(1), maker2(1))'
|
||
|
normal! G0
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'error'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Sets quickfix title (location list, get_list_entries)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
set ft=neomake_tests
|
||
|
let bufnr = bufnr('%')
|
||
|
file custom_file
|
||
|
|
||
|
let maker1 = copy(g:error_maker)
|
||
|
let maker1.short_name = 'errmkr'
|
||
|
function maker1.get_list_entries(...)
|
||
|
if has('patch-7.4.2200')
|
||
|
AssertEqual getloclist(0, {'title': 1}).title, 'neomake_test_init'
|
||
|
endif
|
||
|
return [{'lnum': 1, 'bufnr': bufnr('%'), 'text': 'error_msg_1'}]
|
||
|
endfunction
|
||
|
|
||
|
let maker2 = {}
|
||
|
let maker2.name = 'maker2'
|
||
|
function maker2.get_list_entries(...)
|
||
|
if has('patch-7.4.2200')
|
||
|
AssertEqual getloclist(0, {'title': 1}).title, 'Neomake[file]: custom_file (error-maker..., maker2?)'
|
||
|
endif
|
||
|
return [{'lnum': 2, 'bufnr': bufnr('%'), 'text': 'error_msg_2'}]
|
||
|
endfunction
|
||
|
|
||
|
CallNeomake 1, [maker1, maker2]
|
||
|
if has('patch-7.4.2200')
|
||
|
AssertEqual getloclist(0, {'title': 1}).title, 'Neomake[file]: custom_file (error-maker(1), maker2(1))'
|
||
|
endif
|
||
|
|
||
|
" Location list entry contains marker.
|
||
|
AssertEqualQf [getloclist(0)[0]], [
|
||
|
\ {'lnum': 1, 'bufnr': bufnr, 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': 'W', 'pattern': '',
|
||
|
\ 'text': 'error_msg_1 nmcfg:{''short'': ''errmkr'', ''name'': ''error-maker''}'}]
|
||
|
|
||
|
lopen
|
||
|
|
||
|
" Title is always handled via FileType autocmd.
|
||
|
AssertEqual w:quickfix_title, 'Neomake[file]: custom_file (error-maker(1), maker2(1))'
|
||
|
|
||
|
normal! G0
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'error_msg_2'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Handles interleaving maker output and buffer names (quickfix)):
|
||
|
if !neomake#has_async_support()
|
||
|
NeomakeTestsSkip 'no async support.'
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
set ft=neomake_tests
|
||
|
let bufnr = bufnr('%')
|
||
|
|
||
|
let s:flagfile = tempname()
|
||
|
let maker1 = NeomakeTestsCommandMaker('maker1', 'echo file1: maker1_1; '
|
||
|
\ .'while ! [ -s '.fnameescape(s:flagfile).' ]; do sleep 0.01; done; '
|
||
|
\ .'echo file1: maker1_2')
|
||
|
function maker1.process_output(...)
|
||
|
if filereadable(s:flagfile)
|
||
|
return [{'text': 'maker1_2', 'lnum': 2, 'bufnr': bufnr('%')}]
|
||
|
endif
|
||
|
call writefile([], s:flagfile)
|
||
|
return [{'text': 'maker1_1', 'lnum': 1, 'bufnr': bufnr('%')}]
|
||
|
endfunction
|
||
|
|
||
|
if neomake#has_async_support()
|
||
|
let maker2 = NeomakeTestsCommandMaker('maker2',
|
||
|
\ 'while ! [ -e '.fnameescape(s:flagfile).' ]; do sleep 0.01; done; '
|
||
|
\ .'echo file2: maker2_1')
|
||
|
function maker2.process_output(...)
|
||
|
call writefile([''], s:flagfile)
|
||
|
return [
|
||
|
\ {'text': 'maker2_1', 'lnum': 1, 'bufnr': bufnr('%')},
|
||
|
\ {'text': 'maker2_2', 'lnum': 2, 'filename': 'very_long_name_for_unlisted_buffer_via_filename_entry'}]
|
||
|
endfunction
|
||
|
else
|
||
|
let maker2 = NeomakeTestsCommandMaker('maker2', 'true')
|
||
|
endif
|
||
|
let maker1.errorformat = '%f: %m'
|
||
|
let maker1.buffer_output = 0
|
||
|
let maker2.errorformat = '%f: %m'
|
||
|
CallNeomake {'enabled_makers': [maker1, maker2], 'file_mode': 0}
|
||
|
|
||
|
let unlisted_bufnr = bufnr('very_long_name_for_unlisted_buffer_via_filename_entry')
|
||
|
|
||
|
" Quickfix list entry contains marker.
|
||
|
let qflist = getqflist()
|
||
|
AssertEqual map(copy(qflist), '[v:val.bufnr, v:val.text]'), [
|
||
|
\ [bufnr, 'maker1_1 nmcfg:{''short'': ''make'', ''name'': ''maker1''}'],
|
||
|
\ [bufnr, 'maker2_1 nmcfg:{''short'': ''make'', ''name'': ''maker2''}'],
|
||
|
\ [unlisted_bufnr, 'maker2_2'],
|
||
|
\ [bufnr, 'maker1_2 nmcfg:{''short'': ''make'', ''name'': ''maker1''}']]
|
||
|
|
||
|
AssertEqual neomake#GetCurrentErrorMsg(), 'maker1: maker1_1 (W)'
|
||
|
|
||
|
copen
|
||
|
|
||
|
if has('patch-7.4.2200')
|
||
|
" Set according to finished_jobs.
|
||
|
AssertEqual w:quickfix_title, 'Neomake[project]: maker2(2), maker1(2)'
|
||
|
else
|
||
|
" Set via quickfix filetype, according to order of entries.
|
||
|
AssertEqual w:quickfix_title, 'Neomake[project]: maker1(2), maker2(2)'
|
||
|
endif
|
||
|
|
||
|
doautocmd CursorMoved
|
||
|
" Empty bufname gets transformed to buf:X.
|
||
|
AssertEqual expand('<cWORD>'), '[buf:'.bufnr.']'
|
||
|
normal! W
|
||
|
AssertEqual expand('<cWORD>'), 'maker1_1'
|
||
|
normal! j0
|
||
|
doautocmd CursorMoved
|
||
|
" Same buffer as previous entry: name omitted.
|
||
|
AssertEqual expand('<cWORD>'), 'maker2_1'
|
||
|
normal! j
|
||
|
AssertEqual expand('<cWORD>'), '[very_long_name…]'
|
||
|
normal! j
|
||
|
AssertEqual expand('<cWORD>'), '[buf:'.bufnr.']'
|
||
|
cclose
|
||
|
bwipe
|
||
|
exe unlisted_bufnr 'bwipe'
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Handles empty entries):
|
||
|
let maker = {}
|
||
|
function maker.get_list_entries(...)
|
||
|
return []
|
||
|
endfunction
|
||
|
CallNeomake {'enabled_makers': [maker]}
|
||
|
|
||
|
Execute (Does not change current error text (command maker)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
CallNeomake 1, [g:error_maker]
|
||
|
AssertEqual neomake#GetCurrentErrorMsg(), 'error-maker: error (E)'
|
||
|
lopen
|
||
|
AssertEqual getline(1), 'erro 1:- error'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Does not change current error text (entries maker)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
CallNeomake 1, [g:entry_maker]
|
||
|
AssertEqual neomake#GetCurrentErrorMsg(), 'entry_maker: error (E)'
|
||
|
lopen
|
||
|
AssertEqual getline(1), 'entr 1:- error'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Disable custom formatted quickfix buffer):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
call neomake#quickfix#disable()
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 1',
|
||
|
\ },
|
||
|
\ {
|
||
|
\ 'lnum': 2,
|
||
|
\ 'col': 5,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 2',
|
||
|
\ }])
|
||
|
|
||
|
lopen
|
||
|
|
||
|
AssertEqual getline(1, '$'),
|
||
|
\ ['|1| Line 1', '|2 col 5| Line 2']
|
||
|
|
||
|
normal! 0
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), '|1|'
|
||
|
AssertEqual getpos('.')[1:2], [1, 1]
|
||
|
close
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix handles entries with config in text):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "a", "short": "a"} nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), 'b Text with marker nmcfg:{"name": "a", "short": "a"}'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix handles entries without cfg (ending with curly brace)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [
|
||
|
\ {'text': 'text1 nmcfg:{"name": "maker", "short": "makr"}'},
|
||
|
\ {'text': " 'something': 'X'}"}
|
||
|
\ ])
|
||
|
lopen
|
||
|
AssertEqual getline(1), "makr text1"
|
||
|
AssertEqual getline(2), "makr 'something': 'X'}"
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix handles entries without text):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'text': ' nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), 'b '
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix handles entries without bufnr)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
file test_bufname
|
||
|
call setloclist(0, [
|
||
|
\ {'text': 'msg1 nmcfg:{"name": "maker", "short": "makr"}', 'bufnr': 0},
|
||
|
\ {'text': 'msg2', 'bufnr': bufnr('%')},
|
||
|
\ {'text': 'msg3', 'bufnr': 0},
|
||
|
\ {'text': 'msg4', 'bufnr': bufnr('%')},
|
||
|
\ ])
|
||
|
lopen
|
||
|
AssertEqual getline(1), "makr msg1"
|
||
|
AssertEqual getline(2), "makr msg2"
|
||
|
AssertEqual getline(3), "makr msg3"
|
||
|
AssertEqual getline(4), "makr msg4"
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix logs exception from nmcfg)):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{'text': 'text1 nmcfg:{undefined}'}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), '???? text1 nmcfg:{undefined}'
|
||
|
AssertNeomakeMessage 'Error when evaluating nmcfg ({undefined}): Vim(let):E121: Undefined variable: undefined.', 0
|
||
|
AssertNeomakeMessage '\v\(in function neomake#quickfix#FormatQuickfix, line \d+\)', 3
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (neomake#quickfix#FormatQuickfix reuses signs):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
let loclist_bufnr = bufnr('%')
|
||
|
AssertEqual getline(1), 'b 1:- Text with marker'
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5000 line=1 name=neomake_file_err buffer='.loclist_bufnr.'.', 3
|
||
|
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
" AssertNeomakeMessage 'Reusing sign: id=5000, type=neomake_file_err, lnum=1.', 3, {'bufnr': loclist_bufnr}
|
||
|
AssertNeomakeMessage 'Reused 1 signs.', 3
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (custom qf gets disabled with manual setloclist()):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
let ll_bufnr = bufnr('%')
|
||
|
AssertEqual getline(1), 'b 1:- Text with marker'
|
||
|
doautocmd CursorMoved
|
||
|
|
||
|
AssertNeomakeMessage 'Placing sign: sign place 5000 line=1 name=neomake_file_err buffer='.ll_bufnr.'.'
|
||
|
|
||
|
Assert !empty(filter(getmatches(), "v:val.group == 'neomakeMakerName'")), 'There are existing matches.'
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
|
||
|
let s:au_called = []
|
||
|
augroup neomake_tests
|
||
|
autocmd Syntax * call add(s:au_called, expand('<amatch>'))
|
||
|
augroup END
|
||
|
|
||
|
call setloclist(0, [{'text': 'something custom'}])
|
||
|
AssertEqual s:au_called, ['qf']
|
||
|
|
||
|
AssertNeomakeMessage 'Resetting custom qf for non-Neomake change.', 3
|
||
|
AssertNeomakeMessage 'Cleaning 1 old signs.', 3, {'bufnr': ll_bufnr}
|
||
|
AssertEqual neomake#signs#by_lnum(ll_bufnr), {}
|
||
|
let matches = filter(getmatches(), "v:val.group == 'neomakeMakerName'")
|
||
|
Assert empty(matches), printf('Found unexpected matches: %s', string(matches))
|
||
|
AssertEqual b:current_syntax, 'qf'
|
||
|
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
Assert !empty(filter(getmatches(), "v:val.group == 'neomakeMakerName'")), 'There are existing matches again.'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (disabling it restores initial lines (in qf window)):
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
AssertEqual getline(1), 'b 1:- Text with marker'
|
||
|
call neomake#quickfix#disable()
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (enabling does not touch existing lists (in another window)):
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
wincmd p
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
wincmd p
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
call neomake#quickfix#disable()
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (enabling does not touch existing lists (in another window)):
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual getline(1), '|1| Text with marker nmcfg:{"name": "b", "short": "b"}'
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
AssertEqual getline(1), 'b 1:- Text with marker'
|
||
|
wincmd p
|
||
|
call neomake#quickfix#disable()
|
||
|
wincmd p
|
||
|
AssertEqual getline(1), 'b 1:- Text with marker'
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Enables customqf on VimEnter):
|
||
|
if exists('#neomake_qf')
|
||
|
au! neomake_qf
|
||
|
endif
|
||
|
try
|
||
|
call neomake#quickfix#enable()
|
||
|
Assert exists('#neomake_qf#VimEnter')
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'bufnr': 1,
|
||
|
\ 'text': 'Line 1 nmcfg:{"name": "python", "short": "Alph"}',
|
||
|
\ }])
|
||
|
lopen
|
||
|
AssertEqual b:current_syntax, 'qf'
|
||
|
doautocmd VimEnter
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
lclose
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Does not use quickfix list with empty location list):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
call setqflist([{
|
||
|
\ 'text': 'Line 1 nmcfg:{"name": "python", "short": "Alph"}',
|
||
|
\ 'lnum': 1,
|
||
|
\ }])
|
||
|
lopen
|
||
|
|
||
|
if has('patch-7.4.2200')
|
||
|
Assert !exists('b:neomake_qf')
|
||
|
AssertEqual b:current_syntax, 'qf'
|
||
|
else
|
||
|
" XXX: needs list refactoring to fix this properly.
|
||
|
Assert exists('b:neomake_qf')
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
endif
|
||
|
|
||
|
lclose
|
||
|
|
||
|
copen
|
||
|
Assert exists('b:neomake_qf')
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
cclose
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (Formats quickfix list if opened already):
|
||
|
Save g:neomake_open_list
|
||
|
let g:neomake_open_list = 2
|
||
|
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
|
||
|
let maker1 = copy(g:error_maker)
|
||
|
let maker1.short_name = 'mkr1'
|
||
|
let maker1.serialize = 1 " For predictable order.
|
||
|
|
||
|
let maker2 = copy(g:error_maker)
|
||
|
let maker2.name = 'mkr2'
|
||
|
|
||
|
CallNeomake 1, [maker1, maker2]
|
||
|
|
||
|
wincmd j
|
||
|
AssertEqual getline('.'), 'mkr1 1:- error'
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'error'
|
||
|
|
||
|
normal! j
|
||
|
AssertEqual getline('.'), 'mkr2 1:- error'
|
||
|
AssertEqual expand('<cWORD>'), 'error'
|
||
|
|
||
|
AssertNeomakeMessage 'Handling location list: executing lwindow.', 3
|
||
|
AssertNeomakeMessage 'list window has been opened (old count: 2, new count: 3, height: 1).', 3
|
||
|
AssertNeomakeMessage 'Handling location list: executing lwindow.', 3
|
||
|
AssertNeomakeMessage 'Resizing existing quickfix window: 3resize 2.', 3
|
||
|
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (custom qf with new window / buffer):
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'Text with marker nmcfg:{"name": "b", "short": "b"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeMakerName'"), 'v:val.pattern'), ['.*\%<2c']
|
||
|
if exists('*matchaddpos')
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pos1'), [[1, 3, 4]]
|
||
|
else
|
||
|
AssertEqual map(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'"), 'v:val.pattern'), ['\%1c\%3c.\{4}']
|
||
|
endif
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
|
||
|
tab split
|
||
|
if exists('##WinNew')
|
||
|
Assert !empty(filter(getmatches(), "v:val.group == 'neomakeMakerName'")), 'Expected matches (2).'
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
endif
|
||
|
doautocmd CursorMoved
|
||
|
if exists('##WinNew')
|
||
|
Assert !empty(filter(getmatches(), "v:val.group == 'neomakeMakerName'")), 'Expected matches (3).'
|
||
|
endif
|
||
|
Assert !empty(filter(getmatches(), "v:val.group == 'neomakeCursorListNr'")), 'Expected matches (3).'
|
||
|
AssertEqual b:current_syntax, 'neomake_qf'
|
||
|
|
||
|
enew
|
||
|
let matches = filter(getmatches(), "v:val.group == 'neomakeMakerName'")
|
||
|
Assert empty(matches), printf('Found unexpected matches: %s', string(matches))
|
||
|
bwipe
|
||
|
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (customqf allows for custom syntax):
|
||
|
let s:syn_au_called = 0
|
||
|
augroup neomake_tests
|
||
|
au Syntax * let s:syn_au_called = 1
|
||
|
au Syntax * syn match MyError /error/ containedin=ALL
|
||
|
augroup END
|
||
|
|
||
|
call neomake#quickfix#enable(1)
|
||
|
try
|
||
|
new
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'E123 error nmcfg:{"name": "python", "short": "py"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
|
||
|
AssertEqual getline('.'), 'py 1:- E123 error'
|
||
|
AssertEqual map(synstack(1, 8), 'synIDattr(v:val,"name")'), ['neomakePythonLint']
|
||
|
|
||
|
" :normal! ignores autocmd's here?
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'E123'
|
||
|
normal! w
|
||
|
AssertEqual expand('<cWORD>'), 'error'
|
||
|
AssertEqual getpos('.')[1:2], [1, 13]
|
||
|
AssertEqual map(synstack(1, 13), 'synIDattr(v:val,"name")'), ['MyError']
|
||
|
AssertEqual s:syn_au_called, 1
|
||
|
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
endtry
|
||
|
|
||
|
Execute (customqf gets formatted with disabled syntax):
|
||
|
let s:syn_au_called = 0
|
||
|
augroup neomake_tests
|
||
|
au Syntax * let s:syn_au_called = 1
|
||
|
augroup END
|
||
|
|
||
|
call neomake#quickfix#enable(1)
|
||
|
syntax off
|
||
|
try
|
||
|
new
|
||
|
let syn_before = neomake#utils#redir('syn')
|
||
|
call setloclist(0, [{
|
||
|
\ 'lnum': 1,
|
||
|
\ 'text': 'E123 error nmcfg:{"name": "python", "short": "py"}',
|
||
|
\}])
|
||
|
lopen
|
||
|
|
||
|
AssertEqual getline('.'), 'py 1:- E123 error'
|
||
|
AssertEqual map(synstack(1, 8), 'synIDattr(v:val,"name")'), []
|
||
|
|
||
|
" :normal! ignores autocmd's here?
|
||
|
doautocmd CursorMoved
|
||
|
AssertEqual expand('<cWORD>'), 'E123'
|
||
|
normal! w
|
||
|
AssertEqual expand('<cWORD>'), 'error'
|
||
|
AssertEqual getpos('.')[1:2], [1, 13]
|
||
|
AssertEqual map(synstack(1, 13), 'synIDattr(v:val,"name")'), []
|
||
|
AssertEqual s:syn_au_called, 0
|
||
|
|
||
|
AssertEqual syn_before, neomake#utils#redir('syn')
|
||
|
|
||
|
lclose
|
||
|
bwipe
|
||
|
finally
|
||
|
call neomake#quickfix#disable()
|
||
|
syntax on
|
||
|
endtry
|