Mercurial > vim
comparison src/testdir/test_debugger.vim @ 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 | |
children | 5900941b2e37 |
comparison
equal
deleted
inserted
replaced
16349:4e45c3b55775 | 16350:ffa791471a4c |
---|---|
1 " Tests for the Vim script debug commands | |
2 | |
3 source shared.vim | |
4 source screendump.vim | |
5 | |
6 " Run a Vim debugger command | |
7 " If the expected output argument is supplied, then check for it. | |
8 func RunDbgCmd(buf, cmd, ...) | |
9 call term_sendkeys(a:buf, a:cmd . "\r") | |
10 call term_wait(a:buf) | |
11 | |
12 if a:0 != 0 | |
13 " Verify the expected output | |
14 let lnum = 20 - len(a:1) | |
15 for l in a:1 | |
16 call WaitForAssert({-> assert_equal(l, term_getline(a:buf, lnum))}) | |
17 let lnum += 1 | |
18 endfor | |
19 endif | |
20 endfunc | |
21 | |
22 " Debugger tests | |
23 func Test_Debugger() | |
24 if !CanRunVimInTerminal() | |
25 return | |
26 endif | |
27 | |
28 " Create a Vim script with some functions | |
29 call writefile([ | |
30 \ 'func Foo()', | |
31 \ ' let var1 = 1', | |
32 \ ' let var2 = Bar(var1) + 9', | |
33 \ ' return var2', | |
34 \ 'endfunc', | |
35 \ 'func Bar(var)', | |
36 \ ' let var1 = 2 + a:var', | |
37 \ ' let var2 = Bazz(var1) + 4', | |
38 \ ' return var2', | |
39 \ 'endfunc', | |
40 \ 'func Bazz(var)', | |
41 \ ' let var1 = 3 + a:var', | |
42 \ ' let var3 = "another var"', | |
43 \ ' let var3 = "value2"', | |
44 \ ' let var3 = "value3"', | |
45 \ ' return var1', | |
46 \ 'endfunc'], 'Xtest.vim') | |
47 | |
48 " Start Vim in a terminal | |
49 let buf = RunVimInTerminal('-S Xtest.vim', {}) | |
50 | |
51 " Start the Vim debugger | |
52 call RunDbgCmd(buf, ':debug echo Foo()') | |
53 | |
54 " Create a few stack frames by stepping through functions | |
55 call RunDbgCmd(buf, 'step') | |
56 call RunDbgCmd(buf, 'step') | |
57 call RunDbgCmd(buf, 'step') | |
58 call RunDbgCmd(buf, 'step') | |
59 call RunDbgCmd(buf, 'step') | |
60 call RunDbgCmd(buf, 'step') | |
61 | |
62 " check backtrace | |
63 call RunDbgCmd(buf, 'backtrace', [ | |
64 \ ' 2 function Foo[2]', | |
65 \ ' 1 Bar[2]', | |
66 \ '->0 Bazz', | |
67 \ 'line 2: let var3 = "another var"']) | |
68 | |
69 " Check variables in different stack frames | |
70 call RunDbgCmd(buf, 'echo var1', ['6']) | |
71 | |
72 call RunDbgCmd(buf, 'up') | |
73 call RunDbgCmd(buf, 'back', [ | |
74 \ ' 2 function Foo[2]', | |
75 \ '->1 Bar[2]', | |
76 \ ' 0 Bazz', | |
77 \ 'line 2: let var3 = "another var"']) | |
78 call RunDbgCmd(buf, 'echo var1', ['3']) | |
79 | |
80 call RunDbgCmd(buf, 'u') | |
81 call RunDbgCmd(buf, 'bt', [ | |
82 \ '->2 function Foo[2]', | |
83 \ ' 1 Bar[2]', | |
84 \ ' 0 Bazz', | |
85 \ 'line 2: let var3 = "another var"']) | |
86 call RunDbgCmd(buf, 'echo var1', ['1']) | |
87 | |
88 " Undefined variables | |
89 call RunDbgCmd(buf, 'step') | |
90 call RunDbgCmd(buf, 'frame 2') | |
91 call RunDbgCmd(buf, 'echo var3', [ | |
92 \ 'Error detected while processing function Foo[2]..Bar[2]..Bazz:', | |
93 \ 'line 3:', | |
94 \ 'E121: Undefined variable: var3']) | |
95 | |
96 " var3 is defined in this level with some other value | |
97 call RunDbgCmd(buf, 'fr 0') | |
98 call RunDbgCmd(buf, 'echo var3', ['another var']) | |
99 | |
100 call RunDbgCmd(buf, 'step') | |
101 call RunDbgCmd(buf, 'step') | |
102 call RunDbgCmd(buf, 'step') | |
103 call RunDbgCmd(buf, 'step') | |
104 call RunDbgCmd(buf, 'step', [ | |
105 \ 'function Foo[2]..Bar', | |
106 \ 'line 3: End of function']) | |
107 call RunDbgCmd(buf, 'up') | |
108 | |
109 " Undefined var2 | |
110 call RunDbgCmd(buf, 'echo var2', [ | |
111 \ 'Error detected while processing function Foo[2]..Bar:', | |
112 \ 'line 3:', | |
113 \ 'E121: Undefined variable: var2']) | |
114 | |
115 " Var2 is defined with 10 | |
116 call RunDbgCmd(buf, 'down') | |
117 call RunDbgCmd(buf, 'echo var2', ['10']) | |
118 | |
119 " Backtrace movements | |
120 call RunDbgCmd(buf, 'b', [ | |
121 \ ' 1 function Foo[2]', | |
122 \ '->0 Bar', | |
123 \ 'line 3: End of function']) | |
124 | |
125 " next command cannot go down, we are on bottom | |
126 call RunDbgCmd(buf, 'down', ['frame is zero']) | |
127 call RunDbgCmd(buf, 'up') | |
128 | |
129 " next command cannot go up, we are on top | |
130 call RunDbgCmd(buf, 'up', ['frame at highest level: 1']) | |
131 call RunDbgCmd(buf, 'where', [ | |
132 \ '->1 function Foo[2]', | |
133 \ ' 0 Bar', | |
134 \ 'line 3: End of function']) | |
135 | |
136 " fil is not frame or finish, it is file | |
137 call RunDbgCmd(buf, 'fil', ['"[No Name]" --No lines in buffer--']) | |
138 | |
139 " relative backtrace movement | |
140 call RunDbgCmd(buf, 'fr -1') | |
141 call RunDbgCmd(buf, 'frame', [ | |
142 \ ' 1 function Foo[2]', | |
143 \ '->0 Bar', | |
144 \ 'line 3: End of function']) | |
145 | |
146 call RunDbgCmd(buf, 'fr +1') | |
147 call RunDbgCmd(buf, 'fram', [ | |
148 \ '->1 function Foo[2]', | |
149 \ ' 0 Bar', | |
150 \ 'line 3: End of function']) | |
151 | |
152 " go beyond limits does not crash | |
153 call RunDbgCmd(buf, 'fr 100', ['frame at highest level: 1']) | |
154 call RunDbgCmd(buf, 'fra', [ | |
155 \ '->1 function Foo[2]', | |
156 \ ' 0 Bar', | |
157 \ 'line 3: End of function']) | |
158 | |
159 call RunDbgCmd(buf, 'frame -40', ['frame is zero']) | |
160 call RunDbgCmd(buf, 'fram', [ | |
161 \ ' 1 function Foo[2]', | |
162 \ '->0 Bar', | |
163 \ 'line 3: End of function']) | |
164 | |
165 " final result 19 | |
166 call RunDbgCmd(buf, 'cont', ['19']) | |
167 | |
168 " breakpoints tests | |
169 | |
170 " Start a debug session, so that reading the last line from the terminal | |
171 " works properly. | |
172 call RunDbgCmd(buf, ':debug echo Foo()') | |
173 | |
174 " No breakpoints | |
175 call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) | |
176 | |
177 " Place some breakpoints | |
178 call RunDbgCmd(buf, 'breaka func Bar') | |
179 call RunDbgCmd(buf, 'breaklis', [' 1 func Bar line 1']) | |
180 call RunDbgCmd(buf, 'breakadd func 3 Bazz') | |
181 call RunDbgCmd(buf, 'breaklist', [' 1 func Bar line 1', | |
182 \ ' 2 func Bazz line 3']) | |
183 | |
184 " Check whether the breakpoints are hit | |
185 call RunDbgCmd(buf, 'cont', [ | |
186 \ 'Breakpoint in "Bar" line 1', | |
187 \ 'function Foo[2]..Bar', | |
188 \ 'line 1: let var1 = 2 + a:var']) | |
189 call RunDbgCmd(buf, 'cont', [ | |
190 \ 'Breakpoint in "Bazz" line 3', | |
191 \ 'function Foo[2]..Bar[2]..Bazz', | |
192 \ 'line 3: let var3 = "value2"']) | |
193 | |
194 " Delete the breakpoints | |
195 call RunDbgCmd(buf, 'breakd 1') | |
196 call RunDbgCmd(buf, 'breakli', [' 2 func Bazz line 3']) | |
197 call RunDbgCmd(buf, 'breakdel func 3 Bazz') | |
198 call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) | |
199 | |
200 call RunDbgCmd(buf, 'cont') | |
201 | |
202 " Make sure the breakpoints are removed | |
203 call RunDbgCmd(buf, ':echo Foo()', ['19']) | |
204 | |
205 " Delete a non-existing breakpoint | |
206 call RunDbgCmd(buf, ':breakdel 2', ['E161: Breakpoint not found: 2']) | |
207 | |
208 " Expression breakpoint | |
209 call RunDbgCmd(buf, ':breakadd func 2 Bazz') | |
210 call RunDbgCmd(buf, ':echo Bazz(1)') | |
211 call RunDbgCmd(buf, 'step') | |
212 call RunDbgCmd(buf, 'breaka expr var3') | |
213 call RunDbgCmd(buf, 'breakl', [' 4 expr var3']) | |
214 call RunDbgCmd(buf, 'cont', ['Breakpoint in "Bazz" line 4', | |
215 \ 'Oldval = "''another var''"', | |
216 \ 'Newval = "''value2''"', | |
217 \ 'function Bazz', | |
218 \ 'line 4: let var3 = "value3"']) | |
219 | |
220 call RunDbgCmd(buf, 'breakdel *') | |
221 call RunDbgCmd(buf, 'breakl', ['No breakpoints defined']) | |
222 | |
223 " finish the current function | |
224 call RunDbgCmd(buf, 'finish', [ | |
225 \ 'function Bazz', | |
226 \ 'line 5: End of function']) | |
227 call RunDbgCmd(buf, 'cont') | |
228 | |
229 call StopVimInTerminal(buf) | |
230 | |
231 call delete('Xtest.vim') | |
232 endfunc |