1" Test for timers 2 3source shared.vim 4 5if !has('timers') 6 finish 7endif 8 9func MyHandler(timer) 10 let g:val += 1 11endfunc 12 13func MyHandlerWithLists(lists, timer) 14 let x = string(a:lists) 15endfunc 16 17func Test_oneshot() 18 let g:val = 0 19 let timer = timer_start(50, 'MyHandler') 20 let slept = WaitFor('g:val == 1') 21 call assert_equal(1, g:val) 22 if has('reltime') 23 call assert_inrange(49, 100, slept) 24 else 25 call assert_inrange(20, 100, slept) 26 endif 27endfunc 28 29func Test_repeat_three() 30 let g:val = 0 31 let timer = timer_start(50, 'MyHandler', {'repeat': 3}) 32 let slept = WaitFor('g:val == 3') 33 call assert_equal(3, g:val) 34 if has('reltime') 35 call assert_inrange(149, 250, slept) 36 else 37 call assert_inrange(80, 200, slept) 38 endif 39endfunc 40 41func Test_repeat_many() 42 let g:val = 0 43 let timer = timer_start(50, 'MyHandler', {'repeat': -1}) 44 sleep 200m 45 call timer_stop(timer) 46 call assert_inrange(2, 4, g:val) 47endfunc 48 49func Test_with_partial_callback() 50 let g:val = 0 51 let s:meow = {} 52 function s:meow.bite(...) 53 let g:val += 1 54 endfunction 55 56 call timer_start(50, s:meow.bite) 57 let slept = WaitFor('g:val == 1') 58 call assert_equal(1, g:val) 59 if has('reltime') 60 call assert_inrange(49, 130, slept) 61 else 62 call assert_inrange(20, 100, slept) 63 endif 64endfunc 65 66func Test_retain_partial() 67 call timer_start(50, function('MyHandlerWithLists', [['a']])) 68 call test_garbagecollect_now() 69 sleep 100m 70endfunc 71 72func Test_info() 73 let id = timer_start(1000, 'MyHandler') 74 let info = timer_info(id) 75 call assert_equal(id, info[0]['id']) 76 call assert_equal(1000, info[0]['time']) 77 call assert_true(info[0]['remaining'] > 500) 78 call assert_true(info[0]['remaining'] <= 1000) 79 call assert_equal(1, info[0]['repeat']) 80 call assert_equal("function('MyHandler')", string(info[0]['callback'])) 81 82 let found = 0 83 for info in timer_info() 84 if info['id'] == id 85 let found += 1 86 endif 87 endfor 88 call assert_equal(1, found) 89 90 call timer_stop(id) 91 call assert_equal([], timer_info(id)) 92endfunc 93 94func Test_stopall() 95 let id1 = timer_start(1000, 'MyHandler') 96 let id2 = timer_start(2000, 'MyHandler') 97 let info = timer_info() 98 call assert_equal(2, len(info)) 99 100 call timer_stopall() 101 let info = timer_info() 102 call assert_equal(0, len(info)) 103endfunc 104 105func Test_paused() 106 let g:val = 0 107 108 let id = timer_start(50, 'MyHandler') 109 let info = timer_info(id) 110 call assert_equal(0, info[0]['paused']) 111 112 call timer_pause(id, 1) 113 let info = timer_info(id) 114 call assert_equal(1, info[0]['paused']) 115 sleep 100m 116 call assert_equal(0, g:val) 117 118 call timer_pause(id, 0) 119 let info = timer_info(id) 120 call assert_equal(0, info[0]['paused']) 121 122 let slept = WaitFor('g:val == 1') 123 call assert_equal(1, g:val) 124 if has('reltime') 125 call assert_inrange(0, 30, slept) 126 else 127 call assert_inrange(0, 10, slept) 128 endif 129endfunc 130 131" vim: shiftwidth=2 sts=2 expandtab 132