Mercurial > vim
changeset 15659:8513d9864f7e v8.1.0837
patch 8.1.0837: timer interrupting cursorhold and mapping not tested
commit https://github.com/vim/vim/commit/26d982185e21398738a9c688429c0a1840d7c9c3
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jan 27 22:32:55 2019 +0100
patch 8.1.0837: timer interrupting cursorhold and mapping not tested
Problem: Timer interrupting cursorhold and mapping not tested.
Solution: Add tests with timers. (Ozaki Kiichi, closes https://github.com/vim/vim/issues/3871)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 27 Jan 2019 22:45:05 +0100 |
parents | baf0958cbef4 |
children | 8dcb275f209b |
files | src/testdir/test_autocmd.vim src/testdir/test_mapping.vim src/version.c |
diffstat | 3 files changed, 66 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_autocmd.vim +++ b/src/testdir/test_autocmd.vim @@ -32,6 +32,28 @@ if has('timers') call timer_start(100, 'ExitInsertMode') call feedkeys('a', 'x!') call assert_equal(1, g:triggered) + unlet g:triggered + au! CursorHoldI + set updatetime& + endfunc + + func Test_cursorhold_insert_with_timer_interrupt() + if !has('job') + return + endif + " Need to move the cursor. + call feedkeys("ggG", "xt") + + " Confirm the timer invoked in exit_cb of the job doesn't disturb + " CursorHoldI event. + let g:triggered = 0 + au CursorHoldI * let g:triggered += 1 + set updatetime=500 + call job_start(has('win32') ? 'cmd /c echo:' : 'echo', + \ {'exit_cb': {j, s -> timer_start(1000, 'ExitInsertMode')}}) + call feedkeys('a', 'x!') + call assert_equal(1, g:triggered) + unlet g:triggered au! CursorHoldI set updatetime& endfunc @@ -44,6 +66,7 @@ if has('timers') " CursorHoldI does not trigger after CTRL-X call feedkeys("a\<C-X>", 'x!') call assert_equal(0, g:triggered) + unlet g:triggered au! CursorHoldI set updatetime& endfunc @@ -452,7 +475,7 @@ func s:AutoCommandOptionSet(match) endfunc func Test_OptionSet() - if !has("eval") || !has("autocmd") || !exists("+autochdir") + if !has("eval") || !exists("+autochdir") return endif @@ -595,7 +618,7 @@ endfunc func Test_OptionSet_diffmode() call test_override('starting', 1) - " 18: Changing an option when enetering diff mode + " 18: Changing an option when entering diff mode new au OptionSet diff :let &l:cul=v:option_new
--- a/src/testdir/test_mapping.vim +++ b/src/testdir/test_mapping.vim @@ -1,5 +1,7 @@ " Tests for mappings and abbreviations +source shared.vim + func Test_abbreviation() " abbreviation with 0x80 should work inoreab чкпр vim @@ -169,6 +171,9 @@ func Test_abbr_after_line_join() endfunc func Test_map_timeout() + if !has('timers') + return + endif nnoremap aaaa :let got_aaaa = 1<CR> nnoremap bb :let got_bb = 1<CR> nmap b aaa @@ -178,7 +183,7 @@ func Test_map_timeout() call feedkeys("\<Esc>", "t") endfunc set timeout timeoutlen=200 - call timer_start(300, 'ExitInsert') + let timer = timer_start(300, 'ExitInsert') " After the 'b' Vim waits for another character to see if it matches 'bb'. " When it times out it is expanded to "aaa", but there is no wait for " "aaaa". Can't check that reliably though. @@ -193,6 +198,39 @@ func Test_map_timeout() nunmap b set timeoutlen& delfunc ExitInsert + call timer_stop(timer) +endfunc + +func Test_map_timeout_with_timer_interrupt() + if !has('job') || !has('timers') + return + endif + + " Confirm the timer invoked in exit_cb of the job doesn't disturb mapped key + " sequence. + new + let g:val = 0 + nnoremap \12 :let g:val = 1<CR> + nnoremap \123 :let g:val = 2<CR> + set timeout timeoutlen=1000 + + func ExitCb(job, status) + let g:timer = timer_start(1, {_ -> feedkeys("3\<Esc>", 't')}) + endfunc + + call job_start([&shell, &shellcmdflag, 'echo'], {'exit_cb': 'ExitCb'}) + call feedkeys('\12', 'xt!') + call assert_equal(2, g:val) + + bwipe! + nunmap \12 + nunmap \123 + set timeoutlen& + call WaitFor({-> exists('g:timer')}) + call timer_stop(g:timer) + unlet g:timer + unlet g:val + delfunc ExitCb endfunc func Test_abbreviation_CR()