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

105 lines
3.6 KiB
Plaintext
Vendored

Include: include/setup.vader
Execute (Hook execution gets logged):
call g:NeomakeSetupAutocmdWrappers()
au! neomake_tests User NeomakeCountsChanged
let maker = extend(neomake#utils#MakerFromCommand('echo done'), {
\ 'errorformat': '%m'})
call neomake#Make(0, [maker])
let make_id = neomake#GetStatus().last_make_id
NeomakeTestsWaitForFinishedJobs
AssertNeomakeMessage '\mCalling User autocmd NeomakeFinished with context: {''options'': ', 3
AssertEqual map(copy(g:neomake_test_finished), 'sort(keys(v:val))'), [
\ ['finished_jobs', 'make_id', 'make_info', 'options']]
Execute (NeomakeJobFinished):
if NeomakeAsyncTestsSetup()
let maker = extend(neomake#utils#MakerFromCommand('echo done; exit 7'), {
\ 'errorformat': '%m'})
call neomake#Make(0, [maker])
let jobinfo = neomake#GetJobs()[-1]
NeomakeTestsWaitForFinishedJobs
AssertEqual g:neomake_test_jobfinished, [{'jobinfo': jobinfo}]
AssertEqual jobinfo.exit_code, 7
AssertEqual jobinfo.file_mode, 0
AssertEqual jobinfo.bufnr, bufnr('%')
endif
Execute (NeomakeJobStarted can renice process):
if NeomakeAsyncTestsSetup()
let maker = NeomakeTestsCommandMaker('nice-sleep', 'sleep .1')
function! s:NeomakeTestJobStarted(context) abort
AssertEqual keys(a:context), ['jobinfo']
let pid = a:context.jobinfo.get_pid()
call system(printf('renice 19 %d', pid))
endfunction
augroup neomake_tests
au User NeomakeJobStarted call s:NeomakeTestJobStarted(g:neomake_hook_context)
augroup END
let job = neomake#Make(0, [maker])
let pid = neomake#GetJob(job[0]).get_pid()
" Prefer procfs, since 'ps' in busybox cannot select a single PID.
let proc_stat = printf('/proc/%d/stat', pid)
if filereadable(proc_stat)
let niceness = split(readfile(proc_stat)[0])[18]
else
let niceness = substitute(system(printf('ps -o nice= %d', pid)), '\v\s+|\n', '', 'g')
endif
AssertEqual niceness, '19'
if has('nvim') && !has('nvim-0.2.0')
" Really wait for jobs to finish, otherwise it fails when reloading
" autoload/neomake.vim with E127 (Cannot redefine function) later.
NeomakeTestsWaitForRemovedJobs
else
NeomakeCancelJobs!
endif
endif
Execute (NeomakeJobInit can make processes nicer):
" Create a maker that writes its niceness to stdout.
" Prefer procfs, since 'ps' in busybox cannot select a single PID.
let proc_stat = printf('/proc/%d/stat', getpid())
if filereadable(proc_stat)
let get_niceness_cmd = 'cat /proc/$$/stat | cut -f19 -d\ '
else
let get_niceness_cmd = printf('ps -o nice= %d | tr -d \ ', pid)
endif
let maker = NeomakeTestsCommandMaker('nice-sleep', get_niceness_cmd)
" Hook into NeomakeJobInit.
function! s:NeomakeTestJobInit(context) abort
AssertEqual keys(a:context), ['jobinfo']
let jobinfo = a:context.jobinfo
AssertEqual jobinfo.maker.name, 'nice-sleep'
" argv can be a list or string.
if type(jobinfo.argv) == type([])
let jobinfo.argv = ['nice', '-n18'] + jobinfo.argv
else
let jobinfo.argv = 'nice -n 18 '.jobinfo.argv
endif
endfunction
augroup neomake_tests
au User NeomakeJobInit call s:NeomakeTestJobInit(g:neomake_hook_context)
augroup END
call neomake#Make(0, [maker])
NeomakeTestsWaitForFinishedJobs
if neomake#has_async_support()
AssertNeomakeMessage printf("Starting async job: nice -n18 %s -c 'cat /proc/$$/stat | cut -f19 -d\\ '.", &shell), 2
else
AssertNeomakeMessage printf("Starting [string]: nice -n 18 %s -c 'cat /proc/$$/stat | cut -f19 -d\\ '.", &shell)
endif
let niceness = getqflist()[0].text
AssertEqual niceness, '18'