aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-07-12 07:21:04 +0800
committerGitHub <noreply@github.com>2022-07-12 07:21:04 +0800
commit195d8496a03bf5a14f5d114d57d841b037d543c4 (patch)
tree129f0f96670a51ba7abf19cdc23d9771180e348d /src
parentdaa49b525e5c55958e9854cd463a763791e6600b (diff)
parentcea96ca39d7fabccd50f7855e52de0a66874e743 (diff)
downloadrneovim-195d8496a03bf5a14f5d114d57d841b037d543c4.tar.gz
rneovim-195d8496a03bf5a14f5d114d57d841b037d543c4.tar.bz2
rneovim-195d8496a03bf5a14f5d114d57d841b037d543c4.zip
Merge pull request #19277 from zeertzjq/vim-8.1.1855
vim-patch:8.1.{1855,1859,1864,1867}: flaky timer tests
Diffstat (limited to 'src')
-rw-r--r--src/nvim/testdir/runtest.vim13
-rw-r--r--src/nvim/testdir/test_timers.vim82
2 files changed, 55 insertions, 40 deletions
diff --git a/src/nvim/testdir/runtest.vim b/src/nvim/testdir/runtest.vim
index 7060cab2e5..6b16e888a9 100644
--- a/src/nvim/testdir/runtest.vim
+++ b/src/nvim/testdir/runtest.vim
@@ -364,24 +364,25 @@ let s:flaky_tests = [
\ 'Test_cursorhold_insert()',
\ 'Test_exit_callback_interval()',
\ 'Test_map_timeout_with_timer_interrupt()',
- \ 'Test_oneshot()',
\ 'Test_out_cb()',
- \ 'Test_paused()',
\ 'Test_popup_and_window_resize()',
\ 'Test_quoteplus()',
\ 'Test_quotestar()',
\ 'Test_reltime()',
- \ 'Test_repeat_many()',
- \ 'Test_repeat_three()',
\ 'Test_state()',
- \ 'Test_stop_all_in_callback()',
\ 'Test_term_mouse_double_click_to_create_tab()',
\ 'Test_term_mouse_multiple_clicks_to_visually_select()',
\ 'Test_terminal_composing_unicode()',
\ 'Test_terminal_redir_file()',
\ 'Test_terminal_tmap()',
+ \ 'Test_timer_oneshot()',
+ \ 'Test_timer_paused()',
+ \ 'Test_timer_repeat_many()',
+ \ 'Test_timer_repeat_three()',
+ \ 'Test_timer_stop_all_in_callback()',
+ \ 'Test_timer_stop_in_callback()',
+ \ 'Test_timer_with_partial_callback()',
\ 'Test_termwinscroll()',
- \ 'Test_with_partial_callback()',
\ ]
" Locate Test_ functions and execute them.
diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim
index e5b4bc23e8..a36d65a8dd 100644
--- a/src/nvim/testdir/test_timers.vim
+++ b/src/nvim/testdir/test_timers.vim
@@ -7,6 +7,10 @@ source shared.vim
source term_util.vim
source load.vim
+func SetUp()
+ call timer_stopall()
+endfunc
+
func MyHandler(timer)
let g:val += 1
endfunc
@@ -15,7 +19,7 @@ func MyHandlerWithLists(lists, timer)
let x = string(a:lists)
endfunc
-func Test_oneshot()
+func Test_timer_oneshot()
let g:val = 0
let timer = timer_start(50, 'MyHandler')
let slept = WaitFor('g:val == 1')
@@ -27,7 +31,7 @@ func Test_oneshot()
endif
endfunc
-func Test_repeat_three()
+func Test_timer_repeat_three()
let g:val = 0
let timer = timer_start(50, 'MyHandler', {'repeat': 3})
let slept = WaitFor('g:val == 3')
@@ -39,8 +43,7 @@ func Test_repeat_three()
endif
endfunc
-func Test_repeat_many()
- call timer_stopall()
+func Test_timer_repeat_many()
let g:val = 0
let timer = timer_start(50, 'MyHandler', {'repeat': -1})
if has('mac')
@@ -51,7 +54,7 @@ func Test_repeat_many()
call assert_inrange((has('mac') ? 1 : 2), LoadAdjust(5), g:val)
endfunc
-func Test_with_partial_callback()
+func Test_timer_with_partial_callback()
let g:val = 0
let meow = {'one': 1}
function meow.bite(...)
@@ -68,13 +71,13 @@ func Test_with_partial_callback()
endif
endfunc
-func Test_retain_partial()
+func Test_timer_retain_partial()
call timer_start(50, function('MyHandlerWithLists', [['a']]))
- call garbagecollect()
+ call test_garbagecollect_now()
sleep 100m
endfunc
-func Test_info()
+func Test_timer_info()
let id = timer_start(1000, 'MyHandler')
let info = id->timer_info()
call assert_equal(id, info[0]['id'])
@@ -93,8 +96,7 @@ func Test_info()
call assert_equal([], timer_info(id))
endfunc
-func Test_stopall()
- call timer_stopall()
+func Test_timer_stopall()
let id1 = timer_start(1000, 'MyHandler')
let id2 = timer_start(2000, 'MyHandler')
let info = timer_info()
@@ -105,7 +107,7 @@ func Test_stopall()
call assert_equal(0, len(info))
endfunc
-func Test_paused()
+func Test_timer_paused()
let g:val = 0
let id = timer_start(50, 'MyHandler')
@@ -138,7 +140,7 @@ func StopMyself(timer)
endif
endfunc
-func Test_delete_myself()
+func Test_timer_delete_myself()
let g:called = 0
let t = timer_start(10, 'StopMyself', {'repeat': -1})
call WaitForAssert({-> assert_equal(2, g:called)})
@@ -150,33 +152,45 @@ func StopTimer1(timer)
let g:timer2 = 10->timer_start('StopTimer2')
" avoid maxfuncdepth error
call timer_pause(g:timer1, 1)
- sleep 40m
+ sleep 20m
endfunc
func StopTimer2(timer)
call timer_stop(g:timer1)
endfunc
-func Test_stop_in_callback()
+func Test_timer_stop_in_callback()
+ call assert_equal(0, len(timer_info()))
let g:timer1 = timer_start(10, 'StopTimer1')
- sleep 40m
+ let slept = 0
+ for i in range(10)
+ if len(timer_info()) == 0
+ break
+ endif
+ sleep 10m
+ let slept += 10
+ endfor
+ " This should take only 30 msec, but on Mac it's often longer
+ call assert_inrange(0, 50, slept)
endfunc
func StopTimerAll(timer)
call timer_stopall()
endfunc
-func Test_stop_all_in_callback()
- call timer_stopall()
- let g:timer1 = timer_start(10, 'StopTimerAll')
- let info = timer_info()
- call assert_equal(1, len(info))
- if has('mac')
- sleep 100m
- endif
- sleep 40m
- let info = timer_info()
- call assert_equal(0, len(info))
+func Test_timer_stop_all_in_callback()
+ call assert_equal(0, len(timer_info()))
+ call timer_start(10, 'StopTimerAll')
+ call assert_equal(1, len(timer_info()))
+ let slept = 0
+ for i in range(10)
+ if len(timer_info()) == 0
+ break
+ endif
+ sleep 10m
+ let slept += 10
+ endfor
+ call assert_inrange(0, 30, slept)
endfunc
func FeedkeysCb(timer)
@@ -189,7 +203,7 @@ func InputCb(timer)
call Resume()
endfunc
-func Test_input_in_timer()
+func Test_timer_input_in_timer()
let g:val = ''
call timer_start(10, 'InputCb')
call Standby(1000)
@@ -242,7 +256,7 @@ func Interrupt(timer)
call nvim_input("\<C-C>")
endfunc
-func Test_peek_and_get_char()
+func Test_timer_peek_and_get_char()
if !has('unix') && !has('gui_running')
return
endif
@@ -253,7 +267,7 @@ func Test_peek_and_get_char()
eval intr->timer_stop()
endfunc
-func Test_getchar_zero()
+func Test_timer_getchar_zero()
if has('win32') && !has('gui_running')
" Console: no low-level input
return
@@ -271,7 +285,7 @@ func Test_getchar_zero()
call timer_stop(id)
endfunc
-func Test_ex_mode()
+func Test_timer_ex_mode()
" Function with an empty line.
func Foo(...)
@@ -282,9 +296,9 @@ func Test_ex_mode()
call timer_stop(timer)
endfunc
-func Test_restore_count()
+func Test_timer_restore_count()
if !CanRunVimInTerminal()
- return
+ throw 'Skipped: cannot run Vim in a terminal window'
endif
" Check that v:count is saved and restored, not changed by a timer.
call writefile([
@@ -315,7 +329,7 @@ endfunc
" Test that the garbage collector isn't triggered if a timer callback invokes
" vgetc().
-func Test_nocatch_garbage_collect()
+func Test_timer_nocatch_garbage_collect()
" skipped: Nvim does not support test_garbagecollect_soon(), test_override()
return
" 'uptimetime. must be bigger than the timer timeout
@@ -339,7 +353,7 @@ func Test_nocatch_garbage_collect()
delfunc FeedChar
endfunc
-func Test_error_in_timer_callback()
+func Test_timer_error_in_timer_callback()
if !has('terminal') || (has('win32') && has('gui_running'))
throw 'Skipped: cannot run Vim in a terminal window'
endif