summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-08-13 19:20:04 +0200
committerBram Moolenaar <Bram@vim.org>2020-08-13 19:20:04 +0200
commit16c6232cad40af37f37dc9c561392b7761b9e229 (patch)
tree46b055ed30b8cbb58b4c0f43c7a7b77e4b58c63e
parentb96a32ef1a95dd4ebf9413d686bccb1b4645f74b (diff)
patch 8.2.1440: debugger code insufficiently testedv8.2.1440
Problem: Debugger code insufficiently tested. Solution: Add a few more tests. (Yegappan Lakshmanan, closes #6700)
-rw-r--r--src/testdir/test_debugger.vim45
-rw-r--r--src/testdir/test_vimscript.vim143
-rw-r--r--src/version.c2
3 files changed, 110 insertions, 80 deletions
diff --git a/src/testdir/test_debugger.vim b/src/testdir/test_debugger.vim
index 27826429ea..fb2700754c 100644
--- a/src/testdir/test_debugger.vim
+++ b/src/testdir/test_debugger.vim
@@ -337,6 +337,8 @@ func Test_Debugger()
call StopVimInTerminal(buf)
call delete('Xtest.vim')
+ %bw!
+ call assert_fails('breakadd here', 'E32:')
endfunc
func Test_Backtrace_Through_Source()
@@ -1037,7 +1039,6 @@ func Test_breakpt_endif_intr()
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
@@ -1068,7 +1069,6 @@ func Test_breakpt_else_intr()
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
@@ -1097,7 +1097,6 @@ func Test_breakpt_endwhile_intr()
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
@@ -1109,38 +1108,24 @@ func Test_breakpt_endwhile_intr()
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
+" Test for setting a breakpoint on a script local function
+func Test_breakpt_scriptlocal_func()
+ let g:Xpath = ''
+ func s:G()
+ let g:Xpath ..= 'a'
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
+ let funcname = expand("<SID>") .. "G"
+ exe "breakadd func 1 " .. funcname
+ debuggreedy
+ redir => output
+ call feedkeys(":call " .. funcname .. "()\<CR>c\<CR>", "xt")
+ redir END
0debuggreedy
- call assert_equal(1, caught_intr)
- call assert_equal(0, caught_abc)
+ call assert_match('Breakpoint in "' .. funcname .. '" line 1', output)
call assert_equal('a', g:Xpath)
breakdel *
- delfunc F
+ exe "delfunc " .. funcname
endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 1b00fc9e78..9dd5fc7ffc 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -5869,27 +5869,39 @@ func Test_discard_exception_after_error_1()
call RunInNewVim(test, verify)
endfunc
-" TODO: Need to interrupt the code before the endtry is invoked
-func Disable_Test_discard_exception_after_error_2()
- let test =<< trim [CODE]
+" interrupt the code before the endtry is invoked
+func Test_discard_exception_after_error_2()
+ XpathINIT
+ let lines =<< trim [CODE]
try
Xpath 'a'
try
Xpath 'b'
throw "arrgh"
- call interrupt() " FIXME: throw is not interrupted here
call assert_report('should not get here')
- endtry
+ endtry " interrupt here
call assert_report('should not get here')
catch /arrgh/
call assert_report('should not get here')
endtry
call assert_report('should not get here')
[CODE]
- let verify =<< trim [CODE]
- call assert_equal('ab', g:Xpath)
- [CODE]
- call RunInNewVim(test, verify)
+ call writefile(lines, 'Xscript')
+
+ breakadd file 7 Xscript
+ try
+ let caught_intr = 0
+ debuggreedy
+ call feedkeys(":source Xscript\<CR>quit\<CR>", "xt")
+ catch /^Vim:Interrupt$/
+ call assert_match('Xscript, line 7', v:throwpoint)
+ let caught_intr = 1
+ endtry
+ 0debuggreedy
+ call assert_equal(1, caught_intr)
+ call assert_equal('ab', g:Xpath)
+ breakdel *
+ call delete('Xscript')
endfunc
"-------------------------------------------------------------------------------
@@ -5959,16 +5971,16 @@ func Test_ignore_catch_after_error_2()
call RunInNewVim(test, verify)
endfunc
-" TODO: Need to interrupt the code right before the catch is invoked
-func FIXME_Test_ignore_catch_after_intr_1()
- let test =<< trim [CODE]
+" interrupt right before a catch is invoked in a script
+func Test_ignore_catch_after_intr_1()
+ XpathINIT
+ let lines =<< trim [CODE]
try
try
Xpath 'a'
throw "arrgh"
call assert_report('should not get here')
- catch /.*/ " TODO: Need to interrupt before this catch is
- call interrupt() " invoked
+ catch /.*/ " interrupt here
call assert_report('should not get here')
catch /.*/
call assert_report('should not get here')
@@ -5979,41 +5991,59 @@ func FIXME_Test_ignore_catch_after_intr_1()
endtry
call assert_report('should not get here')
[CODE]
- let verify =<< trim [CODE]
- call assert_equal('a', g:Xpath)
- [CODE]
- call RunInNewVim(test, verify)
+ call writefile(lines, 'Xscript')
+
+ breakadd file 6 Xscript
+ try
+ let caught_intr = 0
+ debuggreedy
+ call feedkeys(":source Xscript\<CR>quit\<CR>", "xt")
+ catch /^Vim:Interrupt$/
+ call assert_match('Xscript, line 6', v:throwpoint)
+ let caught_intr = 1
+ endtry
+ 0debuggreedy
+ call assert_equal(1, caught_intr)
+ call assert_equal('a', g:Xpath)
+ breakdel *
+ call delete('Xscript')
endfunc
-" TODO: Need to interrupt the code right before the catch is invoked
-func FIXME_Test_ignore_catch_after_intr_2()
- let test =<< trim [CODE]
- func I()
+" interrupt right before a catch is invoked inside a function.
+func Test_ignore_catch_after_intr_2()
+ XpathINIT
+ func F()
+ try
try
- try
- Xpath 'a'
- throw "arrgh"
- call assert_report('should not get here')
- catch /.*/ " TODO: Need to interrupt before this catch is
- " invoked
- call interrupt()
- call assert_report('should not get here')
- catch /.*/
- call assert_report('should not get here')
- endtry
+ Xpath 'a'
+ throw "arrgh"
call assert_report('should not get here')
- catch /arrgh/
+ catch /.*/ " interrupt here
+ call assert_report('should not get here')
+ catch /.*/
call assert_report('should not get here')
endtry
- endfunc
-
- call I()
+ call assert_report('should not get here')
+ catch /arrgh/
+ call assert_report('should not get here')
+ endtry
call assert_report('should not get here')
- [CODE]
- let verify =<< trim [CODE]
- call assert_equal('a', g:Xpath)
- [CODE]
- call RunInNewVim(test, verify)
+ endfunc
+
+ breakadd func 6 F
+ try
+ let caught_intr = 0
+ debuggreedy
+ call feedkeys(":call F()\<CR>quit\<CR>", "xt")
+ catch /^Vim:Interrupt$/
+ call assert_match('\.F, line 6', v:throwpoint)
+ let caught_intr = 1
+ endtry
+ 0debuggreedy
+ call assert_equal(1, caught_intr)
+ call assert_equal('a', g:Xpath)
+ breakdel *
+ delfunc F
endfunc
"-------------------------------------------------------------------------------
@@ -6050,16 +6080,17 @@ func Test_finally_after_error()
call RunInNewVim(test, verify)
endfunc
-" TODO: Need to interrupt the code right before the finally is invoked
-func FIXME_Test_finally_after_intr()
- let test =<< trim [CODE]
+" interrupt the code right before the finally is invoked
+func Test_finally_after_intr()
+ XpathINIT
+ let lines =<< trim [CODE]
try
Xpath 'a'
try
Xpath 'b'
throw "arrgh"
call assert_report('should not get here')
- finally " TODO: Need to interrupt before the finally is invoked
+ finally " interrupt here
Xpath 'c'
endtry
call assert_report('should not get here')
@@ -6068,10 +6099,22 @@ func FIXME_Test_finally_after_intr()
endtry
call assert_report('should not get here')
[CODE]
- let verify =<< trim [CODE]
- call assert_equal('abc', g:Xpath)
- [CODE]
- call RunInNewVim(test, verify)
+ call writefile(lines, 'Xscript')
+
+ breakadd file 7 Xscript
+ try
+ let caught_intr = 0
+ debuggreedy
+ call feedkeys(":source Xscript\<CR>quit\<CR>", "xt")
+ catch /^Vim:Interrupt$/
+ call assert_match('Xscript, line 7', v:throwpoint)
+ let caught_intr = 1
+ endtry
+ 0debuggreedy
+ call assert_equal(1, caught_intr)
+ call assert_equal('abc', g:Xpath)
+ breakdel *
+ call delete('Xscript')
endfunc
"-------------------------------------------------------------------------------
diff --git a/src/version.c b/src/version.c
index 2955eb0e3b..dc72eb1dd2 100644
--- 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 */
/**/
+ 1440,
+/**/
1439,
/**/
1438,