blob: 357a8d27c87cbc745c9d598ee4ea5c17f03fd8c7 [file] [log] [blame]
Bram Moolenaarf9660b52016-04-16 22:19:15 +02001" Test commands that jump somewhere.
2
Bram Moolenaar226630a2016-10-08 19:21:31 +02003" Create a new buffer using "lines" and place the cursor on the word after the
4" first occurrence of return and invoke "cmd". The cursor should now be
5" positioned at the given line and col.
6func XTest_goto_decl(cmd, lines, line, col)
Bram Moolenaarf9660b52016-04-16 22:19:15 +02007 new
Bram Moolenaar226630a2016-10-08 19:21:31 +02008 call setline(1, a:lines)
9 /return/
10 normal! W
11 execute 'norm! ' . a:cmd
12 call assert_equal(a:line, line('.'))
13 call assert_equal(a:col, col('.'))
Bram Moolenaarf9660b52016-04-16 22:19:15 +020014 quit!
15endfunc
Bram Moolenaar23c60f22016-06-15 22:03:48 +020016
Bram Moolenaar226630a2016-10-08 19:21:31 +020017func Test_gD()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020018 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020019 int x;
Bram Moolenaar94722c52023-01-28 19:19:03 +000020
Bram Moolenaare7eb9272019-06-24 00:58:07 +020021 int func(void)
22 {
23 return x;
24 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +020025 [CODE]
26
Bram Moolenaar226630a2016-10-08 19:21:31 +020027 call XTest_goto_decl('gD', lines, 1, 5)
28endfunc
29
30func Test_gD_too()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020031 let lines =<< trim [CODE]
Bram Moolenaarc79745a2019-05-20 22:12:34 +020032 Filename x;
Bram Moolenaar94722c52023-01-28 19:19:03 +000033
Bram Moolenaare7eb9272019-06-24 00:58:07 +020034 int Filename
35 int func() {
36 Filename x;
37 return x;
Bram Moolenaarc79745a2019-05-20 22:12:34 +020038 [CODE]
39
Bram Moolenaar226630a2016-10-08 19:21:31 +020040 call XTest_goto_decl('gD', lines, 1, 10)
41endfunc
42
43func Test_gD_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020044 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020045 /* int x; */
46 int x;
Bram Moolenaar94722c52023-01-28 19:19:03 +000047
Bram Moolenaare7eb9272019-06-24 00:58:07 +020048 int func(void)
49 {
50 return x;
51 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +020052 [CODE]
53
Bram Moolenaar226630a2016-10-08 19:21:31 +020054 call XTest_goto_decl('gD', lines, 2, 5)
55endfunc
56
57func Test_gD_inline_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020058 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020059 int y /* , x */;
60 int x;
Bram Moolenaar94722c52023-01-28 19:19:03 +000061
Bram Moolenaare7eb9272019-06-24 00:58:07 +020062 int func(void)
63 {
64 return x;
65 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +020066 [CODE]
67
Bram Moolenaar226630a2016-10-08 19:21:31 +020068 call XTest_goto_decl('gD', lines, 2, 5)
69endfunc
70
71func Test_gD_string()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020072 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020073 char *s[] = "x";
74 int x = 1;
Bram Moolenaar94722c52023-01-28 19:19:03 +000075
Bram Moolenaare7eb9272019-06-24 00:58:07 +020076 int func(void)
77 {
78 return x;
79 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +020080 [CODE]
81
Bram Moolenaar226630a2016-10-08 19:21:31 +020082 call XTest_goto_decl('gD', lines, 2, 5)
83endfunc
84
85func Test_gD_string_same_line()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020086 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +020087 char *s[] = "x", int x = 1;
Bram Moolenaar94722c52023-01-28 19:19:03 +000088
Bram Moolenaare7eb9272019-06-24 00:58:07 +020089 int func(void)
90 {
91 return x;
92 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +020093 [CODE]
94
Bram Moolenaar226630a2016-10-08 19:21:31 +020095 call XTest_goto_decl('gD', lines, 1, 22)
96endfunc
97
98func Test_gD_char()
Bram Moolenaarc79745a2019-05-20 22:12:34 +020099 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200100 char c = 'x';
101 int x = 1;
Bram Moolenaar94722c52023-01-28 19:19:03 +0000102
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200103 int func(void)
104 {
105 return x;
106 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200107 [CODE]
108
Bram Moolenaar226630a2016-10-08 19:21:31 +0200109 call XTest_goto_decl('gD', lines, 2, 5)
110endfunc
111
112func Test_gd()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200113 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200114 int x;
Bram Moolenaar94722c52023-01-28 19:19:03 +0000115
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200116 int func(int x)
117 {
118 return x;
119 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200120 [CODE]
121
Bram Moolenaar226630a2016-10-08 19:21:31 +0200122 call XTest_goto_decl('gd', lines, 3, 14)
123endfunc
124
Bram Moolenaard1ad99b2020-10-04 16:16:54 +0200125" Using gd to jump to a declaration in a fold
126func Test_gd_with_fold()
127 new
128 let lines =<< trim END
129 #define ONE 1
130 #define TWO 2
131 #define THREE 3
132
133 TWO
134 END
135 call setline(1, lines)
136 1,3fold
137 call feedkeys('Ggd', 'xt')
138 call assert_equal(2, line('.'))
139 call assert_equal(-1, foldclosedend(2))
140 bw!
141endfunc
142
Bram Moolenaar226630a2016-10-08 19:21:31 +0200143func Test_gd_not_local()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200144 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200145 int func1(void)
146 {
147 return x;
148 }
Bram Moolenaar94722c52023-01-28 19:19:03 +0000149
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200150 int func2(int x)
151 {
152 return x;
153 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200154 [CODE]
155
Bram Moolenaar226630a2016-10-08 19:21:31 +0200156 call XTest_goto_decl('gd', lines, 3, 10)
157endfunc
158
159func Test_gd_kr_style()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200160 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200161 int func(x)
162 int x;
163 {
164 return x;
165 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200166 [CODE]
167
Bram Moolenaar226630a2016-10-08 19:21:31 +0200168 call XTest_goto_decl('gd', lines, 2, 7)
169endfunc
170
171func Test_gd_missing_braces()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200172 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200173 def func1(a)
174 a + 1
175 end
Bram Moolenaar94722c52023-01-28 19:19:03 +0000176
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200177 a = 1
Bram Moolenaar94722c52023-01-28 19:19:03 +0000178
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200179 def func2()
180 return a
181 end
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200182 [CODE]
183
Bram Moolenaar226630a2016-10-08 19:21:31 +0200184 call XTest_goto_decl('gd', lines, 1, 11)
185endfunc
186
187func Test_gd_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200188 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200189 int func(void)
190 {
191 /* int x; */
192 int x;
193 return x;
194 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200195 [CODE]
196
Bram Moolenaar226630a2016-10-08 19:21:31 +0200197 call XTest_goto_decl('gd', lines, 4, 7)
198endfunc
199
200func Test_gd_comment_in_string()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200201 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200202 int func(void)
203 {
204 char *s ="//"; int x;
205 int x;
206 return x;
207 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200208 [CODE]
209
Bram Moolenaar226630a2016-10-08 19:21:31 +0200210 call XTest_goto_decl('gd', lines, 3, 22)
211endfunc
212
213func Test_gd_string_in_comment()
214 set comments=
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200215 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200216 int func(void)
217 {
218 /* " */ int x;
219 int x;
220 return x;
221 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200222 [CODE]
223
Bram Moolenaar226630a2016-10-08 19:21:31 +0200224 call XTest_goto_decl('gd', lines, 3, 15)
225 set comments&
226endfunc
227
228func Test_gd_inline_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200229 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200230 int func(/* x is an int */ int x)
231 {
232 return x;
233 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200234 [CODE]
235
Bram Moolenaar226630a2016-10-08 19:21:31 +0200236 call XTest_goto_decl('gd', lines, 1, 32)
237endfunc
238
239func Test_gd_inline_comment_only()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200240 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200241 int func(void) /* one lonely x */
242 {
243 return x;
244 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200245 [CODE]
246
Bram Moolenaar226630a2016-10-08 19:21:31 +0200247 call XTest_goto_decl('gd', lines, 3, 10)
248endfunc
249
250func Test_gd_inline_comment_body()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200251 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200252 int func(void)
253 {
254 int y /* , x */;
Bram Moolenaar94722c52023-01-28 19:19:03 +0000255
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200256 for (/* int x = 0 */; y < 2; y++);
Bram Moolenaar94722c52023-01-28 19:19:03 +0000257
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200258 int x = 0;
Bram Moolenaar94722c52023-01-28 19:19:03 +0000259
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200260 return x;
261 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200262 [CODE]
263
Bram Moolenaar226630a2016-10-08 19:21:31 +0200264 call XTest_goto_decl('gd', lines, 7, 7)
265endfunc
266
267func Test_gd_trailing_multiline_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200268 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200269 int func(int x) /* x is an int */
270 {
271 return x;
272 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200273 [CODE]
274
Bram Moolenaar226630a2016-10-08 19:21:31 +0200275 call XTest_goto_decl('gd', lines, 1, 14)
276endfunc
277
278func Test_gd_trailing_comment()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200279 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200280 int func(int x) // x is an int
281 {
282 return x;
283 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200284 [CODE]
285
Bram Moolenaar226630a2016-10-08 19:21:31 +0200286 call XTest_goto_decl('gd', lines, 1, 14)
287endfunc
288
289func Test_gd_string()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200290 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200291 int func(void)
292 {
293 char *s = "x";
294 int x = 1;
Bram Moolenaar94722c52023-01-28 19:19:03 +0000295
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200296 return x;
297 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200298 [CODE]
Bram Moolenaar226630a2016-10-08 19:21:31 +0200299 call XTest_goto_decl('gd', lines, 4, 7)
300endfunc
301
302func Test_gd_string_only()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200303 let lines =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200304 int func(void)
305 {
306 char *s = "x";
Bram Moolenaar94722c52023-01-28 19:19:03 +0000307
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200308 return x;
309 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200310 [CODE]
311
Bram Moolenaar226630a2016-10-08 19:21:31 +0200312 call XTest_goto_decl('gd', lines, 5, 10)
Bram Moolenaar23c60f22016-06-15 22:03:48 +0200313endfunc
Bram Moolenaara2477fd2016-12-03 15:13:20 +0100314
zeertzjqfcaed6a2024-02-18 09:33:54 +0100315" Check that setting some options does not change curswant
316func Test_set_options_keep_col()
Bram Moolenaara2477fd2016-12-03 15:13:20 +0100317 new
318 call setline(1, ['long long long line', 'short line'])
319 normal ggfi
320 let pos = getcurpos()
321 normal j
zeertzjqfcaed6a2024-02-18 09:33:54 +0100322 set invhlsearch spell spelllang=en,cjk spelloptions=camel textwidth=80
323 set cursorline cursorcolumn cursorlineopt=line colorcolumn=+1
324 set background=dark
325 set background=light
Bram Moolenaara2477fd2016-12-03 15:13:20 +0100326 normal k
327 call assert_equal(pos, getcurpos())
328 bwipe!
zeertzjqfcaed6a2024-02-18 09:33:54 +0100329 set hlsearch& spell& spelllang& spelloptions& textwidth&
330 set cursorline& cursorcolumn& cursorlineopt& colorcolumn&
331 set background&
Bram Moolenaara2477fd2016-12-03 15:13:20 +0100332endfunc
333
Bram Moolenaar60402d62017-04-20 18:54:50 +0200334func Test_gd_local_block()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200335 let lines =<< trim [CODE]
336 int main()
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200337 {
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200338 char *a = "NOT NULL";
339 if(a)
340 {
341 char *b = a;
342 printf("%s\n", b);
343 }
344 else
345 {
346 char *b = "NULL";
347 return b;
348 }
Bram Moolenaar94722c52023-01-28 19:19:03 +0000349
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200350 return 0;
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200351 }
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200352 [CODE]
353
Bram Moolenaar60402d62017-04-20 18:54:50 +0200354 call XTest_goto_decl('1gd', lines, 11, 11)
355endfunc
Bram Moolenaar6b69e5c2018-05-26 18:39:32 +0200356
357func Test_motion_if_elif_else_endif()
358 new
Bram Moolenaar224a5f12020-04-28 20:29:07 +0200359 let lines =<< trim END
360 /* Test pressing % on #if, #else #elsif and #endif,
361 * with nested #if
362 */
363 #if FOO
364 /* ... */
365 # if BAR
366 /* ... */
367 # endif
368 #elif BAR
369 /* ... */
370 #else
371 /* ... */
372 #endif
373
374 #define FOO 1
375 END
376 call setline(1, lines)
Bram Moolenaar6b69e5c2018-05-26 18:39:32 +0200377 /#if FOO
378 norm %
379 call assert_equal([9, 1], getpos('.')[1:2])
380 norm %
381 call assert_equal([11, 1], getpos('.')[1:2])
382 norm %
383 call assert_equal([13, 1], getpos('.')[1:2])
384 norm %
385 call assert_equal([4, 1], getpos('.')[1:2])
386 /# if BAR
387 norm $%
388 call assert_equal([8, 1], getpos('.')[1:2])
389 norm $%
390 call assert_equal([6, 1], getpos('.')[1:2])
391
Bram Moolenaar224a5f12020-04-28 20:29:07 +0200392 " Test for [# and ]# command
393 call cursor(5, 1)
394 normal [#
395 call assert_equal([4, 1], getpos('.')[1:2])
396 call cursor(5, 1)
397 normal ]#
398 call assert_equal([9, 1], getpos('.')[1:2])
399 call cursor(10, 1)
400 normal [#
401 call assert_equal([9, 1], getpos('.')[1:2])
402 call cursor(10, 1)
403 normal ]#
404 call assert_equal([11, 1], getpos('.')[1:2])
405
406 " Finding a match before the first line or after the last line should fail
407 normal gg
408 call assert_beeps('normal [#')
409 normal G
410 call assert_beeps('normal ]#')
411
412 " Finding a match for a macro definition (#define) should fail
413 normal G
414 call assert_beeps('normal %')
415
Bram Moolenaar6b69e5c2018-05-26 18:39:32 +0200416 bw!
417endfunc
418
419func Test_motion_c_comment()
420 new
421 a
422/*
423 * Test pressing % on beginning/end
424 * of C comments.
425 */
426/* Another comment */
427.
428 norm gg0%
429 call assert_equal([4, 3], getpos('.')[1:2])
430 norm %
431 call assert_equal([1, 1], getpos('.')[1:2])
432 norm gg0l%
433 call assert_equal([4, 3], getpos('.')[1:2])
434 norm h%
435 call assert_equal([1, 1], getpos('.')[1:2])
436
437 norm G^
438 norm %
439 call assert_equal([5, 21], getpos('.')[1:2])
440 norm %
441 call assert_equal([5, 1], getpos('.')[1:2])
442
443 bw!
444endfunc
Bram Moolenaar224a5f12020-04-28 20:29:07 +0200445
446" vim: shiftwidth=2 sts=2 expandtab