blob: f334c17464a242666d5a6b7ffb14a4036d8222ac [file] [log] [blame]
" Test for timers
source shared.vim
if !has('timers')
finish
endif
func MyHandler(timer)
let g:val += 1
endfunc
func MyHandlerWithLists(lists, timer)
let x = string(a:lists)
endfunc
func Test_oneshot()
let g:val = 0
let timer = timer_start(50, 'MyHandler')
let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val)
call assert_inrange(30, 100, slept)
endfunc
func Test_repeat_three()
let g:val = 0
let timer = timer_start(50, 'MyHandler', {'repeat': 3})
let slept = WaitFor('g:val == 3')
call assert_equal(3, g:val)
call assert_inrange(80, 200, slept)
endfunc
func Test_repeat_many()
let g:val = 0
let timer = timer_start(50, 'MyHandler', {'repeat': -1})
sleep 200m
call timer_stop(timer)
call assert_inrange(2, 4, g:val)
endfunc
func Test_with_partial_callback()
let g:val = 0
let s:meow = {}
function s:meow.bite(...)
let g:val += 1
endfunction
call timer_start(50, s:meow.bite)
let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val)
call assert_inrange(30, 100, slept)
endfunc
func Test_retain_partial()
call timer_start(50, function('MyHandlerWithLists', [['a']]))
call test_garbagecollect_now()
sleep 100m
endfunc
func Test_info()
let id = timer_start(1000, 'MyHandler')
let info = timer_info(id)
call assert_equal(id, info[0]['id'])
call assert_equal(1000, info[0]['time'])
call assert_true(info[0]['remaining'] > 500)
call assert_true(info[0]['remaining'] <= 1000)
call assert_equal(1, info[0]['repeat'])
call assert_equal("function('MyHandler')", string(info[0]['callback']))
let found = 0
for info in timer_info()
if info['id'] == id
let found += 1
endif
endfor
call assert_equal(1, found)
call timer_stop(id)
call assert_equal([], timer_info(id))
endfunc
func Test_stopall()
let id1 = timer_start(1000, 'MyHandler')
let id2 = timer_start(2000, 'MyHandler')
let info = timer_info()
call assert_equal(2, len(info))
call timer_stopall()
let info = timer_info()
call assert_equal(0, len(info))
endfunc
func Test_paused()
let g:val = 0
let id = timer_start(50, 'MyHandler')
let info = timer_info(id)
call assert_equal(0, info[0]['paused'])
call timer_pause(id, 1)
let info = timer_info(id)
call assert_equal(1, info[0]['paused'])
sleep 100m
call assert_equal(0, g:val)
call timer_pause(id, 0)
let info = timer_info(id)
call assert_equal(0, info[0]['paused'])
let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val)
call assert_inrange(0, 10, slept)
endfunc
" vim: ts=2 sw=0 et