mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 06:10:05 +08:00
294 lines
11 KiB
Plaintext
Vendored
294 lines
11 KiB
Plaintext
Vendored
Include: include/setup.vader
|
|
|
|
Execute (neomake#CancelJob):
|
|
if NeomakeAsyncTestsSetup()
|
|
let job_id = neomake#Sh("sh -c 'while true; do sleep 0.01; done'")
|
|
let jobinfo = neomake#GetJob(job_id)
|
|
let job = has('nvim') ? jobinfo.nvim_job : string(jobinfo.vim_job)
|
|
AssertEqual neomake#CancelJob(job_id), 1
|
|
AssertNeomakeMessage printf('Stopping %s job: %s.',
|
|
\ (has('nvim') ? 'Neovim' : 'Vim'), job), 3, jobinfo
|
|
|
|
AssertEqual neomake#CancelJob(job_id), 0
|
|
AssertNeomakeMessage 'Job was canceled already.', 2, jobinfo
|
|
|
|
NeomakeTestsWaitForFinishedJobs
|
|
|
|
if has('nvim-0.4.0')
|
|
let expected_status = 143
|
|
elseif has('nvim')
|
|
let expected_status = 0
|
|
else
|
|
let expected_status = -1
|
|
endif
|
|
AssertNeomakeMessage '\Vexit: \.\*: '.expected_status.' (job was canceled).', 3, jobinfo
|
|
AssertNeomakeMessage 'Cleaning jobinfo.', 3, jobinfo
|
|
AssertNeomakeMessage 'Cleaning make info.'
|
|
|
|
AssertEqual neomake#CancelJob(job_id), 0
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0
|
|
endif
|
|
|
|
Execute (neomake#CancelJob with invalid job):
|
|
if NeomakeAsyncTestsSetup()
|
|
let job_id = neomake#Sh("sh -c 'sleep 1'")
|
|
let jobinfo = neomake#GetJob(job_id)
|
|
|
|
" Stop the job manually.
|
|
if has('nvim')
|
|
call jobstop(jobinfo.nvim_job)
|
|
else
|
|
call ch_close(jobinfo.vim_job)
|
|
while job_status(jobinfo.vim_job) !=# 'dead'
|
|
sleep 10m
|
|
endwhile
|
|
endif
|
|
|
|
AssertEqual len(neomake#GetJobs()), 1, 'There are jobs (1)'
|
|
let ret = neomake#CancelJob(job_id)
|
|
AssertEqual ret, 0, 'CancelJob returned 0.'
|
|
AssertEqual len(neomake#GetJobs()), 0, 'There are no more jobs'
|
|
AssertNeomakeMessageAbsent 'exit: job not found: '.job_id.'.'
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
if has('nvim')
|
|
if !has('nvim-0.5')
|
|
AssertNeomakeMessage '\vjobstop failed: Vim\(let\):E900: Invalid (job|channel) id.', 2, jobinfo
|
|
endif
|
|
else
|
|
AssertNeomakeMessage 'job_stop: job was not running anymore.', 2, jobinfo
|
|
endif
|
|
|
|
let ret = neomake#CancelJob(job_id)
|
|
if has('nvim')
|
|
" Vim returns 1 via job_stop usually.
|
|
AssertEqual ret, 0, "CancelJob (2) returned ".ret
|
|
endif
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0, {}
|
|
if has('nvim')
|
|
" With Vim the exit callback is not invoked (since ch_close was used).
|
|
NeomakeTestsWaitForNextMessage
|
|
AssertNeomakeMessage 'exit: job not found: '.jobinfo.nvim_job.'.', 3, {}
|
|
else
|
|
NeomakeCancelJobs!
|
|
endif
|
|
let ret = neomake#CancelJob(job_id)
|
|
AssertEqual ret, 0, "CancelJob (3) returned ".ret
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0, {}
|
|
endif
|
|
|
|
Execute (neomake#CancelJobs! removes canceled jobs):
|
|
if NeomakeAsyncTestsSetup()
|
|
let jobinfos = neomake#Make({'enabled_makers': [g:sleep_maker, g:sleep_maker]})
|
|
let jobinfos[0].canceled = 1
|
|
NeomakeCancelJobs!
|
|
AssertNeomakeMessage 'Canceling 2 jobs.', 3
|
|
AssertNeomakeMessage 'Job was canceled already.', 2, jobinfos[0]
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfos[1]
|
|
AssertNeomakeMessage 'Cleaning jobinfo.', 3, jobinfos[1]
|
|
|
|
NeomakeTestsWaitForMessage '\m^exit: job not found'
|
|
endif
|
|
|
|
Execute (neomake#CancelJob! with invalid job):
|
|
if NeomakeAsyncTestsSetup()
|
|
let job_id = neomake#Sh("sh -c 'sleep 0.1'")
|
|
let jobinfo = neomake#GetJob(job_id)
|
|
|
|
" Stop the job manually.
|
|
if has('nvim')
|
|
call jobstop(jobinfo.nvim_job)
|
|
else
|
|
let vim_job = jobinfo.vim_job
|
|
call job_stop(vim_job)
|
|
endif
|
|
|
|
AssertEqual len(neomake#GetJobs()), 1, 'There are jobs'
|
|
let ret = neomake#CancelJob(job_id, 1)
|
|
|
|
" Jobinfo should have been cleaned already. With Neovim it gets done
|
|
"" anyway, because jobstop fails.
|
|
Assert !len(neomake#GetJobs()), 'There are no jobs'
|
|
if has('nvim')
|
|
" Vim returns 1 via job_stop usually.
|
|
AssertEqual ret, 0, "CancelJob (1) returned ".ret
|
|
endif
|
|
AssertNeomakeMessageAbsent 'exit: job not found: '.job_id.'.'
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
if has('nvim')
|
|
if !has('nvim-0.5')
|
|
AssertNeomakeMessage '\vjobstop failed: Vim\(let\):E900: Invalid (job|channel) id.', 2, jobinfo
|
|
endif
|
|
endif
|
|
AssertEqual neomake#GetJobs(), []
|
|
|
|
AssertEqual neomake#CancelJob(job_id), 0
|
|
AssertNeomakeMessageAbsent '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0
|
|
|
|
NeomakeTestsWaitForFinishedJobs
|
|
AssertNeomakeMessageAbsent 'exit: job not found: '.job_id.'.'
|
|
|
|
if has('nvim')
|
|
NeomakeTestsWaitForMessage 'exit: job not found: '.jobinfo.nvim_job.'.', 3
|
|
else
|
|
NeomakeTestsWaitForMessage '\vexit: job not found: channel \d+ closed \(\{''status'': ''dead''.*\.', 3
|
|
endif
|
|
AssertEqual neomake#CancelJob(job_id, 1), 0
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0
|
|
endif
|
|
|
|
Execute (neomake#CancelJob with trapped TERM):
|
|
if NeomakeAsyncTestsSetup()
|
|
let trap_sh = fnamemodify(g:vader_file, ':p:h').'/helpers/trap.sh'
|
|
let job_id = neomake#ShCommand(1, trap_sh)
|
|
let jobinfo = neomake#GetJob(job_id)
|
|
|
|
" Ensure the script is running.
|
|
NeomakeTestsWaitForMessage '\voutput on stdout: \[''Started: (\d+)''', 3, jobinfo
|
|
let pid = g:neomake_test_matchlist[1]
|
|
|
|
AssertEqual neomake#CancelJob(job_id), 1
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
|
|
NeomakeTestsWaitForMessage '\Moutput on stdout: \.\*''not stopping on SIGTERM''', 3, jobinfo
|
|
AssertNeomakeMessage 'Ignoring output (job was canceled).', 3, jobinfo
|
|
if has('nvim-0.4.0')
|
|
let expected_status = 137
|
|
elseif has('nvim')
|
|
let expected_status = 0
|
|
else
|
|
let expected_status = -1
|
|
endif
|
|
NeomakeTestsWaitForMessage '\Vexit: \.\*: '.expected_status.' (job was canceled).', 3, jobinfo, {'timeout': 5000}
|
|
if !has('nvim')
|
|
AssertNeomakeMessage 'Forcefully killing still running Vim job.', 3, jobinfo, {'ignore_order': 1}
|
|
endif
|
|
|
|
AssertEqual neomake#CancelJob(job_id), 0
|
|
AssertNeomakeMessage 'CancelJob: job not found: '.job_id.'.', 0
|
|
endif
|
|
|
|
Execute (neomake#CancelMake stops all jobs):
|
|
if NeomakeAsyncTestsSetup()
|
|
let jobinfos = neomake#Make({'file_mode': 0, 'enabled_makers': [g:sleep_maker, g:sleep_maker]})
|
|
let make_id = neomake#GetStatus().last_make_id
|
|
AssertEqual neomake#CancelMake(make_id), 1
|
|
NeomakeTestsWaitForFinishedJobs
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$'
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$'
|
|
|
|
if has('nvim-0.4.0')
|
|
let expected_status = 143
|
|
elseif has('nvim')
|
|
let expected_status = 0
|
|
else
|
|
let expected_status = -1
|
|
endif
|
|
AssertNeomakeMessage 'exit: sleep-maker: '.expected_status.' (job was canceled).'
|
|
AssertNeomakeMessage 'Cleaning jobinfo.'
|
|
AssertNeomakeMessage 'exit: sleep-maker: '.expected_status.' (job was canceled).'
|
|
AssertNeomakeMessage 'Cleaning jobinfo.'
|
|
endif
|
|
|
|
Execute (neomake#CancelMake handles invalid make id):
|
|
AssertEqual neomake#CancelMake(-1), 0
|
|
AssertNeomakeMessage 'CancelMake: make not found: -1.', 0
|
|
|
|
Execute (neomake#CancelMake removes queued actions):
|
|
if NeomakeAsyncTestsSetup()
|
|
new
|
|
let maker = NeomakeTestsCommandMaker('silent-sleep-success', 'sleep .01')
|
|
let jobinfo = neomake#Make({'enabled_makers': [maker]})[0]
|
|
new
|
|
NeomakeTestsWaitForFinishedJobs
|
|
AssertNeomakeMessage 'Cleaning jobinfo.', 3
|
|
AssertNeomakeMessage 'Postponing final location list handling (in another window).', 3
|
|
AssertNeomakeMessage 'Queuing action handle_locqf_list_for_finished_jobs for WinEnter.', 3
|
|
|
|
let log_context = neomake#GetStatus().make_info[jobinfo.make_id]
|
|
let log_context.make_id = jobinfo.make_id
|
|
call neomake#CancelAllMakes()
|
|
AssertNeomakeMessage 'Canceling make.', 3, log_context
|
|
AssertNeomakeMessage 'Removed 1 action queue entries.', 3
|
|
AssertNeomakeMessage 'Skipping final processing for canceled make.'
|
|
call neomake#CancelMake(jobinfo.make_id)
|
|
AssertNeomakeMessage 'CancelMake: make not found: '.jobinfo.make_id.'.', 0
|
|
bwipe
|
|
bwipe
|
|
endif
|
|
|
|
Execute (neomake#CancelJob empties action queue):
|
|
if NeomakeAsyncTestsSetup()
|
|
new
|
|
let maker = copy(g:entry_maker)
|
|
function! maker.get_list_entries(...)
|
|
wincmd p
|
|
return [{'text': 'entry_text', 'lnum': 1}]
|
|
endfunction
|
|
let jobinfo = neomake#Make({'enabled_makers': [maker]})[0]
|
|
let job_id = jobinfo.id
|
|
NeomakeTestsWaitForMessage 'Queuing action ProcessEntries for BufEnter, WinEnter.'
|
|
AssertNeomakeMessage "Skipping cleaning of job info because of queued actions: ['ProcessEntries', ['BufEnter', 'WinEnter']].", 3
|
|
AssertNeomakeMessage 'Queuing action CleanJobinfo for WinEnter.'
|
|
call neomake#CancelJob(job_id)
|
|
AssertNeomakeMessage 'Removed 2 action queue entries.', 3
|
|
AssertNeomakeMessage 'Removing job for get_list_entries.', 3, jobinfo
|
|
wincmd p
|
|
AssertNeomakeMessage 'Cleaning make info.', 3
|
|
bwipe
|
|
Assert !exists('#neomake_event_queue#WinEnter'), 'autocmd does not exist'
|
|
endif
|
|
|
|
Execute (neomake#CancelJob handles dict):
|
|
if NeomakeAsyncTestsSetup()
|
|
let jobinfo = neomake#Make({'enabled_makers': [g:sleep_maker]})[0]
|
|
Assert type(jobinfo), type({})
|
|
AssertEqual neomake#CancelJob(jobinfo), 1
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
NeomakeTestsWaitForFinishedJobs
|
|
endif
|
|
|
|
Execute (neomake#CancelJob handles string with job_id at the beginning):
|
|
if NeomakeAsyncTestsSetup()
|
|
let jobinfo = neomake#Make({'enabled_makers': [g:sleep_maker]})[0]
|
|
AssertEqual neomake#CancelJob(jobinfo.id . ':'), 1
|
|
AssertNeomakeMessage '\v^Stopping \w+ job: .+\.$', 3, jobinfo
|
|
NeomakeTestsWaitForFinishedJobs
|
|
endif
|
|
|
|
Execute (neomake#CancelJob clears action queue for get_list_entries maker):
|
|
if NeomakeAsyncTestsSetup()
|
|
let maker = {}
|
|
function! maker.get_list_entries(...) abort dict
|
|
" causes E48
|
|
sandbox bprevious
|
|
endfunction
|
|
|
|
let jobinfo = neomake#Make({'enabled_makers': [maker]})[0]
|
|
AssertNeomakeMessage 'Queuing action handle_get_list_entries for Timer, WinEnter.'
|
|
|
|
" CancelJob returns 0, since it is processed directly.
|
|
AssertEqual neomake#CancelJob(jobinfo), 0
|
|
AssertNeomakeMessage 'Canceling job.', 3, jobinfo
|
|
AssertNeomakeMessage 'Removed 1 action queue entries.', 3
|
|
AssertNeomakeMessage 'Removing job for get_list_entries.', 3
|
|
AssertNeomakeMessage 'Cleaning jobinfo.', 3
|
|
AssertNeomakeMessage 'Cleaning make info.', 3
|
|
endif
|
|
|
|
Execute (CleanJobinfo with cancellation while in exit handler):
|
|
new
|
|
let maker = copy(g:error_maker)
|
|
let maker.name = 'mymaker1'
|
|
function! maker.process_output(...)
|
|
NeomakeCancelJobs
|
|
return [{'lnum': 1, 'text': 'still_processed'}]
|
|
endfunction
|
|
|
|
CallNeomake 1, [maker]
|
|
AssertNeomakeMessage 'Canceling 1 jobs.', 3
|
|
AssertNeomakeMessage 'Job exited already.', 3
|
|
|
|
AssertEqual map(getloclist(0), 'v:val.text'), []
|
|
bwipe
|