annotate src/testdir/test_timers.vim @ 20709:a2262c80a4e0 v8.2.0908

patch 8.2.0908: crash when changing the function table while listing it Commit: https://github.com/vim/vim/commit/3fffa97159a427067b60c80ed4645e168cc5c4bd Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 5 21:06:10 2020 +0200 patch 8.2.0908: crash when changing the function table while listing it Problem: Crash when changing the function table while listing it. Solution: Bail out when the function table changes. (closes https://github.com/vim/vim/issues/6209)
author Bram Moolenaar <Bram@vim.org>
date Fri, 05 Jun 2020 21:15:04 +0200
parents 116c7bd5e980
children ff21e2962490
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test for timers
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
17089
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
3 source check.vim
8e9e9124c7a2 patch 8.1.1544: some balloon tests don't run when they can
Bram Moolenaar <Bram@vim.org>
parents: 17049
diff changeset
4 CheckFeature timers
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5
20709
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
6 source screendump.vim
12568
440d934bd616 patch 8.0.1162: shared script for tests cannot be included twice
Christian Brabandt <cb@256bit.org>
parents: 12459
diff changeset
7 source shared.vim
17164
7927cf327396 patch 8.1.1581: shared functions for testing are disorganised
Bram Moolenaar <Bram@vim.org>
parents: 17159
diff changeset
8 source term_util.vim
12351
4e61b77cd96f patch 8.0.1055: bufline test hangs on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 12347
diff changeset
9
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 func MyHandler(timer)
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
11 let g:val += 1
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 endfunc
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
14 func MyHandlerWithLists(lists, timer)
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
15 let x = string(a:lists)
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
16 endfunc
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
17
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
18 func Test_timer_oneshot()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
19 let g:val = 0
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 let timer = timer_start(50, 'MyHandler')
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
21 let slept = WaitFor('g:val == 1')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
22 call assert_equal(1, g:val)
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
23 if has('mac')
18964
8295f4061dc2 patch 8.2.0043: timers test is still flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18920
diff changeset
24 " Mac on Travis can be very slow.
8295f4061dc2 patch 8.2.0043: timers test is still flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18920
diff changeset
25 let limit = 180
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
26 else
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
27 let limit = 100
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
28 endif
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
29 if has('reltime')
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
30 call assert_inrange(49, limit, slept)
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
31 else
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
32 call assert_inrange(20, limit, slept)
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
33 endif
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 endfunc
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
36 func Test_timer_repeat_three()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
37 let g:val = 0
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38 let timer = timer_start(50, 'MyHandler', {'repeat': 3})
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
39 let slept = WaitFor('g:val == 3')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
40 call assert_equal(3, g:val)
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
41 if has('reltime')
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
42 if has('mac')
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
43 " Mac on Travis can be slow.
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
44 call assert_inrange(149, 400, slept)
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
45 else
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
46 call assert_inrange(149, 250, slept)
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
47 endif
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
48 else
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
49 call assert_inrange(80, 200, slept)
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
50 endif
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
51 endfunc
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
52
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
53 func Test_timer_repeat_many()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
54 let g:val = 0
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
55 let timer = timer_start(50, 'MyHandler', {'repeat': -1})
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
56 sleep 200m
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
57 call timer_stop(timer)
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
58 " Mac on Travis can be slow.
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
59 if has('mac')
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
60 call assert_inrange(1, 5, g:val)
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
61 else
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
62 call assert_inrange(2, 5, g:val)
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
63 endif
8577
63dc856bd13d commit https://github.com/vim/vim/commit/975b5271eed4fa0500c24a8f37be0b1797cb9db7
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
64 endfunc
8734
986f7c00d43d commit https://github.com/vim/vim/commit/92e35efaf6a3278e4729115648997f09cd4005f5
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
65
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
66 func Test_timer_with_partial_callback()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
67 let g:val = 0
10178
776d0aef1d80 commit https://github.com/vim/vim/commit/26fe0d56912e42c2b16a61b2480e19ba569aee98
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
68 let meow = {'one': 1}
776d0aef1d80 commit https://github.com/vim/vim/commit/26fe0d56912e42c2b16a61b2480e19ba569aee98
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
69 function meow.bite(...)
776d0aef1d80 commit https://github.com/vim/vim/commit/26fe0d56912e42c2b16a61b2480e19ba569aee98
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
70 let g:val += self.one
8734
986f7c00d43d commit https://github.com/vim/vim/commit/92e35efaf6a3278e4729115648997f09cd4005f5
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
71 endfunction
986f7c00d43d commit https://github.com/vim/vim/commit/92e35efaf6a3278e4729115648997f09cd4005f5
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
72
10178
776d0aef1d80 commit https://github.com/vim/vim/commit/26fe0d56912e42c2b16a61b2480e19ba569aee98
Christian Brabandt <cb@256bit.org>
parents: 10122
diff changeset
73 call timer_start(50, meow.bite)
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
74 let slept = WaitFor('g:val == 1')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
75 call assert_equal(1, g:val)
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
76 if has('reltime')
18975
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
77 " Mac on Travis can be slow.
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
78 if has('mac')
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
79 call assert_inrange(49, 180, slept)
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
80 else
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
81 call assert_inrange(49, 130, slept)
8696f0ebeb43 patch 8.2.0048: another timers test is flaky on Travis for Mac
Bram Moolenaar <Bram@vim.org>
parents: 18964
diff changeset
82 endif
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
83 else
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
84 call assert_inrange(20, 100, slept)
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
85 endif
8734
986f7c00d43d commit https://github.com/vim/vim/commit/92e35efaf6a3278e4729115648997f09cd4005f5
Christian Brabandt <cb@256bit.org>
parents: 8577
diff changeset
86 endfunc
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
87
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
88 func Test_timer_retain_partial()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
89 call timer_start(50, function('MyHandlerWithLists', [['a']]))
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
90 call test_garbagecollect_now()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
91 sleep 100m
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
92 endfunc
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
93
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
94 func Test_timer_info()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
95 let id = timer_start(1000, 'MyHandler')
18035
11dca9732a48 patch 8.1.2013: more functions can be used as methods
Bram Moolenaar <Bram@vim.org>
parents: 18031
diff changeset
96 let info = id->timer_info()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
97 call assert_equal(id, info[0]['id'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
98 call assert_equal(1000, info[0]['time'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
99 call assert_true(info[0]['remaining'] > 500)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
100 call assert_true(info[0]['remaining'] <= 1000)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
101 call assert_equal(1, info[0]['repeat'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
102 call assert_equal("function('MyHandler')", string(info[0]['callback']))
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
103
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
104 let found = 0
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
105 for info in timer_info()
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
106 if info['id'] == id
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
107 let found += 1
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
108 endif
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
109 endfor
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
110 call assert_equal(1, found)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
111
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
112 call timer_stop(id)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
113 call assert_equal([], timer_info(id))
19289
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
114
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
115 call assert_fails('call timer_info("abc")', 'E39:')
9153
c2fe86f2bda1 commit https://github.com/vim/vim/commit/e3188e261569ae512fb1ae2653b57fdd9e259ca3
Christian Brabandt <cb@256bit.org>
parents: 8734
diff changeset
116 endfunc
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
117
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
118 func Test_timer_stopall()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
119 let id1 = timer_start(1000, 'MyHandler')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
120 let id2 = timer_start(2000, 'MyHandler')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
121 let info = timer_info()
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
122 call assert_equal(2, len(info))
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
123
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
124 call timer_stopall()
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
125 let info = timer_info()
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
126 call assert_equal(0, len(info))
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
127 endfunc
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
128
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
129 func Test_timer_paused()
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
130 let g:val = 0
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
131
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
132 let id = timer_start(50, 'MyHandler')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
133 let info = timer_info(id)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
134 call assert_equal(0, info[0]['paused'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
135
18035
11dca9732a48 patch 8.1.2013: more functions can be used as methods
Bram Moolenaar <Bram@vim.org>
parents: 18031
diff changeset
136 eval id->timer_pause(1)
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
137 let info = timer_info(id)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
138 call assert_equal(1, info[0]['paused'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
139 sleep 100m
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
140 call assert_equal(0, g:val)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
141
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
142 call timer_pause(id, 0)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
143 let info = timer_info(id)
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
144 call assert_equal(0, info[0]['paused'])
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
145
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
146 let slept = WaitFor('g:val == 1')
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
147 call assert_equal(1, g:val)
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
148 if has('reltime')
13098
318577da90b1 patch 8.0.1424: the timer_pause test is flaky on Travis
Christian Brabandt <cb@256bit.org>
parents: 12568
diff changeset
149 if has('mac')
318577da90b1 patch 8.0.1424: the timer_pause test is flaky on Travis
Christian Brabandt <cb@256bit.org>
parents: 12568
diff changeset
150 " The travis Mac machines appear to be very busy.
18920
a76fdc6560c3 patch 8.2.0021: timer test fails too often on Travis with MacOS
Bram Moolenaar <Bram@vim.org>
parents: 18035
diff changeset
151 call assert_inrange(0, 90, slept)
13098
318577da90b1 patch 8.0.1424: the timer_pause test is flaky on Travis
Christian Brabandt <cb@256bit.org>
parents: 12568
diff changeset
152 else
318577da90b1 patch 8.0.1424: the timer_pause test is flaky on Travis
Christian Brabandt <cb@256bit.org>
parents: 12568
diff changeset
153 call assert_inrange(0, 30, slept)
318577da90b1 patch 8.0.1424: the timer_pause test is flaky on Travis
Christian Brabandt <cb@256bit.org>
parents: 12568
diff changeset
154 endif
9933
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
155 else
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
156 call assert_inrange(0, 10, slept)
7f38e72a9d65 commit https://github.com/vim/vim/commit/f267f8bdf777073e392ada5b31d837c7b6090eb4
Christian Brabandt <cb@256bit.org>
parents: 9909
diff changeset
157 endif
19289
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
158
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
159 call assert_fails('call timer_pause("abc", 1)', 'E39:')
9810
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
160 endfunc
6a28d0c6f929 commit https://github.com/vim/vim/commit/b73598e2f022a22fec512ea681c70d2775e8fd87
Christian Brabandt <cb@256bit.org>
parents: 9153
diff changeset
161
10066
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
162 func StopMyself(timer)
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
163 let g:called += 1
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
164 if g:called == 2
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
165 call timer_stop(a:timer)
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
166 endif
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
167 endfunc
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
168
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
169 func Test_timer_delete_myself()
10066
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
170 let g:called = 0
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
171 let t = timer_start(10, 'StopMyself', {'repeat': -1})
13808
16a062cf08c2 patch 8.0.1776: in tests, when WaitFor() fails it doesn't say why
Christian Brabandt <cb@256bit.org>
parents: 13164
diff changeset
172 call WaitForAssert({-> assert_equal(2, g:called)})
10066
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
173 call assert_equal(2, g:called)
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
174 call assert_equal([], timer_info(t))
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
175 endfunc
dc1610dc910f commit https://github.com/vim/vim/commit/417ccd7138d4d230d328de8b0d3892dd82ff1bee
Christian Brabandt <cb@256bit.org>
parents: 10017
diff changeset
176
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
177 func StopTimer1(timer)
18035
11dca9732a48 patch 8.1.2013: more functions can be used as methods
Bram Moolenaar <Bram@vim.org>
parents: 18031
diff changeset
178 let g:timer2 = 10->timer_start('StopTimer2')
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
179 " avoid maxfuncdepth error
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
180 call timer_pause(g:timer1, 1)
17734
c92899aa761a patch 8.1.1864: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17724
diff changeset
181 sleep 20m
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
182 endfunc
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
183
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
184 func StopTimer2(timer)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
185 call timer_stop(g:timer1)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
186 endfunc
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
187
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
188 func Test_timer_stop_in_callback()
17724
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
189 call assert_equal(0, len(timer_info()))
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
190 let g:timer1 = timer_start(10, 'StopTimer1')
17740
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
191 let slept = 0
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
192 for i in range(10)
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
193 if len(timer_info()) == 0
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
194 break
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
195 endif
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
196 sleep 10m
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
197 let slept += 10
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
198 endfor
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
199 " This should take only 30 msec, but on Mac it's often longer
01205ef5646d patch 8.1.1867: still a timer test that is flaky on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17734
diff changeset
200 call assert_inrange(0, 50, slept)
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
201 endfunc
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
202
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
203 func StopTimerAll(timer)
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
204 call timer_stopall()
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
205 endfunc
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
206
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
207 func Test_timer_stop_all_in_callback()
17724
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
208 call assert_equal(0, len(timer_info()))
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
209 call timer_start(10, 'StopTimerAll')
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
210 call assert_equal(1, len(timer_info()))
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
211 let slept = 0
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
212 for i in range(10)
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
213 if len(timer_info()) == 0
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
214 break
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
215 endif
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
216 sleep 10m
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
217 let slept += 10
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
218 endfor
76fba68d1c67 patch 8.1.1859: timer test sometimes fails on Mac
Bram Moolenaar <Bram@vim.org>
parents: 17716
diff changeset
219 call assert_inrange(0, 30, slept)
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
220 endfunc
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
221
11575
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
222 func FeedkeysCb(timer)
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
223 call feedkeys("hello\<CR>", 'nt')
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
224 endfunc
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
225
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
226 func InputCb(timer)
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
227 call timer_start(10, 'FeedkeysCb')
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
228 let g:val = input('?')
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
229 call Resume()
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
230 endfunc
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
231
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
232 func Test_timer_input_in_timer()
11575
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
233 let g:val = ''
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
234 call timer_start(10, 'InputCb')
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
235 call Standby(1000)
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
236 call assert_equal('hello', g:val)
0ec755ff1fe2 patch 8.0.0670: can't use input() in a timer callback
Christian Brabandt <cb@256bit.org>
parents: 10178
diff changeset
237 endfunc
10122
3db463d4df25 commit https://github.com/vim/vim/commit/75537a93e985ef32e6c267b06ce93629855dd983
Christian Brabandt <cb@256bit.org>
parents: 10066
diff changeset
238
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
239 func FuncWithError(timer)
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
240 let g:call_count += 1
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
241 if g:call_count == 4
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
242 return
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
243 endif
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
244 doesnotexist
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
245 endfunc
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
246
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
247 func Test_timer_errors()
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
248 let g:call_count = 0
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
249 let timer = timer_start(10, 'FuncWithError', {'repeat': -1})
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
250 " Timer will be stopped after failing 3 out of 3 times.
13808
16a062cf08c2 patch 8.0.1776: in tests, when WaitFor() fails it doesn't say why
Christian Brabandt <cb@256bit.org>
parents: 13164
diff changeset
251 call WaitForAssert({-> assert_equal(3, g:call_count)})
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
252 sleep 50m
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
253 call assert_equal(3, g:call_count)
19289
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
254
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
255 call assert_fails('call timer_start(100, "MyHandler", "abc")', 'E475:')
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
256 call assert_fails('call timer_start(100, [])', 'E921:')
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
257 call assert_fails('call timer_stop("abc")', 'E39:')
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
258 endfunc
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
259
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
260 func FuncWithCaughtError(timer)
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
261 let g:call_count += 1
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
262 try
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
263 doesnotexist
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
264 catch
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
265 " nop
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
266 endtry
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
267 endfunc
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
268
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
269 func Test_timer_catch_error()
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
270 let g:call_count = 0
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
271 let timer = timer_start(10, 'FuncWithCaughtError', {'repeat': 4})
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
272 " Timer will not be stopped.
13808
16a062cf08c2 patch 8.0.1776: in tests, when WaitFor() fails it doesn't say why
Christian Brabandt <cb@256bit.org>
parents: 13164
diff changeset
273 call WaitForAssert({-> assert_equal(4, g:call_count)})
12375
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
274 sleep 50m
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
275 call assert_equal(4, g:call_count)
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
276 endfunc
ab0d827151a1 patch 8.0.1067: try/catch in timer does not prevent it from being stopped
Christian Brabandt <cb@256bit.org>
parents: 12351
diff changeset
277
12337
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
278 func FeedAndPeek(timer)
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
279 call test_feedinput('a')
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
280 call getchar(1)
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
281 endfunc
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
282
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
283 func Interrupt(timer)
18031
8a2fb21c23c0 patch 8.1.2011: more functions can be used as methods
Bram Moolenaar <Bram@vim.org>
parents: 17740
diff changeset
284 eval "\<C-C>"->test_feedinput()
12337
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
285 endfunc
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
286
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
287 func Test_timer_peek_and_get_char()
17657
0da9bc55c31a patch 8.1.1826: tests use hand coded feature and option checks
Bram Moolenaar <Bram@vim.org>
parents: 17249
diff changeset
288 CheckUnix
0da9bc55c31a patch 8.1.1826: tests use hand coded feature and option checks
Bram Moolenaar <Bram@vim.org>
parents: 17249
diff changeset
289 CheckGui
0da9bc55c31a patch 8.1.1826: tests use hand coded feature and option checks
Bram Moolenaar <Bram@vim.org>
parents: 17249
diff changeset
290
12337
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
291 call timer_start(0, 'FeedAndPeek')
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
292 let intr = timer_start(100, 'Interrupt')
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
293 let c = getchar()
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
294 call assert_equal(char2nr('a'), c)
18035
11dca9732a48 patch 8.1.2013: more functions can be used as methods
Bram Moolenaar <Bram@vim.org>
parents: 18031
diff changeset
295 eval intr->timer_stop()
12337
040a892d0eed patch 8.0.1048: no test for what 8.0.1020 fixes
Christian Brabandt <cb@256bit.org>
parents: 11639
diff changeset
296 endfunc
11639
71d7b5ed08a0 patch 8.0.0702: an error in a timer can make Vim unusable
Christian Brabandt <cb@256bit.org>
parents: 11575
diff changeset
297
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
298 func Test_timer_getchar_zero()
15687
cb501b3c9fb5 patch 8.1.0851: feedkeys() with "L" does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 15673
diff changeset
299 if has('win32') && !has('gui_running')
17657
0da9bc55c31a patch 8.1.1826: tests use hand coded feature and option checks
Bram Moolenaar <Bram@vim.org>
parents: 17249
diff changeset
300 throw 'Skipped: cannot get low-level input'
15669
d2ec272ae777 patch 8.1.0842: getchar_zero test fails on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 15665
diff changeset
301 endif
19249
2a017e9dc6da patch 8.2.0183: tests fail when the float feature is disabled
Bram Moolenaar <Bram@vim.org>
parents: 18975
diff changeset
302 CheckFunction reltimefloat
15669
d2ec272ae777 patch 8.1.0842: getchar_zero test fails on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 15665
diff changeset
303
15673
2973d8252740 patch 8.1.0844: when timer fails test will hang forever
Bram Moolenaar <Bram@vim.org>
parents: 15669
diff changeset
304 " Measure the elapsed time to avoid a hang when it fails.
2973d8252740 patch 8.1.0844: when timer fails test will hang forever
Bram Moolenaar <Bram@vim.org>
parents: 15669
diff changeset
305 let start = reltime()
15687
cb501b3c9fb5 patch 8.1.0851: feedkeys() with "L" does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 15673
diff changeset
306 let id = timer_start(20, {-> feedkeys('x', 'L')})
15665
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
307 let c = 0
15673
2973d8252740 patch 8.1.0844: when timer fails test will hang forever
Bram Moolenaar <Bram@vim.org>
parents: 15669
diff changeset
308 while c == 0 && reltimefloat(reltime(start)) < 0.2
15665
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
309 let c = getchar(0)
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
310 sleep 10m
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
311 endwhile
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
312 call assert_equal('x', nr2char(c))
15669
d2ec272ae777 patch 8.1.0842: getchar_zero test fails on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 15665
diff changeset
313 call timer_stop(id)
15665
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
314 endfunc
31367ce5aac7 patch 8.1.0840: getchar(0) never returns a character in the terminal
Bram Moolenaar <Bram@vim.org>
parents: 13892
diff changeset
315
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
316 func Test_timer_ex_mode()
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
317 " Function with an empty line.
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
318 func Foo(...)
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
319
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
320 endfunc
15669
d2ec272ae777 patch 8.1.0842: getchar_zero test fails on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 15665
diff changeset
321 let timer = timer_start(40, function('g:Foo'), {'repeat':-1})
12459
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
322 " This used to throw error E749.
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
323 exe "normal Qsleep 100m\rvi\r"
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
324 call timer_stop(timer)
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
325 endfunc
937356f8f8d6 patch 8.0.1109: timer causes error on exit from Ex mode
Christian Brabandt <cb@256bit.org>
parents: 12375
diff changeset
326
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
327 func Test_timer_restore_count()
20625
116c7bd5e980 patch 8.2.0866: not enough tests for buffer writing
Bram Moolenaar <Bram@vim.org>
parents: 19954
diff changeset
328 CheckRunVimInTerminal
13892
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
329 " Check that v:count is saved and restored, not changed by a timer.
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
330 call writefile([
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
331 \ 'nnoremap <expr><silent> L v:count ? v:count . "l" : "l"',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
332 \ 'func Doit(id)',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
333 \ ' normal 3j',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
334 \ 'endfunc',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
335 \ 'call timer_start(100, "Doit")',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
336 \ ], 'Xtrcscript')
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
337 call writefile([
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
338 \ '1-1234',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
339 \ '2-1234',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
340 \ '3-1234',
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
341 \ ], 'Xtrctext')
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
342 let buf = RunVimInTerminal('-S Xtrcscript Xtrctext', {})
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
343
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
344 " Wait for the timer to move the cursor to the third line.
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
345 call WaitForAssert({-> assert_equal(3, term_getcursor(buf)[0])})
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
346 call assert_equal(1, term_getcursor(buf)[1])
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
347 " Now check that v:count has not been set to 3
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
348 call term_sendkeys(buf, 'L')
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
349 call WaitForAssert({-> assert_equal(2, term_getcursor(buf)[1])})
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
350
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
351 call StopVimInTerminal(buf)
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
352 call delete('Xtrcscript')
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
353 call delete('Xtrctext')
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
354 endfunc
eadecbe4e390 patch 8.0.1817: a timer may change v:count unexpectedly
Christian Brabandt <cb@256bit.org>
parents: 13808
diff changeset
355
17159
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
356 " Test that the garbage collector isn't triggered if a timer callback invokes
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
357 " vgetc().
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
358 func Test_timer_nocatch_garbage_collect()
17159
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
359 " 'uptimetime. must be bigger than the timer timeout
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
360 set ut=200
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
361 call test_garbagecollect_soon()
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
362 call test_override('no_wait_return', 0)
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
363 func CauseAnError(id)
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
364 " This will show an error and wait for Enter.
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
365 let a = {'foo', 'bar'}
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
366 endfunc
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
367 func FeedChar(id)
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
368 call feedkeys('x', 't')
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
369 endfunc
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
370 call timer_start(300, 'FeedChar')
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
371 call timer_start(100, 'CauseAnError')
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
372 let x = getchar()
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
373
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
374 set ut&
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
375 call test_override('no_wait_return', 1)
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
376 delfunc CauseAnError
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
377 delfunc FeedChar
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
378 endfunc
3fd0765f454f patch 8.1.1579: dict and list could be GC'ed while displaying error
Bram Moolenaar <Bram@vim.org>
parents: 17089
diff changeset
379
17716
50b3b9c13ab8 patch 8.1.1855: another failing timer test
Bram Moolenaar <Bram@vim.org>
parents: 17710
diff changeset
380 func Test_timer_error_in_timer_callback()
17249
3e2e998ce0db patch 8.1.1624: when testing in the GUI may try to run gvim in a terminal
Bram Moolenaar <Bram@vim.org>
parents: 17239
diff changeset
381 if !has('terminal') || (has('win32') && has('gui_running'))
17184
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
382 throw 'Skipped: cannot run Vim in a terminal window'
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
383 endif
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
384
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
385 let lines =<< trim [CODE]
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
386 func Func(timer)
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
387 " fail to create list
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
388 let x = [
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
389 endfunc
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
390 set updatetime=50
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
391 call timer_start(1, 'Func')
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
392 [CODE]
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
393 call writefile(lines, 'Xtest.vim')
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
394
17249
3e2e998ce0db patch 8.1.1624: when testing in the GUI may try to run gvim in a terminal
Bram Moolenaar <Bram@vim.org>
parents: 17239
diff changeset
395 let buf = term_start(GetVimCommandCleanTerm() .. ' -S Xtest.vim', {'term_rows': 8})
17184
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
396 let job = term_getjob(buf)
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
397 call WaitForAssert({-> assert_notequal('', term_getline(buf, 8))})
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
398
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
399 " GC must not run during timer callback, which can make Vim crash.
19954
c087099e9163 patch 8.2.0533: tests using term_wait() can still be flaky
Bram Moolenaar <Bram@vim.org>
parents: 19609
diff changeset
400 call TermWait(buf, 50)
17184
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
401 call term_sendkeys(buf, "\<CR>")
19954
c087099e9163 patch 8.2.0533: tests using term_wait() can still be flaky
Bram Moolenaar <Bram@vim.org>
parents: 19609
diff changeset
402 call TermWait(buf, 50)
17184
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
403 call assert_equal('run', job_status(job))
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
404
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
405 call term_sendkeys(buf, ":qall!\<CR>")
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
406 call WaitFor({-> job_status(job) ==# 'dead'})
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
407 if has('unix')
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
408 call assert_equal('', job_info(job).termsig)
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
409 endif
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
410
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
411 call delete('Xtest.vim')
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
412 exe buf .. 'bwipe!'
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
413 endfunc
a5c3d374e1d3 patch 8.1.1591: on error garbage collection may free memory in use
Bram Moolenaar <Bram@vim.org>
parents: 17164
diff changeset
414
19289
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
415 " Test for garbage collection when a timer is still running
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
416 func Test_timer_garbage_collect()
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
417 let timer = timer_start(1000, function('MyHandler'), {'repeat' : 10})
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
418 call test_garbagecollect_now()
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
419 let l = timer_info(timer)
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
420 call assert_equal(function('MyHandler'), l[0].callback)
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
421 call timer_stop(timer)
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
422 endfunc
2f0f308c069c patch 8.2.0203: :helptags and some other functionality not tested
Bram Moolenaar <Bram@vim.org>
parents: 19249
diff changeset
423
19609
fe827d6267c2 patch 8.2.0361: internal error when using "0" for a callback
Bram Moolenaar <Bram@vim.org>
parents: 19289
diff changeset
424 func Test_timer_invalid_callback()
fe827d6267c2 patch 8.2.0361: internal error when using "0" for a callback
Bram Moolenaar <Bram@vim.org>
parents: 19289
diff changeset
425 call assert_fails('call timer_start(0, "0")', 'E921')
fe827d6267c2 patch 8.2.0361: internal error when using "0" for a callback
Bram Moolenaar <Bram@vim.org>
parents: 19289
diff changeset
426 endfunc
fe827d6267c2 patch 8.2.0361: internal error when using "0" for a callback
Bram Moolenaar <Bram@vim.org>
parents: 19289
diff changeset
427
20709
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
428 func Test_timer_changing_function_list()
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
429 CheckRunVimInTerminal
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
430
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
431 " Create a large number of functions. Should get the "more" prompt.
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
432 " The typing "G" triggers the timer, which changes the function table.
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
433 let lines =<< trim END
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
434 for func in map(range(1,99), "'Func' .. v:val")
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
435 exe "func " .. func .. "()"
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
436 endfunc
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
437 endfor
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
438 au CmdlineLeave : call timer_start(0, {-> 0})
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
439 END
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
440 call writefile(lines, 'XTest_timerchange')
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
441 let buf = RunVimInTerminal('-S XTest_timerchange', #{rows: 10})
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
442 call term_sendkeys(buf, ":fu\<CR>")
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
443 call WaitForAssert({-> assert_match('-- More --', term_getline(buf, 10))})
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
444 call term_sendkeys(buf, "G")
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
445 call WaitForAssert({-> assert_match('E454', term_getline(buf, 9))})
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
446 call term_sendkeys(buf, "\<Esc>")
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
447
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
448 call StopVimInTerminal(buf)
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
449 call delete('XTest_timerchange')
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
450 endfunc
a2262c80a4e0 patch 8.2.0908: crash when changing the function table while listing it
Bram Moolenaar <Bram@vim.org>
parents: 20625
diff changeset
451
9909
3ee84d270ea7 commit https://github.com/vim/vim/commit/9e4d8215d386100ab660d7d11e6620fd148b605e
Christian Brabandt <cb@256bit.org>
parents: 9822
diff changeset
452 " vim: shiftwidth=2 sts=2 expandtab