]> granicus.if.org Git - vim/commitdiff
patch 8.0.1245: when WaitFor() has a wrong expression it just waits a second v8.0.1245
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Nov 2017 15:58:00 +0000 (16:58 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Nov 2017 15:58:00 +0000 (16:58 +0100)
Problem:    When WaitFor() has a wrong expression it just waits a second,
            which goes unnoticed. (James McCoy)
Solution:   When WaitFor() times out throw an exception.  Fix places where the
            expression was wrong.

src/testdir/shared.vim
src/testdir/test_channel.vim
src/testdir/test_netbeans.vim
src/testdir/test_terminal.vim
src/version.c

index 8db388a4faf141a4aa0290c97bfcf4698d01aa02..eb43cf4e74d62ac8bfbfba3926247fc77b95242f 100644 (file)
@@ -139,7 +139,7 @@ func WaitFor(expr, ...)
     endif
     sleep 10m
   endfor
-  return timeout
+  throw 'WaitFor() timed out after ' . timeout . ' msec'
 endfunc
 
 " Wait for up to a given milliseconds.
index 9dba0c4b753257d5c07f244cf505be081c48e3a9..5709bf83255101f2880e03dc8db35ab147ca2942 100644 (file)
@@ -709,7 +709,7 @@ func Run_test_pipe_to_buffer(use_name, nomod, do_msg)
     call ch_sendraw(handle, "double this\n")
     call ch_sendraw(handle, "quit\n")
     sp pipe-output
-    call WaitFor('line("$") >= 6 && g:Ch_bufClosed == "yes"')
+    call WaitFor('line("$") == ' . len(expected) . ' && g:Ch_bufClosed == "yes"')
     call assert_equal(expected, getline(1, '$'))
     if a:nomod
       call assert_equal(0, &modifiable)
@@ -804,7 +804,7 @@ func Run_test_pipe_err_to_buffer(use_name, nomod, do_msg)
     call ch_sendraw(handle, "doubleerr this\n")
     call ch_sendraw(handle, "quit\n")
     sp pipe-err
-    call WaitFor('line("$") >= 5')
+    call WaitFor('line("$") == ' . len(expected))
     call assert_equal(expected, getline(1, '$'))
     if a:nomod
       call assert_equal(0, &modifiable)
@@ -1130,12 +1130,14 @@ func Test_pipe_to_buffer_raw()
   let job = job_start([s:python, '-c', 
         \ 'import sys; [sys.stdout.write(".") and sys.stdout.flush() for _ in range(10000)]'], options)
   call assert_equal("run", job_status(job))
-  call WaitFor('len(join(getline(2,line("$")),"") >= 10000')
+  call WaitFor('len(join(getline(1, "$"), "")) >= 10000', 3000)
   try
-    for line in getline(2, '$')
-      let line = substitute(line, '^\.*', '', '')
-      call assert_equal('', line)
+    let totlen = 0
+    for line in getline(1, '$')
+      call assert_equal('', substitute(line, '^\.*', '', ''))
+      let totlen += len(line)
     endfor
+    call assert_equal(10000, totlen)
   finally
     call job_stop(job)
     bwipe!
@@ -1300,24 +1302,25 @@ func Test_close_and_exit_cb()
   endif
   call ch_log('Test_close_and_exit_cb')
 
-  let dict = {'ret': {}}
-  func dict.close_cb(ch) dict
+  let g:retdict = {'ret': {}}
+  func g:retdict.close_cb(ch) dict
     let self.ret['close_cb'] = job_status(ch_getjob(a:ch))
   endfunc
-  func dict.exit_cb(job, status) dict
+  func g:retdict.exit_cb(job, status) dict
     let self.ret['exit_cb'] = job_status(a:job)
   endfunc
 
   let g:job = job_start('echo', {
-        \ 'close_cb': dict.close_cb,
-        \ 'exit_cb': dict.exit_cb,
+        \ 'close_cb': g:retdict.close_cb,
+        \ 'exit_cb': g:retdict.exit_cb,
         \ })
   call assert_equal('run', job_status(g:job))
   unlet g:job
-  call WaitFor('len(dict.ret) >= 2')
-  call assert_equal(2, len(dict.ret))
-  call assert_match('^\%(dead\|run\)', dict.ret['close_cb'])
-  call assert_equal('dead', dict.ret['exit_cb'])
+  call WaitFor('len(g:retdict.ret) >= 2')
+  call assert_equal(2, len(g:retdict.ret))
+  call assert_match('^\%(dead\|run\)', g:retdict.ret['close_cb'])
+  call assert_equal('dead', g:retdict.ret['exit_cb'])
+  unlet g:retdict
 endfunc
 
 """"""""""
@@ -1547,13 +1550,14 @@ func Test_job_stop_immediately()
     return
   endif
 
-  let job = job_start([s:python, '-c', 'import time;time.sleep(10)'])
+  let g:job = job_start([s:python, '-c', 'import time;time.sleep(10)'])
   try
-    call job_stop(job)
-    call WaitFor('"dead" == job_status(job)')
-    call assert_equal('dead', job_status(job))
+    call job_stop(g:job)
+    call WaitFor('"dead" == job_status(g:job)')
+    call assert_equal('dead', job_status(g:job))
   finally
-    call job_stop(job, 'kill')
+    call job_stop(g:job, 'kill')
+    unlet g:job
   endtry
 endfunc
 
@@ -1585,7 +1589,7 @@ func Test_collapse_buffers()
   split testout
   1,$delete
   call job_start('cat test_channel.vim', {'out_io': 'buffer', 'out_name': 'testout'})
-  call WaitFor('line("$") > g:linecount')
+  call WaitFor('line("$") >= g:linecount')
   call assert_inrange(g:linecount, g:linecount + 1, line('$'))
   bwipe!
 endfunc
index 7bffeb215ad4e271c7d0f088c226f41701bb97c1..4ac03db6f56b41cd4b401239852825f72948c88b 100644 (file)
@@ -27,7 +27,7 @@ func Nb_basic(port)
 
   " Opening README.txt will result in a setDot command
   call WaitFor('len(readfile("Xnetbeans")) > 4')
-  call WaitFor('getcurpos()[1] == 2')
+  call WaitFor('getcurpos()[1] == 3')
   let pos = getcurpos()
   call assert_equal(3, pos[1])
   call assert_equal(20, pos[2])
index 95c1b98e70257d79af78f9dde43007518f839889..967cd8fc4209808d313935b56c3ab8727a11e1d6 100644 (file)
@@ -705,7 +705,7 @@ func Test_terminal_composing_unicode()
 
   enew
   let buf = term_start(cmd, {'curwin': bufnr('')})
-  let job = term_getjob(buf)
+  let g:job = term_getjob(buf)
   call term_wait(buf, 50)
 
   " ascii + composing
@@ -742,8 +742,9 @@ func Test_terminal_composing_unicode()
   call assert_equal("\u00a0\u0308", l[3].chars)
 
   call term_sendkeys(buf, "exit\r")
-  call WaitFor('job_status(job) == "dead"')
-  call assert_equal('dead', job_status(job))
+  call WaitFor('job_status(g:job) == "dead"')
+  call assert_equal('dead', job_status(g:job))
   bwipe!
+  unlet g:job
   let &encoding = save_enc
 endfunc
index a46fb77c14b051b3801e36dd1e86689c40a04e54..52302122629a5476e0de4ac96dff73088c890c35 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1245,
 /**/
     1244,
 /**/