Mercurial > vim
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') |