blob: 46777d1ea5993b59bc09357eb9cb59172ade1c30 [file] [log] [blame]
Bram Moolenaar975b5272016-03-15 23:10:59 +01001" Test for timers
2
Bram Moolenaarb73598e2016-08-07 18:22:53 +02003source shared.vim
4
Bram Moolenaar975b5272016-03-15 23:10:59 +01005if !has('timers')
6 finish
7endif
8
9func MyHandler(timer)
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010 let g:val += 1
Bram Moolenaar975b5272016-03-15 23:10:59 +010011endfunc
12
Bram Moolenaare3188e22016-05-31 21:13:04 +020013func MyHandlerWithLists(lists, timer)
14 let x = string(a:lists)
15endfunc
16
Bram Moolenaar975b5272016-03-15 23:10:59 +010017func Test_oneshot()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020018 let g:val = 0
Bram Moolenaar975b5272016-03-15 23:10:59 +010019 let timer = timer_start(50, 'MyHandler')
Bram Moolenaarb73598e2016-08-07 18:22:53 +020020 let slept = WaitFor('g:val == 1')
21 call assert_equal(1, g:val)
22 call assert_inrange(30, 100, slept)
Bram Moolenaar975b5272016-03-15 23:10:59 +010023endfunc
24
25func Test_repeat_three()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020026 let g:val = 0
Bram Moolenaar975b5272016-03-15 23:10:59 +010027 let timer = timer_start(50, 'MyHandler', {'repeat': 3})
Bram Moolenaarb73598e2016-08-07 18:22:53 +020028 let slept = WaitFor('g:val == 3')
29 call assert_equal(3, g:val)
Bram Moolenaar36d1c0f2016-08-08 22:46:14 +020030 call assert_inrange(80, 200, slept)
Bram Moolenaar975b5272016-03-15 23:10:59 +010031endfunc
32
33func Test_repeat_many()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020034 let g:val = 0
Bram Moolenaar975b5272016-03-15 23:10:59 +010035 let timer = timer_start(50, 'MyHandler', {'repeat': -1})
36 sleep 200m
37 call timer_stop(timer)
Bram Moolenaarb73598e2016-08-07 18:22:53 +020038 call assert_inrange(2, 4, g:val)
Bram Moolenaar975b5272016-03-15 23:10:59 +010039endfunc
Bram Moolenaar92e35ef2016-03-26 18:20:41 +010040
41func Test_with_partial_callback()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020042 let g:val = 0
Bram Moolenaar92e35ef2016-03-26 18:20:41 +010043 let s:meow = {}
44 function s:meow.bite(...)
Bram Moolenaarb73598e2016-08-07 18:22:53 +020045 let g:val += 1
Bram Moolenaar92e35ef2016-03-26 18:20:41 +010046 endfunction
47
48 call timer_start(50, s:meow.bite)
Bram Moolenaarb73598e2016-08-07 18:22:53 +020049 let slept = WaitFor('g:val == 1')
50 call assert_equal(1, g:val)
51 call assert_inrange(30, 100, slept)
Bram Moolenaar92e35ef2016-03-26 18:20:41 +010052endfunc
Bram Moolenaare3188e22016-05-31 21:13:04 +020053
54func Test_retain_partial()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020055 call timer_start(50, function('MyHandlerWithLists', [['a']]))
Bram Moolenaare3188e22016-05-31 21:13:04 +020056 call test_garbagecollect_now()
Bram Moolenaarb73598e2016-08-07 18:22:53 +020057 sleep 100m
Bram Moolenaare3188e22016-05-31 21:13:04 +020058endfunc
Bram Moolenaarb73598e2016-08-07 18:22:53 +020059
60func Test_info()
61 let id = timer_start(1000, 'MyHandler')
62 let info = timer_info(id)
63 call assert_equal(id, info[0]['id'])
64 call assert_equal(1000, info[0]['time'])
65 call assert_true(info[0]['remaining'] > 500)
66 call assert_true(info[0]['remaining'] <= 1000)
67 call assert_equal(1, info[0]['repeat'])
68 call assert_equal("function('MyHandler')", string(info[0]['callback']))
69
70 let found = 0
71 for info in timer_info()
72 if info['id'] == id
73 let found += 1
74 endif
75 endfor
76 call assert_equal(1, found)
77
78 call timer_stop(id)
79 call assert_equal([], timer_info(id))
80endfunc
81
82func Test_stopall()
83 let id1 = timer_start(1000, 'MyHandler')
84 let id2 = timer_start(2000, 'MyHandler')
85 let info = timer_info()
86 call assert_equal(2, len(info))
87
88 call timer_stopall()
89 let info = timer_info()
90 call assert_equal(0, len(info))
91endfunc
92
93func Test_paused()
94 let g:val = 0
95
96 let id = timer_start(50, 'MyHandler')
97 let info = timer_info(id)
98 call assert_equal(0, info[0]['paused'])
99
100 call timer_pause(id, 1)
101 let info = timer_info(id)
102 call assert_equal(1, info[0]['paused'])
103 sleep 100m
104 call assert_equal(0, g:val)
105
106 call timer_pause(id, 0)
107 let info = timer_info(id)
108 call assert_equal(0, info[0]['paused'])
109
110 let slept = WaitFor('g:val == 1')
111 call assert_equal(1, g:val)
112 call assert_inrange(0, 10, slept)
113endfunc
114
Bram Moolenaar9e4d8212016-08-18 23:04:48 +0200115" vim: shiftwidth=2 sts=2 expandtab