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:
@@ -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
|
||||||
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user