changeset 21777:4279767da6e8 v8.2.1438

patch 8.2.1438: missing tests for interrupting script execution from debugger Commit: https://github.com/vim/vim/commit/7ac616cb0a52bc72b449e19cf9db93bee116c15a Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 12 22:22:09 2020 +0200 patch 8.2.1438: missing tests for interrupting script execution from debugger Problem: Missing tests for interrupting script execution from debugger. Solution: Add tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/6697)
author Bram Moolenaar <Bram@vim.org>
date Wed, 12 Aug 2020 22:30:08 +0200
parents 2f8efe73cd7e
children cc500536c15e
files src/testdir/test_debugger.vim src/version.c
diffstat 2 files changed, 125 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_debugger.vim
+++ b/src/testdir/test_debugger.vim
@@ -1020,4 +1020,127 @@ func Test_debug_backtrace_level()
   call delete('Xtest2.vim')
 endfunc
 
+" Test for setting a breakpoint on a :endif where the :if condition is false
+" and then quit the script. This should generate an interrupt.
+func Test_breakpt_endif_intr()
+  func F()
+    let g:Xpath ..= 'a'
+    if v:false
+      let g:Xpath ..= 'b'
+    endif
+    invalid_command
+  endfunc
+
+  let g:Xpath = ''
+  breakadd func 4 F
+  try
+    let caught_intr = 0
+    debuggreedy
+    call feedkeys(":call F()\<CR>quit\<CR>", "xt")
+    call F()
+  catch /^Vim:Interrupt$/
+    call assert_match('\.F, line 4', v:throwpoint)
+    let caught_intr = 1
+  endtry
+  0debuggreedy
+  call assert_equal(1, caught_intr)
+  call assert_equal('a', g:Xpath)
+  breakdel *
+  delfunc F
+endfunc
+
+" Test for setting a breakpoint on a :else where the :if condition is false
+" and then quit the script. This should generate an interrupt.
+func Test_breakpt_else_intr()
+  func F()
+    let g:Xpath ..= 'a'
+    if v:false
+      let g:Xpath ..= 'b'
+    else
+      invalid_command
+    endif
+    invalid_command
+  endfunc
+
+  let g:Xpath = ''
+  breakadd func 4 F
+  try
+    let caught_intr = 0
+    debuggreedy
+    call feedkeys(":call F()\<CR>quit\<CR>", "xt")
+    call F()
+  catch /^Vim:Interrupt$/
+    call assert_match('\.F, line 4', v:throwpoint)
+    let caught_intr = 1
+  endtry
+  0debuggreedy
+  call assert_equal(1, caught_intr)
+  call assert_equal('a', g:Xpath)
+  breakdel *
+  delfunc F
+endfunc
+
+" Test for setting a breakpoint on a :endwhile where the :while condition is
+" false and then quit the script. This should generate an interrupt.
+func Test_breakpt_endwhile_intr()
+  func F()
+    let g:Xpath ..= 'a'
+    while v:false
+      let g:Xpath ..= 'b'
+    endwhile
+    invalid_command
+  endfunc
+
+  let g:Xpath = ''
+  breakadd func 4 F
+  try
+    let caught_intr = 0
+    debuggreedy
+    call feedkeys(":call F()\<CR>quit\<CR>", "xt")
+    call F()
+  catch /^Vim:Interrupt$/
+    call assert_match('\.F, line 4', v:throwpoint)
+    let caught_intr = 1
+  endtry
+  0debuggreedy
+  call assert_equal(1, caught_intr)
+  call assert_equal('a', g:Xpath)
+  breakdel *
+  delfunc F
+endfunc
+
+" Test for setting a breakpoint on an :endtry where an exception is pending to
+" be processed and then quit the script. This should generate an interrupt and
+" the thrown exception should be ignored.
+func Test_breakpt_endtry_intr()
+  func F()
+    try
+      let g:Xpath ..= 'a'
+      throw "abc"
+    endtry
+    invalid_command
+  endfunc
+
+  let g:Xpath = ''
+  breakadd func 4 F
+  try
+    let caught_intr = 0
+    let caught_abc = 0
+    debuggreedy
+    call feedkeys(":call F()\<CR>quit\<CR>", "xt")
+    call F()
+  catch /abc/
+    let caught_abc = 1
+  catch /^Vim:Interrupt$/
+    call assert_match('\.F, line 4', v:throwpoint)
+    let caught_intr = 1
+  endtry
+  0debuggreedy
+  call assert_equal(1, caught_intr)
+  call assert_equal(0, caught_abc)
+  call assert_equal('a', g:Xpath)
+  breakdel *
+  delfunc F
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1438,
+/**/
     1437,
 /**/
     1436,