Patch 8.2.0301
Problem:    Insufficient testing for exception handling and the "attention"
            prompt.
Solution:   Add test cases. (Yegappan Lakshmanan, closes #5681)
Files:      src/testdir/test_swap.vim, src/testdir/test_trycatch.vim


*** ../vim-8.2.0300/src/testdir/test_swap.vim   2020-02-18 21:54:36.982093690 
+0100
--- src/testdir/test_swap.vim   2020-02-22 21:19:55.002708355 +0100
***************
*** 1,6 ****
--- 1,7 ----
  " Tests for the swap feature
  
  source shared.vim
+ source term_util.vim
  
  func s:swapname()
    return trim(execute('swapname'))
***************
*** 349,352 ****
--- 350,378 ----
    augroup! test_swap_splitwin
  endfunc
  
+ " Test for selecting 'q' in the attention prompt
+ func Test_swap_prompt_splitwin()
+   if !CanRunVimInTerminal()
+     throw 'Skipped: cannot run vim in terminal'
+   endif
+   call writefile(['foo bar'], 'Xfile1')
+   edit Xfile1
+   let buf = RunVimInTerminal('', {'rows': 20})
+   call term_sendkeys(buf, ":set nomore\n")
+   call term_sendkeys(buf, ":set noruler\n")
+   call term_sendkeys(buf, ":split Xfile1\n")
+   call term_wait(buf)
+   call WaitForAssert({-> assert_match('^\[O\]pen Read-Only, (E)dit anyway, 
(R)ecover, (Q)uit, (A)bort: $', term_getline(buf, 20))})
+   call term_sendkeys(buf, "q")
+   call term_wait(buf)
+   call term_sendkeys(buf, ":")
+   call WaitForAssert({-> assert_match('^:$', term_getline(buf, 20))})
+   call term_sendkeys(buf, "echomsg winnr('$')\<CR>")
+   call term_wait(buf)
+   call WaitForAssert({-> assert_match('^1$', term_getline(buf, 20))})
+   call StopVimInTerminal(buf)
+   %bwipe!
+   call delete('Xfile1')
+ endfunc
+ 
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.0300/src/testdir/test_trycatch.vim       2020-02-21 
17:54:41.834235694 +0100
--- src/testdir/test_trycatch.vim       2020-02-22 21:19:55.002708355 +0100
***************
*** 2017,2022 ****
--- 2017,2024 ----
    endif
  
    set verbose=14
+ 
+   " Test for verbose messages displayed when an exception is caught
    redir => msg
    try
      echo i
***************
*** 2025,2039 ****
    endtry
    redir END
    let expected = [
!         \ 'Exception thrown: Vim(echo):E121: Undefined variable: i',
!         \ '',
!         \ 'Exception caught: Vim(echo):E121: Undefined variable: i',
!         \ '',
!         \ 'Exception finished: Vim(echo):E121: Undefined variable: i'
!         \ ]
    call assert_equal(expected, split(msg, "\n"))
    set verbose&
  endfunc
  
  " Modeline                                                                {{{1
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
--- 2027,2204 ----
    endtry
    redir END
    let expected = [
!         \ 'Exception thrown: Vim(echo):E121: Undefined variable: i', '',
!         \ 'Exception caught: Vim(echo):E121: Undefined variable: i', '',
!         \ 'Exception finished: Vim(echo):E121: Undefined variable: i']
!   call assert_equal(expected, split(msg, "\n"))
! 
!   " Test for verbose messages displayed when an exception is discarded
!   redir => msg
!   try
!     try
!       throw 'abc'
!     finally
!       throw 'xyz'
!     endtry
!   catch
!   endtry
!   redir END
!   let expected = [
!         \ 'Exception thrown: abc', '',
!         \ 'Exception made pending: abc', '',
!         \ 'Exception thrown: xyz', '',
!         \ 'Exception discarded: abc', '',
!         \ 'Exception caught: xyz', '',
!         \ 'Exception finished: xyz']
!   call assert_equal(expected, split(msg, "\n"))
! 
!   " Test for messages displayed when :throw is resumed after :finally
!   redir => msg
!   try
!     try
!       throw 'abc'
!     finally
!     endtry
!   catch
!   endtry
!   redir END
!   let expected = [
!         \ 'Exception thrown: abc', '',
!         \ 'Exception made pending: abc', '',
!         \ 'Exception resumed: abc', '',
!         \ 'Exception caught: abc', '',
!         \ 'Exception finished: abc']
    call assert_equal(expected, split(msg, "\n"))
+ 
+   " Test for messages displayed when :break is resumed after :finally
+   redir => msg
+   for i in range(1)
+     try
+       break
+     finally
+     endtry
+   endfor
+   redir END
+   let expected = [':break made pending', '', ':break resumed']
+   call assert_equal(expected, split(msg, "\n"))
+ 
+   " Test for messages displayed when :continue is resumed after :finally
+   redir => msg
+   for i in range(1)
+     try
+       continue
+     finally
+     endtry
+   endfor
+   redir END
+   let expected = [':continue made pending', '', ':continue resumed']
+   call assert_equal(expected, split(msg, "\n"))
+ 
+   " Test for messages displayed when :return is resumed after :finally
+   func Xtest()
+     try
+       return 'vim'
+     finally
+     endtry
+   endfunc
+   redir => msg
+   call Xtest()
+   redir END
+   let expected = [
+         \ 'calling Xtest()', '',
+         \ ':return vim made pending', '',
+         \ ':return vim resumed', '',
+         \ 'Xtest returning ''vim''', '',
+         \ 'continuing in Test_try_catch_verbose']
+   call assert_equal(expected, split(msg, "\n"))
+   delfunc Xtest
+ 
+   " Test for messages displayed when :finish is resumed after :finally
+   call writefile(['try', 'finish', 'finally', 'endtry'], 'Xscript')
+   redir => msg
+   source Xscript
+   redir END
+   let expected = [
+         \ ':finish made pending', '',
+         \ ':finish resumed', '',
+         \ 'finished sourcing Xscript',
+         \ 'continuing in Test_try_catch_verbose']
+   call assert_equal(expected, split(msg, "\n")[1:])
+   call delete('Xscript')
+ 
+   " Test for messages displayed when a pending :continue is discarded by an
+   " exception in a finally handler
+   redir => msg
+   try
+     for i in range(1)
+       try
+         continue
+       finally
+         throw 'abc'
+       endtry
+     endfor
+   catch
+   endtry
+   redir END
+   let expected = [
+         \ ':continue made pending', '',
+         \ 'Exception thrown: abc', '',
+         \ ':continue discarded', '',
+         \ 'Exception caught: abc', '',
+         \ 'Exception finished: abc']
+   call assert_equal(expected, split(msg, "\n"))
+ 
    set verbose&
  endfunc
  
+ " Test for throwing an exception from a BufEnter autocmd                   
{{{1
+ func Test_BufEnter_exception()
+   augroup bufenter_exception
+     au!
+     autocmd BufEnter Xfile1 throw 'abc'
+   augroup END
+ 
+   let caught_abc = 0
+   try
+     sp Xfile1
+   catch /^abc/
+     let caught_abc = 1
+   endtry
+   call assert_equal(1, caught_abc)
+   call assert_equal(1, winnr('$'))
+ 
+   augroup bufenter_exception
+     au!
+   augroup END
+   augroup! bufenter_exception
+   %bwipe!
+ 
+   " Test for recursively throwing exceptions in autocmds
+   augroup bufenter_exception
+     au!
+     autocmd BufEnter Xfile1 throw 'bufenter'
+     autocmd BufLeave Xfile1 throw 'bufleave'
+   augroup END
+ 
+   let ex_count = 0
+   try
+     try
+       sp Xfile1
+     catch /^bufenter/
+       let ex_count += 1
+     endtry
+   catch /^bufleave/
+       let ex_count += 10
+   endtry
+   call assert_equal(10, ex_count)
+   call assert_equal(2, winnr('$'))
+ 
+   augroup bufenter_exception
+     au!
+   augroup END
+   augroup! bufenter_exception
+   %bwipe!
+ endfunc
+ 
  " Modeline                                                                {{{1
  " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
*** ../vim-8.2.0300/src/version.c       2020-02-22 20:33:05.492008174 +0100
--- src/version.c       2020-02-22 21:20:18.978680467 +0100
***************
*** 740,741 ****
--- 740,743 ----
  {   /* Add new patch number below this line */
+ /**/
+     301,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
94. Now admit it... How many of you have made "modem noises" into
    the phone just to see if it was possible? :-)

 /// 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202002222021.01MKLuwC026089%40masaka.moolenaar.net.

Raspunde prin e-mail lui