diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 5709bf8..459ee13 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -274,12 +274,10 @@
   " Test that it works while waiting on a numbered message.
   call assert_equal('ok', ch_evalexpr(handle, 'call me'))
   call WaitFor('"we called you" == g:Ch_reply')
-  call assert_equal('we called you', g:Ch_reply)
 
   " Test that it works while not waiting on a numbered message.
   call ch_sendexpr(handle, 'call me again')
   call WaitFor('"we did call you" == g:Ch_reply')
-  call assert_equal('we did call you', g:Ch_reply)
 endfunc
 
 func Test_channel_handler()
@@ -322,7 +320,6 @@
   call assert_equal('sent zero', ch_evalexpr(handle, 'send zero'))
   if s:has_handler
     call WaitFor('"zero index" == g:Ch_reply')
-    call assert_equal('zero index', g:Ch_reply)
   else
     sleep 20m
     call assert_equal('', g:Ch_reply)
@@ -338,7 +335,6 @@
   else
     call assert_equal('', g:Ch_reply)
   endif
-  call assert_equal('sent zero', g:Ch_zero_reply)
 endfunc
 
 func Test_zero_reply()
@@ -1468,7 +1464,7 @@
   let g:exit_cb_val = {'start': reltime(), 'end': 0, 'process': 0}
   let job = job_start([s:python, '-c', 'import time;time.sleep(0.5)'], {'exit_cb': 'MyExitTimeCb'})
   let g:exit_cb_val.process = job_info(job).process
-  call WaitFor('type(g:exit_cb_val.end) != v:t_number || g:exit_cb_val.end != 0')
+  call WaitFor('type(g:exit_cb_val.end) != v:t_number || g:exit_cb_val.end != 0', 2000)
   let elapsed = reltimefloat(g:exit_cb_val.end)
   call assert_true(elapsed > 0.5)
   call assert_true(elapsed < 1.0)
diff --git a/src/testdir/test_clientserver.vim b/src/testdir/test_clientserver.vim
index 02840de..6ef6428 100644
--- a/src/testdir/test_clientserver.vim
+++ b/src/testdir/test_clientserver.vim
@@ -27,12 +27,8 @@
 
   let name = 'XVIMTEST'
   let cmd .= ' --servername ' . name
-  let g:job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'})
-  call WaitFor('job_status(g:job) == "run"')
-  if job_status(g:job) != 'run'
-    call assert_report('Cannot run the Vim server')
-    return
-  endif
+  let job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'})
+  call WaitFor({-> job_status(job) == "run"})
 
   " Takes a short while for the server to be active.
   " When using valgrind it takes much longer.
@@ -83,7 +79,7 @@
   call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid')
   let peek_result = 'nothing'
   let r = remote_peek(g:myserverid, 'peek_result')
-  " unpredictable whether the result is already avaialble.
+  " unpredictable whether the result is already available.
   if r > 0
     call assert_equal('another', peek_result)
   elseif r == 0
@@ -97,11 +93,14 @@
   call assert_equal('another', remote_read(g:myserverid, 2))
 
   call remote_send(name, ":qa!\<CR>")
-  call WaitFor('job_status(g:job) == "dead"')
-  if job_status(g:job) != 'dead'
-    call assert_report('Server did not exit')
-    call job_stop(g:job, 'kill')
-  endif
+  try
+    call WaitFor({-> job_status(job) == "dead"})
+  finally
+    if job_status(job) != 'dead'
+      call assert_report('Server did not exit')
+      call job_stop(job, 'kill')
+    endif
+  endtry
 endfunc
 
 " Uncomment this line to get a debugging log
diff --git a/src/testdir/test_job_fails.vim b/src/testdir/test_job_fails.vim
index ddab6a3..22637c0 100644
--- a/src/testdir/test_job_fails.vim
+++ b/src/testdir/test_job_fails.vim
@@ -6,14 +6,11 @@
 
 func Test_job_start_fails()
   if has('job')
-    let g:job = job_start('axdfxsdf')
+    let job = job_start('axdfxsdf')
     if has('unix')
-      call WaitFor('job_status(g:job) == "dead"')
-      call assert_equal('dead', job_status(g:job))
+      call WaitFor({-> job_status(job) == "dead"})
     else
-      call WaitFor('job_status(g:job) == "fail"')
-      call assert_equal('fail', job_status(g:job))
+      call WaitFor({-> job_status(job) == "fail"})
     endif
-    unlet g:job
   endif
 endfunc
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 281836c..54d641f 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -638,30 +638,30 @@
     return
   endif
   let rows = h / 3
-  let g:buf = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile'], {'term_rows': rows})
-  call term_sendkeys(g:buf, (h / 3 - 1) . "o\<esc>")
+  let buf = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile'], {'term_rows': rows})
+  call term_sendkeys(buf, (h / 3 - 1) . "o\<esc>")
   " Wait for the nested Vim to exit insert mode, where it will show the ruler.
   " Need to trigger a redraw.
-  call WaitFor(printf('execute("redraw") == "" && term_getline(g:buf, %d) =~ "\\<%d,.*Bot"', rows, rows))
+  call WaitFor({-> execute("redraw") == "" && term_getline(buf, rows) =~ '\<' . rows . ',.*Bot'})
 
-  call term_sendkeys(g:buf, "Gi\<c-x>")
-  call term_sendkeys(g:buf, "\<c-v>")
-  call term_wait(g:buf, 100)
+  call term_sendkeys(buf, "Gi\<c-x>")
+  call term_sendkeys(buf, "\<c-v>")
+  call term_wait(buf, 100)
   " popup first entry "!" must be at the top
-  call WaitFor('term_getline(g:buf, 1) =~ "^!"')
-  call assert_match('^!\s*$', term_getline(g:buf, 1))
+  call WaitFor({-> term_getline(buf, 1) =~ "^!"})
+  call assert_match('^!\s*$', term_getline(buf, 1))
   exe 'resize +' . (h - 1)
-  call term_wait(g:buf, 100)
+  call term_wait(buf, 100)
   redraw!
   " popup shifted down, first line is now empty
-  call WaitFor('term_getline(g:buf, 1) == ""')
-  call assert_equal('', term_getline(g:buf, 1))
+  call WaitFor({-> term_getline(buf, 1) == ""})
+  call assert_equal('', term_getline(buf, 1))
   sleep 100m
   " popup is below cursor line and shows first match "!"
-  call WaitFor('term_getline(g:buf, term_getcursor(g:buf)[0] + 1) =~ "^!"')
-  call assert_match('^!\s*$', term_getline(g:buf, term_getcursor(g:buf)[0] + 1))
+  call WaitFor({-> term_getline(buf, term_getcursor(buf)[0] + 1) =~ "^!"})
+  call assert_match('^!\s*$', term_getline(buf, term_getcursor(buf)[0] + 1))
   " cursor line also shows !
-  call assert_match('^!\s*$', term_getline(g:buf, term_getcursor(g:buf)[0]))
+  call assert_match('^!\s*$', term_getline(buf, term_getcursor(buf)[0]))
   bwipe!
 endfunc
 
diff --git a/src/testdir/test_quotestar.vim b/src/testdir/test_quotestar.vim
index b7d3158..cc975be 100644
--- a/src/testdir/test_quotestar.vim
+++ b/src/testdir/test_quotestar.vim
@@ -60,12 +60,8 @@
   call assert_notmatch(name, serverlist())
 
   let cmd .= ' --servername ' . name
-  let g:job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'})
-  call WaitFor('job_status(g:job) == "run"')
-  if job_status(g:job) != 'run'
-    call assert_report('Cannot run the Vim server')
-    return ''
-  endif
+  let job = job_start(cmd, {'stoponexit': 'kill', 'out_io': 'null'})
+  call WaitFor({-> job_status(job) == "run"})
 
   " Takes a short while for the server to be active.
   call WaitFor('serverlist() =~ "' . name . '"')
@@ -124,11 +120,14 @@
   endif
 
   call remote_send(name, ":qa!\<CR>")
-  call WaitFor('job_status(g:job) == "dead"')
-  if job_status(g:job) != 'dead'
-    call assert_report('Server did not exit')
-    call job_stop(g:job, 'kill')
-  endif
+  try
+    call WaitFor({-> job_status(job) == "dead"})
+  finally
+    if job_status(job) != 'dead'
+      call assert_report('Server did not exit')
+      call job_stop(job, 'kill')
+    endif
+  endtry
 
   return ''
 endfunc
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 967cd8f..4d20794 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -189,15 +189,14 @@
   call term_wait(1234)
 
   call term_wait(buf)
-  let g:buf = 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 WaitFor('len(term_scrape(g:buf, 1)) == 3')
+  call WaitFor({-> len(term_scrape(buf, 1)) == 3})
   call Check_123(buf)
 
   " Must still work after the job ended.
-  let g:job = term_getjob(buf)
-  call WaitFor('job_status(g:job) == "dead"')
+  let job = term_getjob(buf)
+  call WaitFor({-> job_status(job) == "dead"})
   call term_wait(buf)
   call Check_123(buf)
 
@@ -213,17 +212,17 @@
   if has('win32')
     " Run cmd with UTF-8 codepage to make the type command print the expected
     " multibyte characters.
-    let g:buf = term_start("cmd /K chcp 65001")
-    call term_sendkeys(g:buf, "type Xtext\<CR>")
-    call term_sendkeys(g:buf, "exit\<CR>")
-    let g:line = 4
+    let buf = term_start("cmd /K chcp 65001")
+    call term_sendkeys(buf, "type Xtext\<CR>")
+    call term_sendkeys(buf, "exit\<CR>")
+    let line = 4
   else
-    let g:buf = term_start("cat Xtext")
-    let g:line = 1
+    let buf = term_start("cat Xtext")
+    let line = 1
   endif
 
-  call WaitFor('len(term_scrape(g:buf, g:line)) >= 7 && term_scrape(g:buf, g:line)[0].chars == "l"')
-  let l = term_scrape(g:buf, g:line)
+  call WaitFor({-> len(term_scrape(buf, line)) >= 7 && term_scrape(buf, line)[0].chars == "l"})
+  let l = term_scrape(buf, line)
   call assert_true(len(l) >= 7)
   call assert_equal('l', l[0].chars)
   call assert_equal('é', l[1].chars)
@@ -235,13 +234,11 @@
   call assert_equal('r', l[5].chars)
   call assert_equal('s', l[6].chars)
 
-  let g:job = term_getjob(g:buf)
-  call WaitFor('job_status(g:job) == "dead"')
-  call term_wait(g:buf)
+  let job = term_getjob(buf)
+  call WaitFor({-> job_status(job) == "dead"})
+  call term_wait(buf)
 
-  exe g:buf . 'bwipe'
-  unlet g:buf
-  unlet g:line
+  exe buf . 'bwipe'
   call delete('Xtext')
 endfunc
 
@@ -254,8 +251,8 @@
   endif
   let buf = term_start(cmd)
 
-  let g:job = term_getjob(buf)
-  call WaitFor('job_status(g:job) == "dead"')
+  let job = term_getjob(buf)
+  call WaitFor({-> job_status(job) == "dead"})
   call term_wait(buf)
   if has('win32')
     " TODO: this should not be needed
@@ -483,7 +480,7 @@
 endfunction
 
 func Test_terminal_noblock()
-  let g:buf = term_start(&shell)
+  let buf = term_start(&shell)
   if has('mac')
     " The shell or something else has a problem dealing with more than 1000
     " characters at the same time.
@@ -493,26 +490,24 @@
   endif
 
   for c in ['a','b','c','d','e','f','g','h','i','j','k']
-    call term_sendkeys(g:buf, 'echo ' . repeat(c, len) . "\<cr>")
+    call term_sendkeys(buf, 'echo ' . repeat(c, len) . "\<cr>")
   endfor
-  call term_sendkeys(g:buf, "echo done\<cr>")
+  call term_sendkeys(buf, "echo done\<cr>")
 
   " On MS-Windows there is an extra empty line below "done".  Find "done" in
   " the last-but-one or the last-but-two line.
-  let g:lnum = term_getsize(g:buf)[0] - 1
-  call WaitFor('term_getline(g:buf, g:lnum) =~ "done" || term_getline(g:buf, g:lnum - 1) =~ "done"', 3000)
-  let line = term_getline(g:buf, g:lnum)
+  let lnum = term_getsize(buf)[0] - 1
+  call WaitFor({-> term_getline(buf, lnum) =~ "done" || term_getline(buf, lnum - 1) =~ "done"}, 3000)
+  let line = term_getline(buf, lnum)
   if line !~ 'done'
-    let line = term_getline(g:buf, g:lnum - 1)
+    let line = term_getline(buf, lnum - 1)
   endif
   call assert_match('done', line)
 
-  let g:job = term_getjob(g:buf)
-  call Stop_shell_in_terminal(g:buf)
-  call term_wait(g:buf)
-  unlet g:buf
+  let g:job = term_getjob(buf)
+  call Stop_shell_in_terminal(buf)
+  call term_wait(buf)
   unlet g:job
-  unlet g:lnum
   bwipe
 endfunc
 
diff --git a/src/version.c b/src/version.c
index e31f17b..4fa6ea5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1260,
+/**/
     1259,
 /**/
     1258,
