comparison src/testdir/test_debugger.vim @ 16372:5900941b2e37 v8.1.1191

patch 8.1.1191: not all debug commands are covered by a test commit https://github.com/vim/vim/commit/0fdd94359511f295d93e488d60ca3b0d40ea1cfa Author: Bram Moolenaar <Bram@vim.org> Date: Sat Apr 20 22:28:48 2019 +0200 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 https://github.com/vim/vim/issues/4282)
author Bram Moolenaar <Bram@vim.org>
date Sat, 20 Apr 2019 22:30:05 +0200
parents ffa791471a4c
children 8d91579414b8
comparison
equal deleted inserted replaced
16371:8fddc4c1db12 16372:5900941b2e37
36 \ ' let var1 = 2 + a:var', 36 \ ' let var1 = 2 + a:var',
37 \ ' let var2 = Bazz(var1) + 4', 37 \ ' let var2 = Bazz(var1) + 4',
38 \ ' return var2', 38 \ ' return var2',
39 \ 'endfunc', 39 \ 'endfunc',
40 \ 'func Bazz(var)', 40 \ 'func Bazz(var)',
41 \ ' let var1 = 3 + a:var', 41 \ ' try',
42 \ ' let var3 = "another var"', 42 \ ' let var1 = 3 + a:var',
43 \ ' let var3 = "value2"', 43 \ ' let var3 = "another var"',
44 \ ' let var3 = "value3"', 44 \ ' let var3 = "value2"',
45 \ ' catch',
46 \ ' let var4 = "exception"',
47 \ ' endtry',
45 \ ' return var1', 48 \ ' return var1',
46 \ 'endfunc'], 'Xtest.vim') 49 \ 'endfunc'], 'Xtest.vim')
47 50
48 " Start Vim in a terminal 51 " Start Vim in a terminal
49 let buf = RunVimInTerminal('-S Xtest.vim', {}) 52 let buf = RunVimInTerminal('-S Xtest.vim', {})
50 53
51 " Start the Vim debugger 54 " Start the Vim debugger
52 call RunDbgCmd(buf, ':debug echo Foo()') 55 call RunDbgCmd(buf, ':debug echo Foo()')
53 56
54 " Create a few stack frames by stepping through functions 57 " Create a few stack frames by stepping through functions
58 call RunDbgCmd(buf, 'step')
55 call RunDbgCmd(buf, 'step') 59 call RunDbgCmd(buf, 'step')
56 call RunDbgCmd(buf, 'step') 60 call RunDbgCmd(buf, 'step')
57 call RunDbgCmd(buf, 'step') 61 call RunDbgCmd(buf, 'step')
58 call RunDbgCmd(buf, 'step') 62 call RunDbgCmd(buf, 'step')
59 call RunDbgCmd(buf, 'step') 63 call RunDbgCmd(buf, 'step')
62 " check backtrace 66 " check backtrace
63 call RunDbgCmd(buf, 'backtrace', [ 67 call RunDbgCmd(buf, 'backtrace', [
64 \ ' 2 function Foo[2]', 68 \ ' 2 function Foo[2]',
65 \ ' 1 Bar[2]', 69 \ ' 1 Bar[2]',
66 \ '->0 Bazz', 70 \ '->0 Bazz',
67 \ 'line 2: let var3 = "another var"']) 71 \ 'line 3: let var3 = "another var"'])
68 72
69 " Check variables in different stack frames 73 " Check variables in different stack frames
70 call RunDbgCmd(buf, 'echo var1', ['6']) 74 call RunDbgCmd(buf, 'echo var1', ['6'])
71 75
72 call RunDbgCmd(buf, 'up') 76 call RunDbgCmd(buf, 'up')
73 call RunDbgCmd(buf, 'back', [ 77 call RunDbgCmd(buf, 'back', [
74 \ ' 2 function Foo[2]', 78 \ ' 2 function Foo[2]',
75 \ '->1 Bar[2]', 79 \ '->1 Bar[2]',
76 \ ' 0 Bazz', 80 \ ' 0 Bazz',
77 \ 'line 2: let var3 = "another var"']) 81 \ 'line 3: let var3 = "another var"'])
78 call RunDbgCmd(buf, 'echo var1', ['3']) 82 call RunDbgCmd(buf, 'echo var1', ['3'])
79 83
80 call RunDbgCmd(buf, 'u') 84 call RunDbgCmd(buf, 'u')
81 call RunDbgCmd(buf, 'bt', [ 85 call RunDbgCmd(buf, 'bt', [
82 \ '->2 function Foo[2]', 86 \ '->2 function Foo[2]',
83 \ ' 1 Bar[2]', 87 \ ' 1 Bar[2]',
84 \ ' 0 Bazz', 88 \ ' 0 Bazz',
85 \ 'line 2: let var3 = "another var"']) 89 \ 'line 3: let var3 = "another var"'])
86 call RunDbgCmd(buf, 'echo var1', ['1']) 90 call RunDbgCmd(buf, 'echo var1', ['1'])
87 91
88 " Undefined variables 92 " Undefined variables
89 call RunDbgCmd(buf, 'step') 93 call RunDbgCmd(buf, 'step')
90 call RunDbgCmd(buf, 'frame 2') 94 call RunDbgCmd(buf, 'frame 2')
91 call RunDbgCmd(buf, 'echo var3', [ 95 call RunDbgCmd(buf, 'echo var3', [
92 \ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:', 96 \ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:',
93 \ 'line 3:', 97 \ 'line 4:',
94 \ 'E121: Undefined variable: var3']) 98 \ 'E121: Undefined variable: var3'])
95 99
96 " var3 is defined in this level with some other value 100 " var3 is defined in this level with some other value
97 call RunDbgCmd(buf, 'fr 0') 101 call RunDbgCmd(buf, 'fr 0')
98 call RunDbgCmd(buf, 'echo var3', ['another var']) 102 call RunDbgCmd(buf, 'echo var3', ['another var'])
99 103
100 call RunDbgCmd(buf, 'step') 104 call RunDbgCmd(buf, 'step')
101 call RunDbgCmd(buf, 'step') 105 call RunDbgCmd(buf, '')
102 call RunDbgCmd(buf, 'step') 106 call RunDbgCmd(buf, '')
103 call RunDbgCmd(buf, 'step') 107 call RunDbgCmd(buf, '')
108 call RunDbgCmd(buf, '')
104 call RunDbgCmd(buf, 'step', [ 109 call RunDbgCmd(buf, 'step', [
105 \ 'function Foo[2]..Bar', 110 \ 'function Foo[2]..Bar',
106 \ 'line 3: End of function']) 111 \ 'line 3: End of function'])
107 call RunDbgCmd(buf, 'up') 112 call RunDbgCmd(buf, 'up')
108 113
187 \ 'function Foo[2]..Bar', 192 \ 'function Foo[2]..Bar',
188 \ 'line 1: let var1 = 2 + a:var']) 193 \ 'line 1: let var1 = 2 + a:var'])
189 call RunDbgCmd(buf, 'cont', [ 194 call RunDbgCmd(buf, 'cont', [
190 \ 'Breakpoint in "Bazz" line 3', 195 \ 'Breakpoint in "Bazz" line 3',
191 \ 'function Foo[2]..Bar[2]..Bazz', 196 \ 'function Foo[2]..Bar[2]..Bazz',
192 \ 'line 3: let var3 = "value2"']) 197 \ 'line 3: let var3 = "another var"'])
193 198
194 " Delete the breakpoints 199 " Delete the breakpoints
195 call RunDbgCmd(buf, 'breakd 1') 200 call RunDbgCmd(buf, 'breakd 1')
196 call RunDbgCmd(buf, 'breakli', [' 2 func Bazz line 3']) 201 call RunDbgCmd(buf, 'breakli', [' 2 func Bazz line 3'])
197 call RunDbgCmd(buf, 'breakdel func 3 Bazz') 202 call RunDbgCmd(buf, 'breakdel func 3 Bazz')
205 " Delete a non-existing breakpoint 210 " Delete a non-existing breakpoint
206 call RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2']) 211 call RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2'])
207 212
208 " Expression breakpoint 213 " Expression breakpoint
209 call RunDbgCmd(buf, ':breakadd func 2 Bazz') 214 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')
211 call RunDbgCmd(buf, 'step') 220 call RunDbgCmd(buf, 'step')
212 call RunDbgCmd(buf, 'breaka expr var3') 221 call RunDbgCmd(buf, 'breaka expr var3')
213 call RunDbgCmd(buf, 'breakl', [' 4 expr var3']) 222 call RunDbgCmd(buf, 'breakl', [' 3 func Bazz line 2',
214 call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 4', 223 \ ' 4 expr var3'])
224 call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 5',
215 \ 'Oldval = "''another var''"', 225 \ 'Oldval = "''another var''"',
216 \ 'Newval = "''value2''"', 226 \ 'Newval = "''value2''"',
217 \ 'function Bazz', 227 \ 'function Bazz',
218 \ 'line 4: let var3 = "value3"']) 228 \ 'line 5: catch'])
219 229
220 call RunDbgCmd(buf, 'breakdel *') 230 call RunDbgCmd(buf, 'breakdel *')
221 call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) 231 call RunDbgCmd(buf, 'breakl', ['No breakpoints defined'])
232
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'])
222 249
223 " finish the current function 250 " finish the current function
224 call RunDbgCmd(buf, 'finish', [ 251 call RunDbgCmd(buf, 'finish', [
225 \ 'function Bazz', 252 \ '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'])
227 call RunDbgCmd(buf, 'cont') 309 call RunDbgCmd(buf, 'cont')
228 310
229 call StopVimInTerminal(buf) 311 call StopVimInTerminal(buf)
230 312
231 call delete('Xtest.vim') 313 call delete('Xtest.vim')