changeset 12765:c1347c968d31 v8.0.1260

patch 8.0.1260: using global variables for WaitFor() commit https://github.com/vim/vim/commit/ab8b1c14a31e36ae87cc7e13c4a75318d513fc7b Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 4 19:24:31 2017 +0100 patch 8.0.1260: using global variables for WaitFor() Problem: Using global variables for WaitFor(). Solution: Use a lambda function instead. Don't check a condition if WaitFor() already checked it.
author Christian Brabandt <cb@256bit.org>
date Sat, 04 Nov 2017 19:30:06 +0100
parents c5c3974588fe
children 1260c3619ed6
files src/testdir/test_channel.vim src/testdir/test_clientserver.vim src/testdir/test_job_fails.vim src/testdir/test_popup.vim src/testdir/test_quotestar.vim src/testdir/test_terminal.vim src/version.c
diffstat 7 files changed, 68 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -274,12 +274,10 @@ func Ch_channel_handler(port)
   " 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 @@ func Ch_channel_zero(port)
   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 @@ func Ch_channel_zero(port)
   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 @@ func Test_exit_callback_interval()
   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)
--- a/src/testdir/test_clientserver.vim
+++ b/src/testdir/test_clientserver.vim
@@ -27,12 +27,8 @@ func Test_client_server()
 
   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 @@ func Test_client_server()
   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 @@ func Test_client_server()
   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
--- a/src/testdir/test_job_fails.vim
+++ b/src/testdir/test_job_fails.vim
@@ -6,14 +6,11 @@ source shared.vim
 
 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
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -638,30 +638,30 @@ func Test_popup_and_window_resize()
     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
 
--- a/src/testdir/test_quotestar.vim
+++ b/src/testdir/test_quotestar.vim
@@ -60,12 +60,8 @@ func Do_test_quotestar_for_x11()
   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 @@ func Do_test_quotestar_for_x11()
   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
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -189,15 +189,14 @@ func Test_terminal_scrape_123()
   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 @@ func Test_terminal_scrape_multibyte()
   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 @@ func Test_terminal_scrape_multibyte()
   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 @@ func Test_terminal_scroll()
   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 @@ func Test_terminal_list_args()
 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 @@ func Test_terminal_noblock()
   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
 
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1260,
+/**/
     1259,
 /**/
     1258,