1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 02:30:05 +08:00
SpaceVim/bundle/neomake/tests/cmd_neomakeinfo.vader
2020-06-13 14:06:35 +08:00

234 lines
7.3 KiB
Plaintext

" Tests for the NeomakeInfo command.
Include: include/setup.vader
Execute (:NeomakeInfo output end to end test):
if !(exists('*execute') && has('nvim-0.2.0'))
NeomakeTestsSkip 'Only with execute() support'
else
let info = split(neomake#utils#redir('NeomakeInfo'), '\n')
Assert len(filter(copy(info), "v:val =~ '\\v^#+ Settings$'")), 'Settings header exists'
endif
Execute (:NeomakeInfo):
Save g:neomake_c_enabled_makers, g:neomaker_not_a_setting
let g:neomake_c_enabled_makers = ['doesnotexist']
let g:neomaker_not_a_setting = 1
Save &makeprg
let &makeprg = 'mycustom make %'
let info = neomake#debug#_get_info_lines()
Assert len(filter(copy(info), "v:val =~ '\\v^#+ Settings$'")), 'Settings header exists'
Assert index(info, "g:neomake_c_enabled_makers = ['doesnotexist']") != -1,
\ 'neomake_c_enabled_makers setting gets reported'
AssertEqual filter(copy(info), "v:val =~ 'neomaker'"), []
Assert len(filter(copy(info), 'v:val =~# "^makeprg=mycustom make %, Last set from"')) == 1,
\ 'Contains &makeprg: '.string(info)
Execute (:NeomakeInfo with FuncRef):
Save g:neomake_c_enabled_makers, g:neomake_c_doesnotexist_maker
new
set filetype=c
function! InitForJob(jobinfo) abort
endfunction
let g:neomake_c_enabled_makers = ['doesnotexist']
let g:neomake_c_doesnotexist_maker = {
\ 'InitForJob': function('InitForJob'),
\ 'errorformat': 'custom_efm: %m'}
let info = neomake#debug#_get_info_lines()
let idx = -1
for line in [
\ 'For the current filetype ("c", used with :Neomake):',
\ ' - doesnotexist',
\ ' - errorformat: ''custom_efm: %m''',
\ ' - exe: ''doesnotexist''']
let i = index(info, line)
Assert i > idx, 'line not found: "'.line.'" (idx: '.idx.')'."\n".join(info, "\n")
let idx = i
endfor
Assert len(map(info, 'v:val =~# " - InitForJob: function.*"')), 'InitForJob not found'
delfunction InitForJob
bwipe
Execute (:NeomakeInfo with unusual filetype):
new
set filetype=ft1.gentoo-package-keywords
let info = neomake#debug#_get_info_lines()
Assert index(info, 'NOTE: you can define g:neomake_ft1_gentoo_package_keywords_enabled_makers to configure it (or b:neomake_ft1_gentoo_package_keywords_enabled_makers).') != -1, 'Line was found'
bwipe
Execute (:NeomakeInfo displays issues):
Save g:neomake_enabled_makers, g:neomake_mymaker_maker
let g:neomake_enabled_makers = ['mymaker']
let g:neomake_mymaker_maker = {
\ 'exe': 'doesnotexist',
\ 'errorformat': 'custom_efm: %m',
\ 'mapexpr': '',
\ 'postprocess': function('tr'),
\ 'process_output': function('tr'),
\ }
let info = neomake#debug#_get_info_lines()
let idx = -1
for line in [
\ '#### Neomake debug information',
\ 'For the project (used with :Neomake!):',
\ ' - mymaker',
\ ' - errorformat: ''custom_efm: %m''',
\ ' - exe: ''doesnotexist''',
\ ' - ERRORS:',
\ " - maker's exe (doesnotexist) is not executable.",
\ ' - WARNINGS:',
\ ' - maker has mapexpr, but only process_output will be used.',
\ ' - maker has postprocess, but only process_output will be used.',
\ '#### :version',
\ '#### :messages',
\ ]
let i = index(info, line)
Assert i > idx, 'line not found: "'.line.'" (idx: '.idx.')'."\n".join(info, "\n")
let idx = i
endfor
Execute (NeomakeInfo! copies to clipboard):
try
let save_reg = getreg('+')
catch
NeomakeTestsSkip 'Clipboard is not available: '.v:exception
return
endtry
call NeomakeTestsSetVimMessagesMarker()
let restore = 1
try
NeomakeInfo!
let info = split(getreg('+'), '\n')
if empty(info)
let restore = 0
AssertNeomakeMessage "Could not set clipboard: Vim(call):E354: Invalid register name: '+'.", 0
return
endif
finally
if restore
call setreg('+', save_reg, 'l')
endif
endtry
let idx = -1
for line in [
\ '#### Neomake debug information',
\ '#### :version',
\ '#### :messages',
\ ]
let i = index(info, line)
Assert i > idx, 'line not found: "'.line.'" (idx: '.idx.')'."\n".join(info, "\n")
let idx = i
endfor
AssertEqual NeomakeTestsGetVimMessages(), [
\ 'Copied Neomake info to clipboard ("+).']
Execute (NeomakeInfo displays new-style config):
Assert !exists('g:neomake')
new
let info = neomake#debug#_get_info_lines()
let idx = -1
for line in [
\ '#### Neomake debug information',
\ '##### Settings',
\ '###### New-style (dict, overrides old-style)',
\ "g:neomake: unset",
\ 'b:neomake: unset',
\ ]
let i = index(info, line)
Assert i > idx, 'line not found: "'.line.'" (idx: '.idx.')'."\n".join(info, "\n")
let idx = i
endfor
" Using neomake#config#get() should not trigger setting g:neomake.
AssertEqual neomake#config#get('doesnotexist'), g:neomake#config#undefined
let b:neomake = {}
let info = neomake#debug#_get_info_lines()
let idx = -1
for line in [
\ '#### Neomake debug information',
\ '##### Settings',
\ '###### New-style (dict, overrides old-style)',
\ "g:neomake: unset",
\ 'b:neomake: {}',
\ ]
let i = index(info, line)
Assert i > idx, 'line not found: "'.line.'" (idx: '.idx.')'."\n".join(info, "\n")
let idx = i
endfor
bwipe
Execute (NeomakeInfo does not display message for filetype with no makers):
new
noautocmd set filetype=doesnotexist
call NeomakeTestsSetVimMessagesMarker()
let info = neomake#debug#_get_info_lines()
let msgs = NeomakeTestsGetVimMessages()
bwipe
AssertEqual msgs, []
Assert index(info, 'For the current filetype ("doesnotexist", used with :Neomake):') > 0
Execute (NeomakeInfo with maker name):
" NOTE: Vim needs non-empty PATH for executable to be false!
" (https://github.com/vim/vim/pull/3283)
call g:NeomakeTestsSetPATH('/doesnotexist')
Assert !executable('make')
new
noautocmd set filetype=neomake_tests
NeomakeInfo foo
AssertNeomakeMessage 'Maker not found: foo.', 0
call NeomakeTestsSetVimMessagesMarker()
NeomakeInfo makeprg
AssertEqual NeomakeTestsGetVimMessages(), []
AssertEqual neomake#debug#get_maker_info('maker_with_nonstring_exe')[-2:], [
\ ' - ERRORS:',
\ " - Non-string given for executable of maker maker_with_nonstring_exe: type 2.",
\ ]
call NeomakeTestsSetVimMessagesMarker()
NeomakeInfo makeprg
AssertEqual NeomakeTestsGetVimMessages(), []
AssertEqual neomake#debug#get_maker_info('makeprg')[-2:], [
\ ' - ERRORS:',
\ " - maker's exe (make) is not executable.",
\ ]
Save &makeprg
set makeprg=custommakeprg
NeomakeInfo makeprg
AssertEqual NeomakeTestsGetVimMessages(), []
AssertEqual neomake#debug#get_maker_info('makeprg')[-2:], [
\ ' - ERRORS:',
\ " - maker's exe (custommakeprg) is not executable.",
\ ]
" Uses &shell when checking executable for makeprg with spaces.
Save &shell
set shell=customshell
set makeprg=custom\ make\ prg
NeomakeInfo makeprg
AssertEqual NeomakeTestsGetVimMessages(), []
AssertEqual neomake#debug#get_maker_info('makeprg')[-2:], [
\ ' - ERRORS:',
\ " - maker's exe (customshell) is not executable.",
\ ]
let b:neomake_makeprg_exe = 'custom_exe'
NeomakeInfo makeprg
AssertEqual NeomakeTestsGetVimMessages(), []
AssertEqual neomake#debug#get_maker_info('makeprg')[-2:], [
\ ' - ERRORS:',
\ " - maker's exe (custom_exe) is not executable.",
\ ]
bwipe