changeset 16350:ffa791471a4c v8.1.1180

patch 8.1.1180: Vim script debugger tests are old style commit https://github.com/vim/vim/commit/113bf0672b114af5800fa642bcd09f674758e5d5 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Apr 17 16:54:05 2019 +0200 patch 8.1.1180: Vim script debugger tests are old style Problem: Vim script debugger tests are old style. Solution: Turn into new style tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/4259)
author Bram Moolenaar <Bram@vim.org>
date Wed, 17 Apr 2019 17:00:06 +0200
parents 4e45c3b55775
children f1ef4271f2ef
files src/Makefile src/testdir/Make_all.mak src/testdir/Make_vms.mms src/testdir/test108.in src/testdir/test108.ok src/testdir/test_debugger.vim src/version.c
diffstat 7 files changed, 238 insertions(+), 173 deletions(-) [+]
line wrap: on
line diff
--- a/src/Makefile
+++ b/src/Makefile
@@ -2176,7 +2176,7 @@ test1 \
 	test64 test69 \
 	test70 test72 \
 	test86 test87 test88 \
-	test94 test95 test99 test108:
+	test94 test95 test99:
 	cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
 
 # Run individual NEW style test.
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -28,7 +28,6 @@ SCRIPTS_ALL = \
 	test94.out \
 	test95.out \
 	test99.out \
-	test108.out \
 	test_eval.out
 
 
@@ -97,6 +96,7 @@ NEW_TESTS = \
 	test_cscope \
 	test_cursor_func \
 	test_curswant \
+	test_debugger \
 	test_delete \
 	test_diffmode \
 	test_digraph \
@@ -312,6 +312,7 @@ NEW_TESTS_RES = \
 	test_crypt.res \
 	test_cscope.res \
 	test_curswant.res \
+	test_debugger.res \
 	test_diffmode.res \
 	test_digraph.res \
 	test_display.res \
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -80,7 +80,7 @@ SCRIPT = test1.out test3.out \
        test42.out test44.out test48.out test49.out \
        test64.out test69.out \
        test72.out test77a.out test88.out \
-       test94.out test95.out test99.out test108.out \
+       test94.out test95.out test99.out \
        test_eval.out
 
 # Known problems:
deleted file mode 100644
--- a/src/testdir/test108.in
+++ /dev/null
@@ -1,88 +0,0 @@
-Tests for backtrace debug commands.     vim: set ft=vim :
-
-STARTTEST
-:so small.vim
-:lang mess C
-:function! Foo()
-:   let var1 = 1
-:   let var2 = Bar(var1) + 9
-:   return var2
-:endfunction
-:
-:function! Bar(var)
-:    let var1 = 2 + a:var
-:    let var2 = Bazz(var1) + 4
-:    return var2
-:endfunction
-:
-:function! Bazz(var)
-:    let var1 = 3 + a:var
-:    let var3 = "another var"
-:    return var1
-:endfunction
-:new
-:debuggreedy
-:redir => out
-:debug echo Foo()
-step
-step
-step
-step
-step
-step
-echo "- show backtrace:\n"
-backtrace
-echo "\nshow variables on different levels:\n"
-echo var1
-up
-back
-echo var1
-u
-bt
-echo var1
-echo "\n- undefined vars:\n"
-step
-frame 2
-echo "undefined var3 on former level:"
-echo var3
-fr 0
-echo "here var3 is defined with \"another var\":"
-echo var3
-step
-step
-step
-up
-echo "\nundefined var2 on former level"
-echo var2
-down
-echo "here var2 is defined with 10:"
-echo var2
-echo "\n- backtrace movements:\n"
-b
-echo "\nnext command cannot go down, we are on bottom\n"
-down
-up
-echo "\nnext command cannot go up, we are on top\n"
-up
-b
-echo "fil is not frame or finish, it is file"
-fil
-echo "\n- relative backtrace movement\n"
-fr -1
-frame
-fra +1
-fram
-echo "\n- go beyond limits does not crash\n"
-fr 100
-fra
-frame -40
-fram
-echo "\n- final result 19:"
-cont
-:0debuggreedy
-:redir END
-:$put =out
-:w! test.out
-:qa!
-ENDTEST
-
deleted file mode 100644
--- a/src/testdir/test108.ok
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-- show backtrace:
-
-  2 function Foo[2]
-  1 Bar[2]
-->0 Bazz
-line 2: let var3 = "another var"
-
-show variables on different levels:
-
-6
-  2 function Foo[2]
-->1 Bar[2]
-  0 Bazz
-line 2: let var3 = "another var"
-3
-->2 function Foo[2]
-  1 Bar[2]
-  0 Bazz
-line 2: let var3 = "another var"
-1
-
-- undefined vars:
-
-undefined var3 on former level:
-Error detected while processing function Foo[2]..Bar[2]..Bazz:
-line    3:
-E121: Undefined variable: var3
-here var3 is defined with "another var":
-another var
-
-undefined var2 on former level
-Error detected while processing function Foo[2]..Bar:
-line    3:
-E121: Undefined variable: var2
-here var2 is defined with 10:
-10
-
-- backtrace movements:
-
-  1 function Foo[2]
-->0 Bar
-line 3: End of function
-
-next command cannot go down, we are on bottom
-
-frame is zero
-
-next command cannot go up, we are on top
-
-frame at highest level: 1
-->1 function Foo[2]
-  0 Bar
-line 3: End of function
-fil is not frame or finish, it is file
-"[No Name]" --No lines in buffer--
-
-- relative backtrace movement
-
-  1 function Foo[2]
-->0 Bar
-line 3: End of function
-->1 function Foo[2]
-  0 Bar
-line 3: End of function
-
-- go beyond limits does not crash
-
-frame at highest level: 1
-->1 function Foo[2]
-  0 Bar
-line 3: End of function
-frame is zero
-  1 function Foo[2]
-->0 Bar
-line 3: End of function
-
-- final result 19:
-19
-
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_debugger.vim
@@ -0,0 +1,232 @@
+" Tests for the Vim script debug commands
+
+source shared.vim
+source screendump.vim
+
+" Run a Vim debugger command
+" If the expected output argument is supplied, then check for it.
+func RunDbgCmd(buf, cmd, ...)
+  call term_sendkeys(a:buf, a:cmd . "\r")
+  call term_wait(a:buf)
+
+  if a:0 != 0
+    " Verify the expected output
+    let lnum = 20 - len(a:1)
+    for l in a:1
+      call WaitForAssert({-> assert_equal(l, term_getline(a:buf, lnum))})
+      let lnum += 1
+    endfor
+  endif
+endfunc
+
+" Debugger tests
+func Test_Debugger()
+  if !CanRunVimInTerminal()
+    return
+  endif
+
+  " Create a Vim script with some functions
+  call writefile([
+	      \ 'func Foo()',
+	      \ '  let var1 = 1',
+	      \ '  let var2 = Bar(var1) + 9',
+	      \ '  return var2',
+	      \ 'endfunc',
+	      \ 'func Bar(var)',
+	      \ '  let var1 = 2 + a:var',
+	      \ '  let var2 = Bazz(var1) + 4',
+	      \ '  return var2',
+	      \ 'endfunc',
+	      \ 'func Bazz(var)',
+	      \ '  let var1 = 3 + a:var',
+	      \ '  let var3 = "another var"',
+	      \ '  let var3 = "value2"',
+	      \ '  let var3 = "value3"',
+	      \ '  return var1',
+	      \ 'endfunc'], 'Xtest.vim')
+
+  " Start Vim in a terminal
+  let buf = RunVimInTerminal('-S Xtest.vim', {})
+
+  " Start the Vim debugger
+  call RunDbgCmd(buf, ':debug echo Foo()')
+
+  " Create a few stack frames by stepping through functions
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+
+  " check backtrace
+  call RunDbgCmd(buf, 'backtrace', [
+	      \ '  2 function Foo[2]',
+	      \ '  1 Bar[2]',
+	      \ '->0 Bazz',
+	      \ 'line 2: let var3 = "another var"'])
+
+  " Check variables in different stack frames
+  call RunDbgCmd(buf, 'echo var1', ['6'])
+
+  call RunDbgCmd(buf, 'up')
+  call RunDbgCmd(buf, 'back', [
+	      \ '  2 function Foo[2]',
+	      \ '->1 Bar[2]',
+	      \ '  0 Bazz',
+	      \ 'line 2: let var3 = "another var"'])
+  call RunDbgCmd(buf, 'echo var1', ['3'])
+
+  call RunDbgCmd(buf, 'u')
+  call RunDbgCmd(buf, 'bt', [
+	      \ '->2 function Foo[2]',
+	      \ '  1 Bar[2]',
+	      \ '  0 Bazz',
+	      \ 'line 2: let var3 = "another var"'])
+  call RunDbgCmd(buf, 'echo var1', ['1'])
+
+  " Undefined variables
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'frame 2')
+  call RunDbgCmd(buf, 'echo var3', [
+	\ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:',
+	\ 'line    3:',
+	\ 'E121: Undefined variable: var3'])
+
+  " var3 is defined in this level with some other value
+  call RunDbgCmd(buf, 'fr 0')
+  call RunDbgCmd(buf, 'echo var3', ['another var'])
+
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'step', [
+	      \ 'function Foo[2]..Bar',
+	      \ 'line 3: End of function'])
+  call RunDbgCmd(buf, 'up')
+
+  " Undefined var2
+  call RunDbgCmd(buf, 'echo var2', [
+	      \ 'Error detected while processing function Foo[2]..Bar:',
+	      \ 'line    3:',
+	      \ 'E121: Undefined variable: var2'])
+
+  " Var2 is defined with 10
+  call RunDbgCmd(buf, 'down')
+  call RunDbgCmd(buf, 'echo var2', ['10'])
+
+  " Backtrace movements
+  call RunDbgCmd(buf, 'b', [
+	      \ '  1 function Foo[2]',
+	      \ '->0 Bar',
+	      \ 'line 3: End of function'])
+
+  " next command cannot go down, we are on bottom
+  call RunDbgCmd(buf, 'down', ['frame is zero'])
+  call RunDbgCmd(buf, 'up')
+
+  " next command cannot go up, we are on top
+  call RunDbgCmd(buf, 'up', ['frame at highest level: 1'])
+  call RunDbgCmd(buf, 'where', [
+	      \ '->1 function Foo[2]',
+	      \ '  0 Bar',
+	      \ 'line 3: End of function'])
+
+  " fil is not frame or finish, it is file
+  call RunDbgCmd(buf, 'fil', ['"[No Name]" --No lines in buffer--'])
+
+  " relative backtrace movement
+  call RunDbgCmd(buf, 'fr -1')
+  call RunDbgCmd(buf, 'frame', [
+	      \ '  1 function Foo[2]',
+	      \ '->0 Bar',
+	      \ 'line 3: End of function'])
+
+  call RunDbgCmd(buf, 'fr +1')
+  call RunDbgCmd(buf, 'fram', [
+	      \ '->1 function Foo[2]',
+	      \ '  0 Bar',
+	      \ 'line 3: End of function'])
+
+  " go beyond limits does not crash
+  call RunDbgCmd(buf, 'fr 100', ['frame at highest level: 1'])
+  call RunDbgCmd(buf, 'fra', [
+	      \ '->1 function Foo[2]',
+	      \ '  0 Bar',
+	      \ 'line 3: End of function'])
+
+  call RunDbgCmd(buf, 'frame -40', ['frame is zero'])
+  call RunDbgCmd(buf, 'fram', [
+	      \ '  1 function Foo[2]',
+	      \ '->0 Bar',
+	      \ 'line 3: End of function'])
+
+  " final result 19
+  call RunDbgCmd(buf, 'cont', ['19'])
+
+  " breakpoints tests
+
+  " Start a debug session, so that reading the last line from the terminal
+  " works properly.
+  call RunDbgCmd(buf, ':debug echo Foo()')
+
+  " No breakpoints
+  call RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
+
+  " Place some breakpoints
+  call RunDbgCmd(buf, 'breaka func Bar')
+  call RunDbgCmd(buf, 'breaklis', ['  1  func Bar  line 1'])
+  call RunDbgCmd(buf, 'breakadd func 3 Bazz')
+  call RunDbgCmd(buf, 'breaklist', ['  1  func Bar  line 1',
+	      \ '  2  func Bazz  line 3'])
+
+  " Check whether the breakpoints are hit
+  call RunDbgCmd(buf, 'cont', [
+	      \ 'Breakpoint in "Bar" line 1',
+	      \ 'function Foo[2]..Bar',
+	      \ 'line 1: let var1 = 2 + a:var'])
+  call RunDbgCmd(buf, 'cont', [
+	      \ 'Breakpoint in "Bazz" line 3',
+	      \ 'function Foo[2]..Bar[2]..Bazz',
+	      \ 'line 3: let var3 = "value2"'])
+
+  " Delete the breakpoints
+  call RunDbgCmd(buf, 'breakd 1')
+  call RunDbgCmd(buf, 'breakli', ['  2  func Bazz  line 3'])
+  call RunDbgCmd(buf, 'breakdel func 3 Bazz')
+  call RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
+
+  call RunDbgCmd(buf, 'cont')
+
+  " Make sure the breakpoints are removed
+  call RunDbgCmd(buf, ':echo Foo()', ['19'])
+
+  " Delete a non-existing breakpoint
+  call RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2'])
+
+  " Expression breakpoint
+  call RunDbgCmd(buf, ':breakadd func 2 Bazz')
+  call RunDbgCmd(buf, ':echo Bazz(1)')
+  call RunDbgCmd(buf, 'step')
+  call RunDbgCmd(buf, 'breaka expr var3')
+  call RunDbgCmd(buf, 'breakl', ['  4  expr var3'])
+  call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 4',
+	      \ 'Oldval = "''another var''"',
+	      \ 'Newval = "''value2''"',
+	      \ 'function Bazz',
+	      \ 'line 4: let var3 = "value3"'])
+
+  call RunDbgCmd(buf, 'breakdel *')
+  call RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
+
+  " finish the current function
+  call RunDbgCmd(buf, 'finish', [
+	      \ 'function Bazz',
+	      \ 'line 5: End of function'])
+  call RunDbgCmd(buf, 'cont')
+
+  call StopVimInTerminal(buf)
+
+  call delete('Xtest.vim')
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1180,
+/**/
     1179,
 /**/
     1178,