0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.1440: debugger code insufficiently tested

Problem:    Debugger code insufficiently tested.
Solution:   Add a few more tests. (Yegappan Lakshmanan, closes #6700)
This commit is contained in:
Bram Moolenaar 2020-08-13 19:20:04 +02:00
parent b96a32ef1a
commit 16c6232cad
3 changed files with 110 additions and 80 deletions

View File

@ -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

View File

@ -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
"-------------------------------------------------------------------------------

View File

@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1440,
/**/
1439,
/**/