Skip to content

Commit 0fdd943

Browse files
committed
patch 8.1.1191: not all debug commands are covered by a test
Problem: Not all debug commands are covered by a test. Solution: Add more tests. (Yegappan Lakshmanan, closes #4282)
1 parent 93a4879 commit 0fdd943

2 files changed

Lines changed: 101 additions & 17 deletions

File tree

src/testdir/test_debugger.vim

Lines changed: 99 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ func Test_Debugger()
3838
\ ' return var2',
3939
\ 'endfunc',
4040
\ 'func Bazz(var)',
41-
\ ' let var1 = 3 + a:var',
42-
\ ' let var3 = "another var"',
43-
\ ' let var3 = "value2"',
44-
\ ' let var3 = "value3"',
41+
\ ' try',
42+
\ ' let var1 = 3 + a:var',
43+
\ ' let var3 = "another var"',
44+
\ ' let var3 = "value2"',
45+
\ ' catch',
46+
\ ' let var4 = "exception"',
47+
\ ' endtry',
4548
\ ' return var1',
4649
\ 'endfunc'], 'Xtest.vim')
4750

@@ -58,13 +61,14 @@ func Test_Debugger()
5861
call RunDbgCmd(buf, 'step')
5962
call RunDbgCmd(buf, 'step')
6063
call RunDbgCmd(buf, 'step')
64+
call RunDbgCmd(buf, 'step')
6165

6266
" check backtrace
6367
call RunDbgCmd(buf, 'backtrace', [
6468
\ ' 2 function Foo[2]',
6569
\ ' 1 Bar[2]',
6670
\ '->0 Bazz',
67-
\ 'line 2: let var3 = "another var"'])
71+
\ 'line 3: let var3 = "another var"'])
6872

6973
" Check variables in different stack frames
7074
call RunDbgCmd(buf, 'echo var1', ['6'])
@@ -74,33 +78,34 @@ func Test_Debugger()
7478
\ ' 2 function Foo[2]',
7579
\ '->1 Bar[2]',
7680
\ ' 0 Bazz',
77-
\ 'line 2: let var3 = "another var"'])
81+
\ 'line 3: let var3 = "another var"'])
7882
call RunDbgCmd(buf, 'echo var1', ['3'])
7983

8084
call RunDbgCmd(buf, 'u')
8185
call RunDbgCmd(buf, 'bt', [
8286
\ '->2 function Foo[2]',
8387
\ ' 1 Bar[2]',
8488
\ ' 0 Bazz',
85-
\ 'line 2: let var3 = "another var"'])
89+
\ 'line 3: let var3 = "another var"'])
8690
call RunDbgCmd(buf, 'echo var1', ['1'])
8791

8892
" Undefined variables
8993
call RunDbgCmd(buf, 'step')
9094
call RunDbgCmd(buf, 'frame 2')
9195
call RunDbgCmd(buf, 'echo var3', [
9296
\ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:',
93-
\ 'line 3:',
97+
\ 'line 4:',
9498
\ 'E121: Undefined variable: var3'])
9599

96100
" var3 is defined in this level with some other value
97101
call RunDbgCmd(buf, 'fr 0')
98102
call RunDbgCmd(buf, 'echo var3', ['another var'])
99103

100104
call RunDbgCmd(buf, 'step')
101-
call RunDbgCmd(buf, 'step')
102-
call RunDbgCmd(buf, 'step')
103-
call RunDbgCmd(buf, 'step')
105+
call RunDbgCmd(buf, '')
106+
call RunDbgCmd(buf, '')
107+
call RunDbgCmd(buf, '')
108+
call RunDbgCmd(buf, '')
104109
call RunDbgCmd(buf, 'step', [
105110
\ 'function Foo[2]..Bar',
106111
\ 'line 3: End of function'])
@@ -189,7 +194,7 @@ func Test_Debugger()
189194
call RunDbgCmd(buf, 'cont', [
190195
\ 'Breakpoint in "Bazz" line 3',
191196
\ 'function Foo[2]..Bar[2]..Bazz',
192-
\ 'line 3: let var3 = "value2"'])
197+
\ 'line 3: let var3 = "another var"'])
193198

194199
" Delete the breakpoints
195200
call RunDbgCmd(buf, 'breakd 1')
@@ -207,23 +212,100 @@ func Test_Debugger()
207212

208213
" Expression breakpoint
209214
call RunDbgCmd(buf, ':breakadd func 2 Bazz')
210-
call RunDbgCmd(buf, ':echo Bazz(1)')
215+
call RunDbgCmd(buf, ':echo Bazz(1)', [
216+
\ 'Entering Debug mode. Type "cont" to continue.',
217+
\ 'function Bazz',
218+
\ 'line 2: let var1 = 3 + a:var'])
219+
call RunDbgCmd(buf, 'step')
211220
call RunDbgCmd(buf, 'step')
212221
call RunDbgCmd(buf, 'breaka expr var3')
213-
call RunDbgCmd(buf, 'breakl', [' 4 expr var3'])
214-
call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 4',
222+
call RunDbgCmd(buf, 'breakl', [' 3 func Bazz line 2',
223+
\ ' 4 expr var3'])
224+
call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 5',
215225
\ 'Oldval = "''another var''"',
216226
\ 'Newval = "''value2''"',
217227
\ 'function Bazz',
218-
\ 'line 4: let var3 = "value3"'])
228+
\ 'line 5: catch'])
219229

220230
call RunDbgCmd(buf, 'breakdel *')
221231
call RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
222232

233+
" Check for error cases
234+
call RunDbgCmd(buf, 'breakadd abcd', [
235+
\ 'Error detected while processing function Bazz:',
236+
\ 'line 5:',
237+
\ 'E475: Invalid argument: abcd'])
238+
call RunDbgCmd(buf, 'breakadd func', ['E475: Invalid argument: func'])
239+
call RunDbgCmd(buf, 'breakadd func 2', ['E475: Invalid argument: func 2'])
240+
call RunDbgCmd(buf, 'breaka func a()', ['E475: Invalid argument: func a()'])
241+
call RunDbgCmd(buf, 'breakd abcd', ['E475: Invalid argument: abcd'])
242+
call RunDbgCmd(buf, 'breakd func', ['E475: Invalid argument: func'])
243+
call RunDbgCmd(buf, 'breakd func a()', ['E475: Invalid argument: func a()'])
244+
call RunDbgCmd(buf, 'breakd func a', ['E161: Breakpoint not found: func a'])
245+
call RunDbgCmd(buf, 'breakd expr', ['E475: Invalid argument: expr'])
246+
call RunDbgCmd(buf, 'breakd expr x', [
247+
\ 'E121: Undefined variable: x',
248+
\ 'E161: Breakpoint not found: expr x'])
249+
223250
" finish the current function
224251
call RunDbgCmd(buf, 'finish', [
225252
\ 'function Bazz',
226-
\ 'line 5: End of function'])
253+
\ 'line 8: End of function'])
254+
call RunDbgCmd(buf, 'cont')
255+
256+
" Test for :next
257+
call RunDbgCmd(buf, ':debug echo Bar(1)')
258+
call RunDbgCmd(buf, 'step')
259+
call RunDbgCmd(buf, 'next')
260+
call RunDbgCmd(buf, '', [
261+
\ 'function Bar',
262+
\ 'line 3: return var2'])
263+
call RunDbgCmd(buf, 'c')
264+
265+
" Test for :interrupt
266+
call RunDbgCmd(buf, ':debug echo Bazz(1)')
267+
call RunDbgCmd(buf, 'step')
268+
call RunDbgCmd(buf, 'step')
269+
call RunDbgCmd(buf, 'interrupt', [
270+
\ 'Exception thrown: Vim:Interrupt',
271+
\ 'function Bazz',
272+
\ 'line 5: catch'])
273+
call RunDbgCmd(buf, 'c')
274+
275+
" Test for :quit
276+
call RunDbgCmd(buf, ':debug echo Foo()')
277+
call RunDbgCmd(buf, 'breakdel *')
278+
call RunDbgCmd(buf, 'breakadd func 3 Foo')
279+
call RunDbgCmd(buf, 'breakadd func 3 Bazz')
280+
call RunDbgCmd(buf, 'cont', [
281+
\ 'Breakpoint in "Bazz" line 3',
282+
\ 'function Foo[2]..Bar[2]..Bazz',
283+
\ 'line 3: let var3 = "another var"'])
284+
call RunDbgCmd(buf, 'quit', [
285+
\ 'Breakpoint in "Foo" line 3',
286+
\ 'function Foo',
287+
\ 'line 3: return var2'])
288+
call RunDbgCmd(buf, 'breakdel *')
289+
call RunDbgCmd(buf, 'quit')
290+
call RunDbgCmd(buf, 'enew! | only!')
291+
292+
call StopVimInTerminal(buf)
293+
294+
" Tests for :breakadd file and :breakadd here
295+
" Breakpoints should be set before sourcing the file
296+
297+
call writefile([
298+
\ 'let var1 = 10',
299+
\ 'let var2 = 20',
300+
\ 'let var3 = 30',
301+
\ 'let var4 = 40'], 'Xtest.vim')
302+
303+
" Start Vim in a terminal
304+
let buf = RunVimInTerminal('Xtest.vim', {})
305+
call RunDbgCmd(buf, ':breakadd file 2 Xtest.vim')
306+
call RunDbgCmd(buf, ':4 | breakadd here')
307+
call RunDbgCmd(buf, ':source Xtest.vim', ['line 2: let var2 = 20'])
308+
call RunDbgCmd(buf, 'cont', ['line 4: let var4 = 40'])
227309
call RunDbgCmd(buf, 'cont')
228310

229311
call StopVimInTerminal(buf)

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,8 @@ static char *(features[]) =
771771

772772
static int included_patches[] =
773773
{ /* Add new patch number below this line */
774+
/**/
775+
1191,
774776
/**/
775777
1190,
776778
/**/

0 commit comments

Comments
 (0)