You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
function! s:on_stdout(ctx, id, data, event) abort
|
|
call add(a:ctx.output, join(a:data, ''))
|
|
call async#job#stop(a:id)
|
|
endfunction
|
|
|
|
Describe async
|
|
Before
|
|
let scope = themis#helper('scope')
|
|
let vars = scope.vars('autoload/async/job.vim')
|
|
End
|
|
|
|
Describe async#job#start
|
|
It can start cmmand and return numbered job-id
|
|
let job = async#job#start('vim --version', {})
|
|
Assert Equals(type(job), v:t_number)
|
|
End
|
|
End
|
|
|
|
Describe async#job#stop
|
|
It can stop the job specified
|
|
let job = async#job#start('bash -c "sleep 2 && touch i-love-vim"', {})
|
|
sleep 3
|
|
call async#job#stop(job)
|
|
Assert filereadable('i-love-vim')
|
|
call delete('i-love-vim')
|
|
|
|
let job = async#job#start('bash -c "sleep 2 && touch i-love-vim"', {})
|
|
sleep 1
|
|
call async#job#stop(job)
|
|
Assert !filereadable('i-love-vim')
|
|
End
|
|
|
|
It invokes 'on_exit' callback
|
|
let ns = { 'called': 0 }
|
|
let job = async#job#start('bash -c "sleep 2 && touch i-love-vim"', {
|
|
\ 'on_exit': { -> extend(ns, { 'called': 1 }) },
|
|
\})
|
|
call async#job#stop(job)
|
|
sleep 1m
|
|
Assert Equals(ns, {'called': 1})
|
|
End
|
|
|
|
It removes a corresponding job from an internal variable
|
|
let job1 = async#job#start('bash -c "sleep 2 && touch i-love-vim"', {})
|
|
let job2 = async#job#start('bash -c "sleep 2 && touch i-love-vim"', {})
|
|
Assert Equals(sort(keys(vars.jobs)), sort([string(job1), string(job2)]))
|
|
call async#job#stop(job1)
|
|
sleep 1m
|
|
Assert Equals(sort(keys(vars.jobs)), sort([string(job2)]))
|
|
sleep 3
|
|
Assert Equals(sort(keys(vars.jobs)), [])
|
|
End
|
|
End
|
|
|
|
Describe async#job#wait
|
|
It can wait the job specified
|
|
let job = async#job#start('bash -c "sleep 2"', {})
|
|
let start = reltime()
|
|
call async#job#wait([job])
|
|
let seconds = reltimefloat(reltime(start))
|
|
call async#job#stop(job)
|
|
Assert seconds > 2
|
|
End
|
|
End
|
|
|
|
Describe async#job#send
|
|
It can send input text to the job
|
|
let ctx = { 'output': [] }
|
|
let job = async#job#start('cat', {'on_stdout': function('s:on_stdout', [ctx])})
|
|
call async#job#send(job, "i-love-vim\n")
|
|
call async#job#wait([job])
|
|
let out = join(ctx.output, '')
|
|
Assert Equals(out, 'i-love-vim')
|
|
End
|
|
End
|
|
End
|
|
|