1
0
forked from aniani/vim

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 #3871)
This commit is contained in:
Bram Moolenaar
2019-01-27 22:32:55 +01:00
parent 346d2a359a
commit 26d982185e
3 changed files with 66 additions and 3 deletions

View File

@@ -32,6 +32,28 @@ if has('timers')
call timer_start(100, 'ExitInsertMode') call timer_start(100, 'ExitInsertMode')
call feedkeys('a', 'x!') call feedkeys('a', 'x!')
call assert_equal(1, g:triggered) 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 au! CursorHoldI
set updatetime& set updatetime&
endfunc endfunc
@@ -44,6 +66,7 @@ if has('timers')
" CursorHoldI does not trigger after CTRL-X " CursorHoldI does not trigger after CTRL-X
call feedkeys("a\<C-X>", 'x!') call feedkeys("a\<C-X>", 'x!')
call assert_equal(0, g:triggered) call assert_equal(0, g:triggered)
unlet g:triggered
au! CursorHoldI au! CursorHoldI
set updatetime& set updatetime&
endfunc endfunc
@@ -452,7 +475,7 @@ func s:AutoCommandOptionSet(match)
endfunc endfunc
func Test_OptionSet() func Test_OptionSet()
if !has("eval") || !has("autocmd") || !exists("+autochdir") if !has("eval") || !exists("+autochdir")
return return
endif endif
@@ -595,7 +618,7 @@ endfunc
func Test_OptionSet_diffmode() func Test_OptionSet_diffmode()
call test_override('starting', 1) call test_override('starting', 1)
" 18: Changing an option when enetering diff mode " 18: Changing an option when entering diff mode
new new
au OptionSet diff :let &l:cul=v:option_new au OptionSet diff :let &l:cul=v:option_new

View File

@@ -1,5 +1,7 @@
" Tests for mappings and abbreviations " Tests for mappings and abbreviations
source shared.vim
func Test_abbreviation() func Test_abbreviation()
" abbreviation with 0x80 should work " abbreviation with 0x80 should work
inoreab чкпр vim inoreab чкпр vim
@@ -169,6 +171,9 @@ func Test_abbr_after_line_join()
endfunc endfunc
func Test_map_timeout() func Test_map_timeout()
if !has('timers')
return
endif
nnoremap aaaa :let got_aaaa = 1<CR> nnoremap aaaa :let got_aaaa = 1<CR>
nnoremap bb :let got_bb = 1<CR> nnoremap bb :let got_bb = 1<CR>
nmap b aaa nmap b aaa
@@ -178,7 +183,7 @@ func Test_map_timeout()
call feedkeys("\<Esc>", "t") call feedkeys("\<Esc>", "t")
endfunc endfunc
set timeout timeoutlen=200 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'. " 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 " When it times out it is expanded to "aaa", but there is no wait for
" "aaaa". Can't check that reliably though. " "aaaa". Can't check that reliably though.
@@ -193,6 +198,39 @@ func Test_map_timeout()
nunmap b nunmap b
set timeoutlen& set timeoutlen&
delfunc ExitInsert 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 endfunc
func Test_abbreviation_CR() func Test_abbreviation_CR()

View File

@@ -783,6 +783,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
837,
/**/ /**/
836, 836,
/**/ /**/