1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 13:50:04 +08:00
SpaceVim/bundle/neomake/tests/isolated/highlights.vader

280 lines
8.7 KiB
Plaintext
Raw Normal View History

2020-06-13 14:06:35 +08:00
Include: ../include/setup.vader
Execute (Setup: monkeypatch autoload/neomake/highlights.vim):
" Monkeypatch to check setting of length.
runtime autoload/neomake/highlights.vim
Save g:neomake_tests_highlight_lengths
let g:neomake_tests_highlight_lengths = []
function! neomake#highlights#AddHighlight(entry, ...) abort
let bufnr = get(a:entry, 'bufnr', -1)
if !has_key(g:neomake_tests_highlight_lengths, bufnr)
let g:neomake_tests_highlight_lengths[bufnr] = []
endif
call add(g:neomake_tests_highlight_lengths[bufnr],
\ [get(a:entry, 'lnum', -1), get(a:entry, 'length', -1)])
endfunction
Execute (vimlint: length postprocessing):
let g:neomake_tests_highlight_lengths = {}
new
noautocmd edit tests/fixtures/vim/func-with-errors.vim
let maker = neomake#makers#ft#vim#vimlint()
let maker.exe = 'cat'
let maker.args = 'tests/fixtures/vim/func-with-errors.vim.output'
let maker.append_file = 0
CallNeomake 1, [maker]
let bufnr = bufnr('%')
AssertEqualQf getloclist(0), [{
\ 'lnum': 2,
\ 'bufnr': bufnr,
\ 'col': 6,
\ 'valid': 1,
\ 'vcol': 0,
\ 'nr': 101,
\ 'type': 'E',
\ 'pattern': '',
\ 'text': 'undefined variable `l:something`',
\ }, {
\ 'lnum': 5,
\ 'bufnr': bufnr,
\ 'col': 9,
\ 'valid': 1,
\ 'vcol': 0,
\ 'nr': 104,
\ 'type': 'E',
\ 'pattern': '',
\ 'text': 'variable may not be initialized on some execution path: `l:foo`',
\ }]
AssertEqual {string(bufnr): [[2, 11], [5, 3]]}, g:neomake_tests_highlight_lengths
bwipe
Execute (vint: highlights syntax error for command):
let g:neomake_tests_highlight_lengths = {}
new
file file1.vim
norm! iwhile 1
norm! oendfor
let vint_maker = neomake#makers#ft#vim#vint()
let vint_maker.exe = 'printf'
let vint_maker.args = ["file1.vim:2:1:error:E588: :endfor without :for (SyntaxError)"]
let vint_maker.append_file = 0
CallNeomake 1, [vint_maker]
let bufnr = bufnr('%')
AssertEqualQf getloclist(0), [{
\ 'lnum': 2,
\ 'bufnr': bufnr,
\ 'col': 1,
\ 'valid': 1,
\ 'vcol': 0,
\ 'nr': 588,
\ 'type': 'e',
\ 'pattern': '',
\ 'text': ':endfor without :for (SyntaxError)'}]
bwipe!
AssertEqual {string(bufnr): [[2, 6]]}, g:neomake_tests_highlight_lengths
Execute (get_list_entries: based on example from doc):
let g:neomake_tests_highlight_lengths = {}
new
call g:NeomakeSetupAutocmdWrappers()
let buf1 = bufnr('%')
file get_list_entries_buf1
let winnr = winnr()
let maker = {'name': 'My maker', 'my_orig_bufnr': buf1}
function! maker.get_list_entries(jobinfo) abort
" Change bufnr.
new
return [
\ {'text': 'Some error', 'lnum': 1, 'bufnr': a:jobinfo.bufnr},
\ {'text': 'Some warning without bufnr', 'type': 'W', 'lnum': 2,
\ 'col': 1, 'length': 5},
\ {'text': 'Some warning', 'type': 'W', 'lnum': 2, 'col': 1,
\ 'bufnr': a:jobinfo.maker.my_orig_bufnr, 'length': 2},
\ {'text': 'Some info', 'type': 'I', 'lnum': 3, 'col': 1,
\ 'filename': '/path/to/file'},
\ {'text': 'Some non-type', 'type': '', 'lnum': 4, 'col': 1, 'length': 23,
\ 'filename': 'get_list_entries_buf1'},
\ ]
endfunction
call neomake#Make(1, [maker])
AssertNeomakeMessage 'Queuing action ProcessEntries for BufEnter, WinEnter.'
AssertEqual {}, g:neomake_tests_highlight_lengths, 'No highlights have been added yet'
AssertEqual [], getloclist(0)
wincmd p
AssertEqual winnr, winnr()
let llist = getloclist(0)
" Check that unlisted buffer was created for filename.
let unlisted_bufnr = bufnr('/path/to/file')
Assert !empty(unlisted_bufnr), 'Unlisted buffer was created (1)'
Assert !buflisted(unlisted_bufnr), 'Unlisted buffer was created (2)'
AssertEqual {
\ string(buf1): [[1, -1], [2, 2], [4, 23]],
\ string(unlisted_bufnr): [[3, -1]]}, g:neomake_tests_highlight_lengths
" Check that existing buffer was used for filename.
AssertEqual llist[4].bufnr, buf1, 'get_list_entries_buf1 was picked up'
AssertNeomakeMessage "Entry 2 differs after adding: {'changed': {'valid': [1, 0]}}.", 3
AssertNeomakeMessage "Entry 4 differs after adding: {'changed': {'bufnr': [0, ".unlisted_bufnr."]}, 'removed': {'filename': '/path/to/file'}}.", 3
AssertNeomakeMessage "Entry 5 differs after adding: {'changed': {'bufnr': [0, ".buf1."]}, 'removed': {'filename': 'get_list_entries_buf1'}}.", 3
AssertEqualQf llist, [
\ {'lnum': 1, 'bufnr': buf1, 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1,
\ 'type': 'W', 'pattern': '', 'text': 'Some error'},
\ {'lnum': 2, 'bufnr': 0, 'col': 1, 'valid': 0, 'vcol': 0, 'nr': -1,
\ 'type': 'W', 'pattern': '', 'text': 'Some warning without bufnr'},
\ {'lnum': 2, 'bufnr': buf1, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
\ 'type': 'W', 'pattern': '', 'text': 'Some warning'},
\ {'lnum': 3, 'bufnr': unlisted_bufnr, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
\ 'type': 'I', 'pattern': '', 'text': 'Some info'},
\ {'lnum': 4, 'bufnr': buf1, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
\ 'type': '', 'pattern': '', 'text': 'Some non-type'} ]
wincmd p
bwipe
bwipe
exe 'bwipe '.unlisted_bufnr
AssertEqual len(g:neomake_test_countschanged), 1
AssertEqual len(g:neomake_test_finished), 1
AssertEqual len(g:neomake_test_jobfinished), 1
Execute (cargo error message):
let g:neomake_tests_highlight_lengths = {}
new
file build/lib.rs
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
\ '../tests/fixtures/rust/cargo_error.json')
call neomake#Make(1, [cargo])
NeomakeTestsWaitForFinishedJobs
let bufnr = bufnr('%')
AssertEqualQf getloclist(0), [{
\ 'type': 'E',
\ 'bufnr': bufnr,
\ 'nr': 308,
\ 'lnum': 19,
\ 'col': 46,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'mismatched types: expected str, found struct `proc_macro::TokenStream`'
\ }, {
\ 'type': 'E',
\ 'bufnr': bufnr,
\ 'nr': 308,
\ 'lnum': 25,
\ 'col': 1,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'mismatched types: expected str, found struct `proc_macro::TokenStream`'
\ }, {
\ 'type': 'I',
\ 'bufnr': bufnr,
\ 'nr': 308,
\ 'lnum': 25,
\ 'col': 1,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'found type `&proc_macro::TokenStream`'
\ }]
" TODO: should not call it for the same highlight twice?!
AssertEqual {string(bufnr): [[19, 2], [25, 40], [25, 40]]}, g:neomake_tests_highlight_lengths
bwipe
Execute (cargo warning message):
let g:neomake_tests_highlight_lengths = {}
new
file build/add_assign_like.rs
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
\ '../tests/fixtures/rust/cargo_warning.json')
call neomake#Make(1, [cargo])
NeomakeTestsWaitForFinishedJobs
let bufnr = bufnr('%')
AssertEqualQf getloclist(0), [{
\ 'type': 'W',
\ 'bufnr': bufnr,
\ 'nr': -1,
\ 'lnum': 2,
\ 'col': 24,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'unused import: `Variant`, #[warn(unused_imports)] on by default'}]
AssertEqual {string(bufnr): [[2, 7]]}, g:neomake_tests_highlight_lengths
bwipe
Execute (cargo warning for file that is not open):
let g:neomake_tests_highlight_lengths = {}
new
file build/some_other_file.rs
" Uses build/add_assign_like.rs.
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
\ '../tests/fixtures/rust/cargo_warning.json')
call neomake#Make(1, [cargo])
NeomakeTestsWaitForFinishedJobs
let unlisted_bufnr = bufnr('^build/add_assign_like.rs$')
AssertNotEqual -1, unlisted_bufnr
AssertEqualQf getloclist(0), [{
\ 'type': 'W',
\ 'bufnr': unlisted_bufnr,
\ 'nr': -1,
\ 'lnum': 2,
\ 'col': 24,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'unused import: `Variant`, #[warn(unused_imports)] on by default'}]
AssertEqual {string(unlisted_bufnr): [[2, 7]]}, g:neomake_tests_highlight_lengths
bwipe
exe 'bwipe' unlisted_bufnr
Execute (cargo error message children):
let g:neomake_tests_highlight_lengths = {}
new
file tests/from.rs
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
\ '../tests/fixtures/rust/cargo_error_children.json')
call neomake#Make(1, [cargo])
NeomakeTestsWaitForFinishedJobs
let bufnr = bufnr('%')
AssertEqualQf getloclist(0), [{
\ 'type': 'E',
\ 'bufnr': bufnr,
\ 'nr': -1,
\ 'lnum': 11,
\ 'col': 10,
\ 'valid': 1,
\ 'vcol': 0,
\ 'pattern': '',
\ 'text': 'custom derive attribute panicked. message: Only structs and enums can derive From'}]
AssertEqual {string(bufnr): [[11, 4]]}, g:neomake_tests_highlight_lengths
bwipe
Execute (Teardown: undo monkeypatching):
" Restore if not profiling.
if !v:profiling
runtime autoload/neomake/highlights.vim
endif