# HG changeset patch # User Christian Brabandt # Date 1509820206 -3600 # Node ID c1347c968d31bdc5a59fcf356ba46bf83a12dad8 # Parent c5c3974588fe1affd3060a048d46e7c478541c0e patch 8.0.1260: using global variables for WaitFor() commit https://github.com/vim/vim/commit/ab8b1c14a31e36ae87cc7e13c4a75318d513fc7b Author: Bram Moolenaar 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. diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim --- 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) diff --git a/src/testdir/test_clientserver.vim b/src/testdir/test_clientserver.vim --- 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(''), 'another')\", '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!\") - 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 --- 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 diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim --- 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\") + let buf = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile'], {'term_rows': rows}) + call term_sendkeys(buf, (h / 3 - 1) . "o\") " 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\") - call term_sendkeys(g:buf, "\") - call term_wait(g:buf, 100) + call term_sendkeys(buf, "Gi\") + call term_sendkeys(buf, "\") + 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 --- 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!\") - 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 --- 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\") - call term_sendkeys(g:buf, "exit\") - let g:line = 4 + let buf = term_start("cmd /K chcp 65001") + call term_sendkeys(buf, "type Xtext\") + call term_sendkeys(buf, "exit\") + 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) . "\") + call term_sendkeys(buf, 'echo ' . repeat(c, len) . "\") endfor - call term_sendkeys(g:buf, "echo done\") + call term_sendkeys(buf, "echo done\") " 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 --- 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,