changeset 19954:c087099e9163 v8.2.0533

patch 8.2.0533: tests using term_wait() can still be flaky Commit: https://github.com/vim/vim/commit/6a2c5a7dd5c9215cc030d5ea6e4616d782c091dd Author: Bram Moolenaar <Bram@vim.org> Date: Wed Apr 8 21:50:25 2020 +0200 patch 8.2.0533: tests using term_wait() can still be flaky Problem: Tests using term_wait() can still be flaky. Solution: Increase the wait time when rerunning a test. (James McCoy, closes #5899) Halve the initial times to make tests run faster when there is no rerun.
author Bram Moolenaar <Bram@vim.org>
date Wed, 08 Apr 2020 22:00:05 +0200
parents 313ad6f6fdb5
children 8f6b7cb45a04
files src/testdir/term_util.vim src/testdir/test_arglist.vim src/testdir/test_autocmd.vim src/testdir/test_balloon.vim src/testdir/test_bufline.vim src/testdir/test_channel.vim src/testdir/test_cmdline.vim src/testdir/test_conceal.vim src/testdir/test_cursorline.vim src/testdir/test_debugger.vim src/testdir/test_diffmode.vim src/testdir/test_display.vim src/testdir/test_functions.vim src/testdir/test_highlight.vim src/testdir/test_ins_complete.vim src/testdir/test_mapping.vim src/testdir/test_match.vim src/testdir/test_matchadd_conceal.vim src/testdir/test_messages.vim src/testdir/test_number.vim src/testdir/test_popup.vim src/testdir/test_popupwin.vim src/testdir/test_profile.vim src/testdir/test_search.vim src/testdir/test_search_stat.vim src/testdir/test_startup.vim src/testdir/test_startup_utf8.vim src/testdir/test_statusline.vim src/testdir/test_suspend.vim src/testdir/test_swap.vim src/testdir/test_tagjump.vim src/testdir/test_terminal.vim src/testdir/test_terminal_fail.vim src/testdir/test_timers.vim src/testdir/test_vimscript.vim src/version.c
diffstat 36 files changed, 175 insertions(+), 167 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/term_util.vim
+++ b/src/testdir/term_util.vim
@@ -24,6 +24,21 @@ func StopShellInTerminal(buf)
   call WaitFor({-> job_status(job) == "dead"})
 endfunc
 
+" Wrapper around term_wait() to allow more time for re-runs of flaky tests
+" The second argument is the minimum time to wait in msec, 10 if omitted.
+func TermWait(buf, ...)
+  let wait_time = a:0 ? a:1 : 10
+  if g:run_nr == 2
+    let wait_time *= 4
+  elseif g:run_nr > 2
+    let wait_time *= 10
+  endif
+  call term_wait(a:buf, wait_time)
+
+  " In case it wasn't set yet.
+  let g:test_is_flaky = 1
+endfunc
+
 " Run Vim with "arguments" in a new terminal window.
 " By default uses a size of 20 lines and 75 columns.
 " Returns the buffer number of the terminal.
@@ -82,7 +97,7 @@ func RunVimInTerminal(arguments, options
     let cols = term_getsize(buf)[1]
   endif
 
-  call term_wait(buf)
+  call TermWait(buf)
 
   " Wait for "All" or "Top" of the ruler to be shown in the last line or in
   " the status line of the last window. This can be quite slow (e.g. when
--- a/src/testdir/test_arglist.vim
+++ b/src/testdir/test_arglist.vim
@@ -518,7 +518,7 @@ func Test_quit_with_arglist()
   call term_sendkeys(buf, ":set nomore\n")
   call term_sendkeys(buf, ":args a b c\n")
   call term_sendkeys(buf, ":quit\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E173:', term_getline(buf, 6))})
   call StopVimInTerminal(buf)
 
@@ -527,16 +527,16 @@ func Test_quit_with_arglist()
   call term_sendkeys(buf, ":set nomore\n")
   call term_sendkeys(buf, ":args a b c\n")
   call term_sendkeys(buf, ":confirm quit\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
         \ term_getline(buf, 6))})
   call term_sendkeys(buf, "N")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, ":confirm quit\n")
   call WaitForAssert({-> assert_match('^\[Y\]es, (N)o: *$',
         \ term_getline(buf, 6))})
   call term_sendkeys(buf, "Y")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_equal("finished", term_getstatus(buf))})
   only!
   " When this test fails, swap files are left behind which breaks subsequent
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -1761,9 +1761,9 @@ function s:Before_test_dirchanged()
   augroup END
   let s:li = []
   let s:dir_this = getcwd()
-  let s:dir_foo = s:dir_this . '/foo'
+  let s:dir_foo = s:dir_this . '/Xfoo'
   call mkdir(s:dir_foo)
-  let s:dir_bar = s:dir_this . '/bar'
+  let s:dir_bar = s:dir_this . '/Xbar'
   call mkdir(s:dir_bar)
 endfunc
 
@@ -2291,9 +2291,9 @@ func Test_autocmd_SafeState()
   call WaitForAssert({-> assert_match('^xxx', term_getline(buf, 6))}, 1000)
 
   call term_sendkeys(buf, ":let g:again = ''\<CR>:call CallTimer()\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":echo g:again\<CR>")
   call WaitForAssert({-> assert_match('xtx', term_getline(buf, 6))}, 1000)
 
@@ -2317,7 +2317,7 @@ func Test_autocmd_CmdWinEnter()
   let buf = RunVimInTerminal('-S '.filename, #{rows: 6})
 
   call term_sendkeys(buf, "q:")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, ":echo b:dummy_var\<cr>")
   call WaitForAssert({-> assert_match('^This is a dummy', term_getline(buf, 6))}, 2000)
   call term_sendkeys(buf, ":echo &buftype\<cr>")
--- a/src/testdir/test_balloon.vim
+++ b/src/testdir/test_balloon.vim
@@ -32,14 +32,14 @@ func Test_balloon_eval_term()
 
   " Check that the balloon shows up after a mouse move
   let buf = RunVimInTerminal('-S XTest_beval', {'rows': 10, 'cols': 50})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, 'll')
   call term_sendkeys(buf, ":call Trigger()\<CR>")
   call VerifyScreenDump(buf, 'Test_balloon_eval_term_01', {})
 
   " Make sure the balloon still shows after 'updatetime' passed and CursorHold
   " was triggered.
-  call term_wait(buf, 300)
+  call TermWait(buf, 150)
   call VerifyScreenDump(buf, 'Test_balloon_eval_term_01a', {})
 
   " clean up
@@ -57,7 +57,7 @@ func Test_balloon_eval_term_visual()
 
   " Check that the balloon shows up after a mouse move
   let buf = RunVimInTerminal('-S XTest_beval_visual', {'rows': 10, 'cols': 50})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call VerifyScreenDump(buf, 'Test_balloon_eval_term_02', {})
 
   " clean up
--- a/src/testdir/test_bufline.vim
+++ b/src/testdir/test_bufline.vim
@@ -164,7 +164,7 @@ func Test_appendbufline_redraw()
   END
   call writefile(lines, 'XscriptMatchCommon')
   let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 10})
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_appendbufline_1', {})
 
   call StopVimInTerminal(buf)
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -1062,7 +1062,7 @@ func Test_write_to_buffer_and_scroll()
   END
   call writefile(lines, 'XtestBufferScroll')
   let buf = RunVimInTerminal('-S XtestBufferScroll', #{rows: 10})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call VerifyScreenDump(buf, 'Test_job_buffer_scroll_1', {})
 
   " clean up
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -947,7 +947,7 @@ func Test_verbose_option()
   call writefile(lines, 'XTest_verbose')
 
   let buf = RunVimInTerminal('-S XTest_verbose', {'rows': 12})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":DoSomething\<CR>")
   call VerifyScreenDump(buf, 'Test_verbose_option_1', {})
 
@@ -1024,7 +1024,7 @@ func Test_cmdwin_restore()
   call writefile(lines, 'XTest_restore')
 
   let buf = RunVimInTerminal('-S XTest_restore', {'rows': 12})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "q:")
   call VerifyScreenDump(buf, 'Test_cmdwin_restore_1', {})
 
@@ -1146,7 +1146,7 @@ func Test_cmdlineclear_tabenter()
 
   call writefile(lines, 'XtestCmdlineClearTabenter')
   let buf = RunVimInTerminal('-S XtestCmdlineClearTabenter', #{rows: 10})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
   " in one tab make the command line higher with CTRL-W -
   call term_sendkeys(buf, ":tabnew\<cr>\<C-w>-\<C-w>-gtgt")
   call VerifyScreenDump(buf, 'Test_cmdlineclear_tabenter', {})
--- a/src/testdir/test_conceal.vim
+++ b/src/testdir/test_conceal.vim
@@ -147,7 +147,7 @@ func Test_conceal_resize_term()
   call VerifyScreenDump(buf, 'Test_conceal_resize_01', {})
 
   call win_execute(buf->win_findbuf()[0], 'wincmd +')
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_conceal_resize_02', {})
 
   " clean up
--- a/src/testdir/test_cursorline.vim
+++ b/src/testdir/test_cursorline.vim
@@ -135,41 +135,41 @@ func Test_cursorline_screenline()
   call writefile(lines, filename)
   " basic test
   let buf = RunVimInTerminal('-S '. filename, #{rows: 20})
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_1', {})
   call term_sendkeys(buf, "fagj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_2', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_3', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_4', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_5', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_6', {})
   " test with set list and cursorlineopt containing number
   call term_sendkeys(buf, "gg0")
   call term_sendkeys(buf, ":set list cursorlineopt+=number listchars=space:-\<cr>")
   call VerifyScreenDump(buf, 'Test_'. filename. '_7', {})
   call term_sendkeys(buf, "fagj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_8', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_9', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_10', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_11', {})
   call term_sendkeys(buf, "gj")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_'. filename. '_12', {})
   if exists("+foldcolumn") && exists("+signcolumn") && exists("+breakindent")
     " test with set foldcolumn signcoloumn and breakindent
@@ -177,19 +177,19 @@ func Test_cursorline_screenline()
     call term_sendkeys(buf, ":set breakindent foldcolumn=2 signcolumn=yes\<cr>")
     call VerifyScreenDump(buf, 'Test_'. filename. '_13', {})
     call term_sendkeys(buf, "fagj")
-    call term_wait(buf)
+    call TermWait(buf)
     call VerifyScreenDump(buf, 'Test_'. filename. '_14', {})
     call term_sendkeys(buf, "gj")
-    call term_wait(buf)
+    call TermWait(buf)
     call VerifyScreenDump(buf, 'Test_'. filename. '_15', {})
     call term_sendkeys(buf, "gj")
-    call term_wait(buf)
+    call TermWait(buf)
     call VerifyScreenDump(buf, 'Test_'. filename. '_16', {})
     call term_sendkeys(buf, "gj")
-    call term_wait(buf)
+    call TermWait(buf)
     call VerifyScreenDump(buf, 'Test_'. filename. '_17', {})
     call term_sendkeys(buf, "gj")
-    call term_wait(buf)
+    call TermWait(buf)
     call VerifyScreenDump(buf, 'Test_'. filename. '_18', {})
   endif
 
--- a/src/testdir/test_debugger.vim
+++ b/src/testdir/test_debugger.vim
@@ -8,7 +8,7 @@ source check.vim
 " If the expected output argument is supplied, then check for it.
 func RunDbgCmd(buf, cmd, ...)
   call term_sendkeys(a:buf, a:cmd . "\r")
-  call term_wait(a:buf, 20)
+  call TermWait(a:buf)
 
   if a:0 != 0
     " Verify the expected output
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -801,7 +801,7 @@ func VerifyInternal(buf, dumpfile, extra
   call term_sendkeys(a:buf, ":diffupdate!\<CR>")
   " trailing : for leaving the cursor on the command line
   call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:")
-  call term_wait(a:buf)
+  call TermWait(a:buf)
   call VerifyScreenDump(a:buf, a:dumpfile, {})
 endfunc
 
--- a/src/testdir/test_display.vim
+++ b/src/testdir/test_display.vim
@@ -174,7 +174,7 @@ func Test_scroll_CursorLineNr_update()
   call writefile(lines, filename)
   let buf = RunVimInTerminal('-S '.filename, #{rows: 5, cols: 50})
   call term_sendkeys(buf, "k")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_winline_rnu', {})
 
   " clean up
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1858,15 +1858,6 @@ endfunc
 func Test_state()
   CheckRunVimInTerminal
 
-  " In the first run try a short wait time.  If the test fails retry with a
-  " longer wait time.
-  if g:run_nr == 1
-    let wait_time = 50
-  elseif g:run_nr == 2
-    let wait_time = 200
-  else
-    let wait_time = 500
-  endif
   let getstate = ":echo 'state: ' .. g:state .. '; mode: ' .. g:mode\<CR>"
 
   let lines =<< trim END
@@ -1888,27 +1879,27 @@ func Test_state()
 
   " Using a timer callback
   call term_sendkeys(buf, ":call RunTimer()\<CR>")
-  call term_wait(buf, wait_time)
+  call TermWait(buf, 25)
   call term_sendkeys(buf, getstate)
   call WaitForAssert({-> assert_match('state: c; mode: n', term_getline(buf, 6))}, 1000)
 
   " Halfway a mapping
   call term_sendkeys(buf, ":call RunTimer()\<CR>;")
-  call term_wait(buf, wait_time)
+  call TermWait(buf, 25)
   call term_sendkeys(buf, ";")
   call term_sendkeys(buf, getstate)
   call WaitForAssert({-> assert_match('state: mSc; mode: n', term_getline(buf, 6))}, 1000)
 
   " Insert mode completion (bit slower on Mac)
   call term_sendkeys(buf, ":call RunTimer()\<CR>Got\<C-N>")
-  call term_wait(buf, wait_time)
+  call TermWait(buf, 25)
   call term_sendkeys(buf, "\<Esc>")
   call term_sendkeys(buf, getstate)
   call WaitForAssert({-> assert_match('state: aSc; mode: i', term_getline(buf, 6))}, 1000)
 
   " Autocommand executing
   call term_sendkeys(buf, ":set filetype=foobar\<CR>")
-  call term_wait(buf, wait_time)
+  call TermWait(buf, 25)
   call term_sendkeys(buf, getstate)
   call WaitForAssert({-> assert_match('state: xS; mode: n', term_getline(buf, 6))}, 1000)
 
@@ -1916,7 +1907,7 @@ func Test_state()
 
   " messages scrolled
   call term_sendkeys(buf, ":call RunTimer()\<CR>:echo \"one\\ntwo\\nthree\"\<CR>")
-  call term_wait(buf, wait_time)
+  call TermWait(buf, 25)
   call term_sendkeys(buf, "\<CR>")
   call term_sendkeys(buf, getstate)
   call WaitForAssert({-> assert_match('state: Scs; mode: r', term_getline(buf, 6))}, 1000)
--- a/src/testdir/test_highlight.vim
+++ b/src/testdir/test_highlight.vim
@@ -542,9 +542,9 @@ func Test_cursorline_after_yank()
 	\ 'call setline(1, ["","1","2","3",""])',
 	\ ], 'Xtest_cursorline_yank')
   let buf = RunVimInTerminal('-S Xtest_cursorline_yank', {'rows': 8})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "Gy3k")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "jj")
 
   call VerifyScreenDump(buf, 'Test_cursorline_yank_01', {})
@@ -582,7 +582,7 @@ func Test_cursorline_with_visualmode()
 	\ 'call setline(1, repeat(["abc"], 50))',
 	\ ], 'Xtest_cursorline_with_visualmode')
   let buf = RunVimInTerminal('-S Xtest_cursorline_with_visualmode', {'rows': 12})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "V\<C-f>kkkjk")
 
   call VerifyScreenDump(buf, 'Test_cursorline_with_visualmode_01', {})
@@ -610,9 +610,9 @@ func Test_wincolor()
   END
   call writefile(lines, 'Xtest_wincolor')
   let buf = RunVimInTerminal('-S Xtest_wincolor', {'rows': 8})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "2G5lvj")
-  call term_wait(buf)
+  call TermWait(buf)
 
   call VerifyScreenDump(buf, 'Test_wincolor_01', {})
 
@@ -662,7 +662,7 @@ func Test_colorcolumn()
   call writefile(lines, 'Xtest_colorcolumn')
   let buf = RunVimInTerminal('-S Xtest_colorcolumn', {'rows': 10})
   call term_sendkeys(buf, ":\<CR>")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_colorcolumn_1', {})
 
   " clean up
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -402,7 +402,7 @@ func Test_pum_with_folds_two_tabs()
 
   call writefile(lines, 'Xpumscript')
   let buf = RunVimInTerminal('-S Xpumscript', #{rows: 10})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "a\<C-N>")
   call VerifyScreenDump(buf, 'Test_pum_with_folds_two_tabs', {})
 
@@ -427,9 +427,9 @@ func Test_pum_with_preview_win()
 
   call writefile(lines, 'Xpreviewscript')
   let buf = RunVimInTerminal('-S Xpreviewscript', #{rows: 12})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "Gi\<C-X>\<C-O>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, "\<C-N>")
   call VerifyScreenDump(buf, 'Test_pum_with_preview_win', {})
 
--- a/src/testdir/test_mapping.vim
+++ b/src/testdir/test_mapping.vim
@@ -430,9 +430,9 @@ func Test_error_in_map_expr()
 
   " GC must not run during map-expr processing, which can make Vim crash.
   call term_sendkeys(buf, '!')
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call assert_equal('run', job_status(job))
 
   call term_sendkeys(buf, ":qall!\<CR>")
@@ -510,7 +510,7 @@ func Test_expr_map_restore_cursor()
   END
   call writefile(lines, 'XtestExprMap')
   let buf = RunVimInTerminal('-S XtestExprMap', #{rows: 10})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "\<C-B>")
   call VerifyScreenDump(buf, 'Test_map_expr_1', {})
 
--- a/src/testdir/test_match.vim
+++ b/src/testdir/test_match.vim
@@ -289,7 +289,7 @@ func OtherWindowCommon()
   END
   call writefile(lines, 'XscriptMatchCommon')
   let buf = RunVimInTerminal('-S XscriptMatchCommon', #{rows: 12})
-  call term_wait(buf)
+  call TermWait(buf)
   return buf
 endfunc
 
--- a/src/testdir/test_matchadd_conceal.vim
+++ b/src/testdir/test_matchadd_conceal.vim
@@ -298,14 +298,14 @@ func Test_cursor_column_in_concealed_lin
   END
   call writefile(lines, 'Xcolesearch')
   let buf = RunVimInTerminal('Xcolesearch', {})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
 
   " Jump to something that is beyond the bottom of the window,
   " so there's a scroll down.
   call term_sendkeys(buf, ":so %\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "/expr\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
 
   " Are the concealed parts of the current line really hidden?
   let cursor_row = term_scrape(buf, '.')->map({_, e -> e.chars})->join('')
@@ -335,7 +335,7 @@ func Test_cursor_column_in_concealed_lin
   " Horizontal scroll would center the cursor in the screen line, but conceal
   " makes it go to screen column 1.
   call term_sendkeys(buf, "$")
-  call term_wait(buf)
+  call TermWait(buf)
 
   " Are the concealed parts of the current line really hidden?
   call WaitForAssert({-> assert_equal('c', term_getline(buf, '.'))})
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -114,7 +114,7 @@ func Test_mode_message_at_leaving_insert
 
   let rows = 10
   let buf = term_start([GetVimProg(), '--clean', '-S', testfile], {'term_rows': rows})
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call assert_equal('run', job_status(term_getjob(buf)))
 
   call term_sendkeys(buf, "i")
@@ -143,7 +143,7 @@ func Test_mode_message_at_leaving_insert
 
   let rows = 10
   let buf = term_start([GetVimProg(), '--clean', '-S', testfile], {'term_rows': rows})
-  call term_wait(buf, 200)
+  call WaitForAssert({-> assert_match('0,0-1\s*All$', term_getline(buf, rows - 1))})
   call assert_equal('run', job_status(term_getjob(buf)))
 
   call term_sendkeys(buf, "i")
--- a/src/testdir/test_number.vim
+++ b/src/testdir/test_number.vim
@@ -280,7 +280,7 @@ func Test_relativenumber_colors()
 
   " Check that the balloon shows up after a mouse move
   let buf = RunVimInTerminal('-S XTest_relnr', {'rows': 10, 'cols': 50})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   " Default colors
   call VerifyScreenDump(buf, 'Test_relnr_colors_1', {})
 
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -683,11 +683,11 @@ func Test_popup_and_window_resize()
 
   call term_sendkeys(buf, "Gi\<c-x>")
   call term_sendkeys(buf, "\<c-v>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   " popup first entry "!" must be at the top
   call WaitForAssert({-> assert_match('^!\s*$', term_getline(buf, 1))})
   exe 'resize +' . (h - 1)
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   redraw!
   " popup shifted down, first line is now empty
   call WaitForAssert({-> assert_equal('', term_getline(buf, 1))})
@@ -750,11 +750,11 @@ func Test_popup_and_previewwindow_dump()
   let buf = RunVimInTerminal('-S Xscript', {})
 
   " wait for the script to finish
-  call term_wait(buf)
+  call TermWait(buf)
 
   " Test that popup and previewwindow do not overlap.
   call term_sendkeys(buf, "o")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "\<C-X>\<C-N>")
   call VerifyScreenDump(buf, 'Test_popup_and_previewwindow_01', {})
 
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -65,9 +65,9 @@ func Test_simple_popup()
 
   " clear all popups after moving the cursor a bit, so that ruler is updated
   call term_sendkeys(buf, "axxx\<Esc>")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "0")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, ":call popup_clear()\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_08', {})
 
@@ -1389,7 +1389,7 @@ func Test_popup_beval()
   END
   call writefile(lines, 'XtestPopupBeval')
   let buf = RunVimInTerminal('-S XtestPopupBeval', #{rows: 10})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, 'j')
   call term_sendkeys(buf, ":call Hover()\<CR>")
   call VerifyScreenDump(buf, 'Test_popupwin_beval_1', {})
@@ -2958,7 +2958,7 @@ func Test_popupmenu_info_border()
   call writefile(lines, 'XtestInfoPopup')
 
   let buf = RunVimInTerminal('-S XtestInfoPopup', #{rows: 14})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   call term_sendkeys(buf, "A\<C-X>\<C-U>")
   call VerifyScreenDump(buf, 'Test_popupwin_infopopup_1', {})
@@ -3006,7 +3006,7 @@ func Test_popupmenu_info_noborder()
   call writefile(lines, 'XtestInfoPopupNb')
 
   let buf = RunVimInTerminal('-S XtestInfoPopupNb', #{rows: 14})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   call term_sendkeys(buf, "A\<C-X>\<C-U>")
   call VerifyScreenDump(buf, 'Test_popupwin_infopopup_nb_1', {})
@@ -3024,7 +3024,7 @@ func Test_popupmenu_info_align_menu()
   call writefile(lines, 'XtestInfoPopupNb')
 
   let buf = RunVimInTerminal('-S XtestInfoPopupNb', #{rows: 14})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   call term_sendkeys(buf, "A\<C-X>\<C-U>")
   call term_sendkeys(buf, "\<C-N>")
@@ -3055,7 +3055,7 @@ func Test_popupmenu_info_hidden()
   call writefile(lines, 'XtestInfoPopupHidden')
 
   let buf = RunVimInTerminal('-S XtestInfoPopupHidden', #{rows: 14})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   call term_sendkeys(buf, "A\<C-X>\<C-U>")
   call VerifyScreenDump(buf, 'Test_popupwin_infopopup_hidden_1', {})
@@ -3113,7 +3113,7 @@ func Test_popupmenu_info_too_wide()
 
   call writefile(lines, 'XtestInfoPopupWide')
   let buf = RunVimInTerminal('-S XtestInfoPopupWide', #{rows: 8})
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   call term_sendkeys(buf, "Ascr\<C-X>\<C-O>")
   call VerifyScreenDump(buf, 'Test_popupwin_infopopup_wide_1', {})
--- a/src/testdir/test_profile.vim
+++ b/src/testdir/test_profile.vim
@@ -541,7 +541,7 @@ func Test_profile_typed_func()
 	\ .. "endfunc\<CR>")
   call term_sendkeys(buf, ":profile func DoSomething\<CR>")
   call term_sendkeys(buf, ":call DoSomething()\<CR>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call StopVimInTerminal(buf)
   let lines = readfile('XprofileTypedFunc')
   call assert_equal("FUNCTION  DoSomething()", lines[0])
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -672,7 +672,7 @@ func Test_search_cmdline8()
   call term_sendkeys(buf, "/vim\<cr>")
   call term_sendkeys(buf, "/b\<esc>")
   call term_sendkeys(buf, "gg0")
-  call term_wait(buf, 500)
+  call TermWait(buf, 250)
   let screen_line = term_scrape(buf, 1)
   let [a0,a1,a2,a3] = [screen_line[3].attr, screen_line[4].attr,
         \ screen_line[18].attr, screen_line[19].attr]
@@ -792,12 +792,12 @@ func Test_search_cmdline_incsearch_highl
 
   call WaitForAssert({-> assert_equal(lines, [term_getline(buf, 1), term_getline(buf, 2)])})
   " wait for vim to complete initialization
-  call term_wait(buf)
+  call TermWait(buf)
 
   " Get attr of normal(a0), incsearch(a1), hlsearch(a2) highlight
   call term_sendkeys(buf, ":set incsearch hlsearch\<cr>")
   call term_sendkeys(buf, '/b')
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   let screen_line1 = term_scrape(buf, 1)
   call assert_true(len(screen_line1) > 2)
   " a0: attr_normal
@@ -813,7 +813,7 @@ func Test_search_cmdline_incsearch_highl
 
   " Test incremental highlight search
   call term_sendkeys(buf, "/vim")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   " Buffer:
   " abb vim vim vi
   " vimvivim
@@ -825,7 +825,7 @@ func Test_search_cmdline_incsearch_highl
 
   " Test <C-g>
   call term_sendkeys(buf, "\<C-g>\<C-g>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   let attr_line1 = [a0,a0,a0,a0,a2,a2,a2,a0,a2,a2,a2,a0,a0,a0]
   let attr_line2 = [a1,a1,a1,a0,a0,a2,a2,a2]
   call assert_equal(attr_line1, map(term_scrape(buf, 1)[:len(attr_line1)-1], 'v:val.attr'))
@@ -833,7 +833,7 @@ func Test_search_cmdline_incsearch_highl
 
   " Test <C-t>
   call term_sendkeys(buf, "\<C-t>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   let attr_line1 = [a0,a0,a0,a0,a2,a2,a2,a0,a1,a1,a1,a0,a0,a0]
   let attr_line2 = [a2,a2,a2,a0,a0,a2,a2,a2]
   call assert_equal(attr_line1, map(term_scrape(buf, 1)[:len(attr_line1)-1], 'v:val.attr'))
@@ -841,7 +841,7 @@ func Test_search_cmdline_incsearch_highl
 
   " Type Enter and a1(incsearch highlight) should become a2(hlsearch highlight)
   call term_sendkeys(buf, "\<cr>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   let attr_line1 = [a0,a0,a0,a0,a2,a2,a2,a0,a2,a2,a2,a0,a0,a0]
   let attr_line2 = [a2,a2,a2,a0,a0,a2,a2,a2]
   call assert_equal(attr_line1, map(term_scrape(buf, 1)[:len(attr_line1)-1], 'v:val.attr'))
@@ -851,7 +851,7 @@ func Test_search_cmdline_incsearch_highl
   call term_sendkeys(buf, ":1\<cr>")
   call term_sendkeys(buf, ":set nohlsearch\<cr>")
   call term_sendkeys(buf, "/vim")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   let attr_line1 = [a0,a0,a0,a0,a1,a1,a1,a0,a0,a0,a0,a0,a0,a0]
   let attr_line2 = [a0,a0,a0,a0,a0,a0,a0,a0]
   call assert_equal(attr_line1, map(term_scrape(buf, 1)[:len(attr_line1)-1], 'v:val.attr'))
--- a/src/testdir/test_search_stat.vim
+++ b/src/testdir/test_search_stat.vim
@@ -202,12 +202,12 @@ func! Test_search_stat_screendump()
   END
   call writefile(lines, 'Xsearchstat')
   let buf = RunVimInTerminal('-S Xsearchstat', #{rows: 10})
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_searchstat_1', {})
 
   call term_sendkeys(buf, ":nnoremap <silent> n n\<cr>")
   call term_sendkeys(buf, "gg0n")
-  call term_wait(buf)
+  call TermWait(buf)
   call VerifyScreenDump(buf, 'Test_searchstat_2', {})
 
   call StopVimInTerminal(buf)
--- a/src/testdir/test_startup.vim
+++ b/src/testdir/test_startup.vim
@@ -795,9 +795,9 @@ func Test_missing_vimrc()
   let cmd = GetVimCommandCleanTerm() . ' -u Xvimrc_missing -S Xafter'
   let buf = term_start(cmd, {'term_rows' : 10})
   call WaitForAssert({-> assert_equal("running", term_getstatus(buf))})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "\n:")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match(':', term_getline(buf, 10))})
   call StopVimInTerminal(buf)
   call assert_equal([], readfile('Xtestout'))
--- a/src/testdir/test_startup_utf8.vim
+++ b/src/testdir/test_startup_utf8.vim
@@ -74,7 +74,7 @@ func Test_detect_ambiwidth()
 	\ 'redraw',
 	\ ], 'Xscript')
   let buf = RunVimInTerminal('-S Xscript', {})
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, "S\<C-R>=&ambiwidth\<CR>\<Esc>")
   call WaitForAssert({-> assert_match('single', term_getline(buf, 1))})
 
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -406,7 +406,7 @@ func Test_statusline_removed_group()
   call writefile(lines, 'XTest_statusline')
 
   let buf = RunVimInTerminal('-S XTest_statusline', {'rows': 10, 'cols': 50})
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call VerifyScreenDump(buf, 'Test_statusline_1', {})
 
   " clean up
--- a/src/testdir/test_suspend.vim
+++ b/src/testdir/test_suspend.vim
@@ -53,7 +53,7 @@ func Test_suspend()
 
   " Quit gracefully to dump coverage information.
   call term_sendkeys(buf, ":qall!\<CR>")
-  call term_wait(buf)
+  call TermWait(buf)
   " Wait until Vim actually exited and shell shows a prompt
   call WaitForAssert({-> assert_match('[$#] $', term_getline(buf, '.'))})
   call StopShellInTerminal(buf)
--- a/src/testdir/test_swap.vim
+++ b/src/testdir/test_swap.vim
@@ -363,14 +363,14 @@ func Test_swap_prompt_splitwin()
   call term_sendkeys(buf, ":set nomore\n")
   call term_sendkeys(buf, ":set noruler\n")
   call term_sendkeys(buf, ":split Xfile1\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: $', term_getline(buf, 20))})
   call term_sendkeys(buf, "q")
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, ":\<CR>")
   call WaitForAssert({-> assert_match('^:$', term_getline(buf, 20))})
   call term_sendkeys(buf, ":echomsg winnr('$')\<CR>")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^1$', term_getline(buf, 20))})
   call StopVimInTerminal(buf)
   %bwipe!
--- a/src/testdir/test_tagjump.vim
+++ b/src/testdir/test_tagjump.vim
@@ -544,7 +544,7 @@ func Test_tselect()
   call writefile(lines, 'XTest_tselect')
   let buf = RunVimInTerminal('-S XTest_tselect', {'rows': 10, 'cols': 50})
 
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":tselect main\<CR>2\<CR>")
   call VerifyScreenDump(buf, 'Test_tselect_1', {})
 
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -44,7 +44,7 @@ func Test_terminal_basic()
   call assert_notmatch('%[^\n]*running]', execute('ls ?'))
 
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   call assert_equal('n', mode())
   call assert_match('%aF[^\n]*finished]', execute('ls'))
   call assert_match('%aF[^\n]*finished]', execute('ls F'))
@@ -79,7 +79,7 @@ endfunc
 func Test_terminal_make_change()
   let buf = Run_shell_in_terminal({})
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
 
   setlocal modifiable
   exe "normal Axxx\<Esc>"
@@ -117,10 +117,10 @@ endfunc
 
 func Test_terminal_split_quit()
   let buf = Run_shell_in_terminal({})
-  call term_wait(buf)
+  call TermWait(buf)
   split
   quit!
-  call term_wait(buf)
+  call TermWait(buf)
   sleep 50m
   call assert_equal('run', job_status(g:job))
 
@@ -225,7 +225,7 @@ func Test_terminal_scrape_123()
   " Nothing happens with invalid buffer number
   call term_wait(1234)
 
-  call term_wait(buf)
+  call TermWait(buf)
   " On MS-Windows we first get a startup message of two lines, wait for the
   " "cls" to happen, after that we have one line with three characters.
   call WaitForAssert({-> assert_equal(3, len(term_scrape(buf, 1)))})
@@ -234,7 +234,7 @@ func Test_terminal_scrape_123()
   " Must still work after the job ended.
   let job = term_getjob(buf)
   call WaitForAssert({-> assert_equal("dead", job_status(job))})
-  call term_wait(buf)
+  call TermWait(buf)
   call Check_123(buf)
 
   exe buf . 'bwipe'
@@ -270,7 +270,7 @@ func Test_terminal_scrape_multibyte()
 
   let job = term_getjob(buf)
   call WaitForAssert({-> assert_equal("dead", job_status(job))})
-  call term_wait(buf)
+  call TermWait(buf)
 
   exe buf . 'bwipe'
   call delete('Xtext')
@@ -287,7 +287,7 @@ func Test_terminal_scroll()
 
   let job = term_getjob(buf)
   call WaitForAssert({-> assert_equal("dead", job_status(job))})
-  call term_wait(buf)
+  call TermWait(buf)
 
   " wait until the scrolling stops
   while 1
@@ -325,7 +325,7 @@ func Test_terminal_scrollback()
   call assert_inrange(91, 100, lines)
 
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
   set termwinscroll&
   call delete('Xtext')
@@ -359,10 +359,10 @@ func Test_terminal_postponed_scrollback(
 
   " stop "tail -f"
   call term_sendkeys(buf, "\<C-C>")
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
   " stop shell
   call term_sendkeys(buf, "exit\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   " close terminal window
   let tsk_ret = term_sendkeys(buf, ":q\<CR>")
 
@@ -622,7 +622,7 @@ func s:test_environment(name, value)
   else
     call term_sendkeys(buf, "echo $" . a:name . "\r")
   endif
-  call term_wait(buf)
+  call TermWait(buf)
   call StopShellInTerminal(buf)
   call WaitForAssert({-> assert_equal(a:value, getline(2))})
 
@@ -639,7 +639,7 @@ func Test_terminal_env()
   else
     call term_sendkeys(buf, "echo $TESTENV\r")
   endif
-  eval buf->term_wait()
+  eval buf->TermWait()
   call StopShellInTerminal(buf)
   call WaitForAssert({-> assert_equal('correct', getline(2))})
 
@@ -688,7 +688,7 @@ func Test_terminal_noblock()
 
   let g:job = term_getjob(buf)
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   unlet g:job
   bwipe
 endfunc
@@ -813,7 +813,7 @@ endfunc
 func Test_terminal_redir_file()
   let cmd = Get_cat_123_cmd()
   let buf = term_start(cmd, {'out_io': 'file', 'out_name': 'Xfile'})
-  call term_wait(buf)
+  call TermWait(buf)
   " ConPTY may precede escape sequence. There are things that are not so.
   if !has('conpty')
     call WaitForAssert({-> assert_notequal(0, len(readfile("Xfile")))})
@@ -827,7 +827,7 @@ func Test_terminal_redir_file()
   if has('unix')
     call writefile(['one line'], 'Xfile')
     let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'})
-    call term_wait(buf)
+    call TermWait(buf)
     call WaitForAssert({-> assert_equal('one line', term_getline(buf, 1))})
     let g:job = term_getjob(buf)
     call WaitForAssert({-> assert_equal('dead', job_status(g:job))})
@@ -860,7 +860,7 @@ func TerminalTmap(remap)
 
   call term_sendkeys(buf, "\r")
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
 
   tunmap 123
   tunmap 456
@@ -878,7 +878,7 @@ func Test_terminal_wall()
   let buf = Run_shell_in_terminal({})
   wall
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
   unlet g:job
 endfunc
@@ -887,7 +887,7 @@ func Test_terminal_wqall()
   let buf = Run_shell_in_terminal({})
   call assert_fails('wqall', 'E948')
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
   unlet g:job
 endfunc
@@ -908,7 +908,7 @@ func Test_terminal_composing_unicode()
   enew
   let buf = term_start(cmd, {'curwin': bufnr('')})
   let g:job = term_getjob(buf)
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
 
   if has('win32')
     call assert_equal('cmd', job_info(g:job).cmd[0])
@@ -919,7 +919,7 @@ func Test_terminal_composing_unicode()
   " ascii + composing
   let txt = "a\u0308bc"
   call term_sendkeys(buf, "echo " . txt . "\r")
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
   call assert_match("echo " . txt, term_getline(buf, lnum[0]))
   call assert_equal(txt, term_getline(buf, lnum[0] + 1))
   let l = term_scrape(buf, lnum[0] + 1)
@@ -930,7 +930,7 @@ func Test_terminal_composing_unicode()
   " multibyte + composing
   let txt = "\u304b\u3099\u304e\u304f\u3099\u3052\u3053\u3099"
   call term_sendkeys(buf, "echo " . txt . "\r")
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
   call assert_match("echo " . txt, term_getline(buf, lnum[1]))
   call assert_equal(txt, term_getline(buf, lnum[1] + 1))
   let l = term_scrape(buf, lnum[1] + 1)
@@ -943,7 +943,7 @@ func Test_terminal_composing_unicode()
   " \u00a0 + composing
   let txt = "abc\u00a0\u0308"
   call term_sendkeys(buf, "echo " . txt . "\r")
-  call term_wait(buf, 50)
+  call TermWait(buf, 25)
   call assert_match("echo " . txt, term_getline(buf, lnum[2]))
   call assert_equal(txt, term_getline(buf, lnum[2] + 1))
   let l = term_scrape(buf, lnum[2] + 1)
@@ -1587,7 +1587,7 @@ func Test_terminal_ansicolors_default()
   let buf = Run_shell_in_terminal({})
   call assert_equal(colors, term_getansicolors(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
 
   exe buf . 'bwipe'
 endfunc
@@ -1612,7 +1612,7 @@ func Test_terminal_ansicolors_global()
   let buf = Run_shell_in_terminal({})
   call assert_equal(g:terminal_ansi_colors, term_getansicolors(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
 
   exe buf . 'bwipe'
   unlet g:terminal_ansi_colors
@@ -1646,7 +1646,7 @@ func Test_terminal_ansicolors_func()
   call assert_fails('call term_setansicolors(buf, colors)', 'E474:')
 
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 endfunc
 
@@ -1742,7 +1742,7 @@ func Test_terminal_termwinsize_option_ze
   let win = bufwinid(buf)
   call assert_equal([winheight(win), winwidth(win)], term_getsize(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 
   set termwinsize=7x0
@@ -1750,7 +1750,7 @@ func Test_terminal_termwinsize_option_ze
   let win = bufwinid(buf)
   call assert_equal([7, winwidth(win)], term_getsize(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 
   set termwinsize=0x33
@@ -1758,7 +1758,7 @@ func Test_terminal_termwinsize_option_ze
   let win = bufwinid(buf)
   call assert_equal([winheight(win), 33], term_getsize(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 
   set termwinsize=
@@ -1788,7 +1788,7 @@ func Test_terminal_termwinsize_minimum()
   call assert_equal(30, winwidth(win))
 
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 
   set termwinsize=0*0
@@ -1796,7 +1796,7 @@ func Test_terminal_termwinsize_minimum()
   let win = bufwinid(buf)
   call assert_equal([winheight(win), winwidth(win)], term_getsize(buf))
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 
   set termwinsize=
@@ -1938,7 +1938,7 @@ func Test_zz1_terminal_in_gui()
   call assert_equal(1, winnr('$'))
   let buf = Run_shell_in_terminal({'term_finish': 'close'})
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
 
   " closing window wipes out the terminal buffer a with finished job
   call WaitForAssert({-> assert_equal(1, winnr('$'))})
@@ -2025,7 +2025,7 @@ func Test_terminal_normal_mode()
   END
   call writefile(lines, 'XtermNormal')
   let buf = RunVimInTerminal('-S XtermNormal', {'rows': 8})
-  call term_wait(buf)
+  call TermWait(buf)
 
   call term_sendkeys(buf, "\<C-W>N")
   call term_sendkeys(buf, ":set number cursorline culopt=both\r")
@@ -2215,7 +2215,7 @@ func Test_term_gettty()
   call assert_equal('', term_gettty(buf + 1))
 
   call StopShellInTerminal(buf)
-  call term_wait(buf)
+  call TermWait(buf)
   exe buf . 'bwipe'
 endfunc
 
@@ -2255,7 +2255,7 @@ func Test_terminal_getwinpos()
 	\ 'echo getwinpos()',
 	\ ], 'XTest_getwinpos')
   let buf = RunVimInTerminal('-S XTest_getwinpos', {'cols': 60})
-  call term_wait(buf)
+  call TermWait(buf)
 
   " Find the output of getwinpos() in the bottom line.
   let rows = term_getsize(buf)[0]
@@ -2278,7 +2278,7 @@ func Test_terminal_getwinpos()
   call assert_inrange(xroot + 2, xroot + xoff, xpos)
   call assert_inrange(yroot + 2, yroot + yoff, ypos)
 
-  call term_wait(buf)
+  call TermWait(buf)
   call term_sendkeys(buf, ":q\<CR>")
   call StopVimInTerminal(buf)
   call delete('XTest_getwinpos')
@@ -2434,11 +2434,11 @@ func Test_terminal_in_popup()
 	\ ]
   call writefile(lines, 'XtermPopup')
   let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15})
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, ":call OpenTerm(0)\<CR>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, ":\<CR>")
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, "\<C-W>:echo getwinvar(g:winid, \"&buftype\") win_gettype(g:winid)\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_1', {})
 
@@ -2446,7 +2446,7 @@ func Test_terminal_in_popup()
   call VerifyScreenDump(buf, 'Test_terminal_popup_2', {})
  
   call term_sendkeys(buf, ":call OpenTerm(1)\<CR>")
-  call term_wait(buf, 300)
+  call TermWait(buf, 150)
   call term_sendkeys(buf, ":set hlsearch\<CR>")
   call term_sendkeys(buf, "/edit\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_3', {})
@@ -2454,7 +2454,7 @@ func Test_terminal_in_popup()
   call term_sendkeys(buf, "\<C-W>:call HidePopup()\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_4', {})
   call term_sendkeys(buf, "\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
 
   call term_sendkeys(buf, "\<C-W>:call ClosePopup()\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_5', {})
@@ -2470,9 +2470,9 @@ func Test_terminal_in_popup()
   call term_sendkeys(buf, "A")
   call VerifyScreenDump(buf, 'Test_terminal_popup_8', {})
 
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":q\<CR>")
-  call term_wait(buf, 200)  " wait for terminal to vanish
+  call TermWait(buf, 100)  " wait for terminal to vanish
 
   call StopVimInTerminal(buf)
   call delete('Xtext')
@@ -2499,16 +2499,16 @@ func Test_terminal_in_popup_min_size()
 	\ ]
   call writefile(lines, 'XtermPopup')
   let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15})
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, ":set noruler\<CR>")
   call term_sendkeys(buf, ":call OpenTerm()\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_m1', {})
 
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":q\<CR>")
-  call term_wait(buf, 100)  " wait for terminal to vanish
+  call TermWait(buf, 50)  " wait for terminal to vanish
   call StopVimInTerminal(buf)
   call delete('Xtext')
   call delete('XtermPopup')
@@ -2531,17 +2531,17 @@ func Terminal_in_popup_colored(group_nam
 	\ ]
   call writefile(lines, 'XtermPopup')
   let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15})
-  call term_wait(buf, 200)
+  call TermWait(buf, 100)
   call term_sendkeys(buf, ":set noruler\<CR>")
   call term_sendkeys(buf, ":call OpenTerm()\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "hello\<CR>")
   call VerifyScreenDump(buf, 'Test_terminal_popup_' .. a:group_name, {})
 
   call term_sendkeys(buf, "\<C-D>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, ":q\<CR>")
-  call term_wait(buf, 100)  " wait for terminal to vanish
+  call TermWait(buf, 50)  " wait for terminal to vanish
   call StopVimInTerminal(buf)
   call delete('XtermPopup')
 endfunc
@@ -2594,19 +2594,19 @@ func Test_term_nasty_callback()
     let g:buf1 = term_start('sh', #{hidden: 1, term_finish: 'close'})
     call popup_create(g:buf1, {})
     let g:buf2 = term_start(['sh', '-c'], #{curwin: 1, exit_cb: function('TermExit')})
-    call term_wait(g:buf2, 100)
+    call TermWait(g:buf2, 50)
     call popup_close(win_getid())
   endfunc
   func TermExit(...)
     let altbuf = bufnr('#')
     call term_sendkeys(altbuf, "exit\<CR>")
-    call term_wait(altbuf)
+    call TermWait(altbuf)
     call popup_close(win_getid())
   endfunc
   call OpenTerms()
 
   call term_sendkeys(g:buf0, "exit\<CR>")
-  call term_wait(g:buf0, 100)
+  call TermWait(g:buf0, 50)
   exe g:buf0 .. 'bwipe!'
   set hidden&
 endfunc
--- a/src/testdir/test_terminal_fail.vim
+++ b/src/testdir/test_terminal_fail.vim
@@ -10,7 +10,7 @@ source shared.vim
 func Test_terminal_redir_fails()
   if has('unix')
     let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'})
-    call term_wait(buf)
+    call TermWait(buf)
     call WaitFor('len(readfile("Xfile")) > 0')
     call assert_match('executing job failed', readfile('Xfile')[0])
     call WaitFor('!&modified')
--- a/src/testdir/test_timers.vim
+++ b/src/testdir/test_timers.vim
@@ -398,9 +398,9 @@ func Test_timer_error_in_timer_callback(
   call WaitForAssert({-> assert_notequal('', term_getline(buf, 8))})
 
   " GC must not run during timer callback, which can make Vim crash.
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call term_sendkeys(buf, "\<CR>")
-  call term_wait(buf, 100)
+  call TermWait(buf, 50)
   call assert_equal('run', job_status(job))
 
   call term_sendkeys(buf, ":qall!\<CR>")
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1913,30 +1913,30 @@ func Test_deep_nest()
 
   " Deep nesting of if ... endif
   call term_sendkeys(buf, ":call Test1()\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E579:', term_getline(buf, 5))})
 
   " Deep nesting of for ... endfor
   call term_sendkeys(buf, ":call Test2()\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E585:', term_getline(buf, 5))})
 
   " Deep nesting of while ... endwhile
   call term_sendkeys(buf, ":call Test3()\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E585:', term_getline(buf, 5))})
 
   " Deep nesting of try ... endtry
   call term_sendkeys(buf, ":call Test4()\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E601:', term_getline(buf, 5))})
 
   " Deep nesting of function ... endfunction
   call term_sendkeys(buf, ":call Test5()\n")
-  call term_wait(buf)
+  call TermWait(buf)
   call WaitForAssert({-> assert_match('^E1058:', term_getline(buf, 4))})
   call term_sendkeys(buf, "\<C-C>\n")
-  call term_wait(buf)
+  call TermWait(buf)
 
   "let l = ''
   "for i in range(1, 6)
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    533,
+/**/
     532,
 /**/
     531,