Patch 8.1.0837
Problem:    Timer interrupting cursorhold and mapping not tested.
Solution:   Add tests with timers. (Ozaki Kiichi, closes #3871)
Files:      src/testdir/test_autocmd.vim, src/testdir/test_mapping.vim


*** ../vim-8.1.0836/src/testdir/test_autocmd.vim        2019-01-24 
21:57:11.574719854 +0100
--- src/testdir/test_autocmd.vim        2019-01-27 22:30:22.173169702 +0100
***************
*** 32,37 ****
--- 32,59 ----
      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,49 ****
--- 66,72 ----
      " 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,458 ****
  endfunc
  
  func Test_OptionSet()
!   if !has("eval") || !has("autocmd") || !exists("+autochdir")
      return
    endif
  
--- 475,481 ----
  endfunc
  
  func Test_OptionSet()
!   if !has("eval") || !exists("+autochdir")
      return
    endif
  
***************
*** 595,601 ****
  
  func Test_OptionSet_diffmode()
    call test_override('starting', 1)
!   " 18: Changing an option when enetering diff mode
    new
    au OptionSet diff :let &l:cul=v:option_new
  
--- 618,624 ----
  
  func Test_OptionSet_diffmode()
    call test_override('starting', 1)
!   " 18: Changing an option when entering diff mode
    new
    au OptionSet diff :let &l:cul=v:option_new
  
*** ../vim-8.1.0836/src/testdir/test_mapping.vim        2019-01-24 
17:59:35.139217458 +0100
--- src/testdir/test_mapping.vim        2019-01-27 22:30:22.173169702 +0100
***************
*** 1,5 ****
--- 1,7 ----
  " Tests for mappings and abbreviations
  
+ source shared.vim
+ 
  func Test_abbreviation()
    " abbreviation with 0x80 should work
    inoreab чкпр   vim
***************
*** 169,174 ****
--- 171,179 ----
  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,184 ****
      call feedkeys("\<Esc>", "t")
    endfunc
    set timeout timeoutlen=200
!   call 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.
--- 183,189 ----
      call feedkeys("\<Esc>", "t")
    endfunc
    set timeout timeoutlen=200
!   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,198 ****
--- 198,236 ----
    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()
*** ../vim-8.1.0836/src/version.c       2019-01-27 20:43:38.135329194 +0100
--- src/version.c       2019-01-27 22:31:38.552579694 +0100
***************
*** 785,786 ****
--- 785,788 ----
  {   /* Add new patch number below this line */
+ /**/
+     837,
  /**/

-- 
A computer programmer is a device for turning requirements into
undocumented features.  It runs on cola, pizza and Dilbert cartoons.
                                        Bram Moolenaar

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui