@@ -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 )
0 commit comments