Mercurial > vim
comparison src/testdir/test_cpoptions.vim @ 20832:045442aa392b v8.2.0968
patch 8.2.0968: no proper testing of the 'cpoptions' flags
Commit: https://github.com/vim/vim/commit/c9630d2658af9dcaa01913e899b201bfdef7b536
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 13 13:20:48 2020 +0200
patch 8.2.0968: no proper testing of the 'cpoptions' flags
Problem: No proper testing of the 'cpoptions' flags.
Solution: Add tests. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/6251)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 13 Jun 2020 13:30:04 +0200 |
parents | |
children | d3fa0d29fa9a |
comparison
equal
deleted
inserted
replaced
20831:415f3c972a53 | 20832:045442aa392b |
---|---|
1 " Test for various 'cpoptions' (cpo) flags | |
2 | |
3 source check.vim | |
4 source view_util.vim | |
5 | |
6 " Test for the 'a' flag in 'cpo'. Reading a file should set the alternate | |
7 " file name. | |
8 func Test_cpo_a() | |
9 let save_cpo = &cpo | |
10 call writefile(['one'], 'Xfile') | |
11 " Wipe out all the buffers, so that the alternate file is empty | |
12 edit Xfoo | %bw | |
13 set cpo-=a | |
14 new | |
15 read Xfile | |
16 call assert_equal('', @#) | |
17 %d | |
18 set cpo+=a | |
19 read Xfile | |
20 call assert_equal('Xfile', @#) | |
21 close! | |
22 call delete('Xfile') | |
23 let &cpo = save_cpo | |
24 endfunc | |
25 | |
26 " Test for the 'A' flag in 'cpo'. Writing a file should set the alternate | |
27 " file name. | |
28 func Test_cpo_A() | |
29 let save_cpo = &cpo | |
30 " Wipe out all the buffers, so that the alternate file is empty | |
31 edit Xfoo | %bw | |
32 set cpo-=A | |
33 new Xfile1 | |
34 write Xfile2 | |
35 call assert_equal('', @#) | |
36 %bw | |
37 call delete('Xfile2') | |
38 new Xfile1 | |
39 set cpo+=A | |
40 write Xfile2 | |
41 call assert_equal('Xfile2', @#) | |
42 close! | |
43 call delete('Xfile2') | |
44 let &cpo = save_cpo | |
45 endfunc | |
46 | |
47 " Test for the 'b' flag in 'cpo'. "\|" at the end of a map command is | |
48 " recognized as the end of the map. | |
49 func Test_cpo_b() | |
50 let save_cpo = &cpo | |
51 set cpo+=b | |
52 nnoremap <F5> :pwd\<CR>\|let i = 1 | |
53 call assert_equal(':pwd\<CR>\', maparg('<F5>')) | |
54 nunmap <F5> | |
55 exe "nnoremap <F5> :pwd\<C-V>|let i = 1" | |
56 call assert_equal(':pwd|let i = 1', maparg('<F5>')) | |
57 nunmap <F5> | |
58 set cpo-=b | |
59 nnoremap <F5> :pwd\<CR>\|let i = 1 | |
60 call assert_equal(':pwd\<CR>|let i = 1', maparg('<F5>')) | |
61 let &cpo = save_cpo | |
62 nunmap <F5> | |
63 endfunc | |
64 | |
65 " Test for the 'c' flag in 'cpo'. | |
66 func Test_cpo_c() | |
67 let save_cpo = &cpo | |
68 set cpo+=c | |
69 new | |
70 call setline(1, ' abababababab') | |
71 exe "normal gg/abab\<CR>" | |
72 call assert_equal(3, searchcount().total) | |
73 set cpo-=c | |
74 exe "normal gg/abab\<CR>" | |
75 call assert_equal(5, searchcount().total) | |
76 close! | |
77 let &cpo = save_cpo | |
78 endfunc | |
79 | |
80 " Test for the 'C' flag in 'cpo' (line continuation) | |
81 func Test_cpo_C() | |
82 let save_cpo = &cpo | |
83 call writefile(['let l = [', '\ 1,', '\ 2]'], 'Xfile') | |
84 set cpo-=C | |
85 source Xfile | |
86 call assert_equal([1, 2], g:l) | |
87 set cpo+=C | |
88 call assert_fails('source Xfile', 'E10:') | |
89 call delete('Xfile') | |
90 let &cpo = save_cpo | |
91 endfunc | |
92 | |
93 " Test for the 'd' flag in 'cpo' (tags relative to the current file) | |
94 func Test_cpo_d() | |
95 let save_cpo = &cpo | |
96 call mkdir('Xdir') | |
97 call writefile(["one\tXfile1\t/^one$/"], 'tags') | |
98 call writefile(["two\tXfile2\t/^two$/"], 'Xdir/tags') | |
99 set tags=./tags | |
100 set cpo-=d | |
101 edit Xdir/Xfile | |
102 call assert_equal('two', taglist('.*')[0].name) | |
103 set cpo+=d | |
104 call assert_equal('one', taglist('.*')[0].name) | |
105 %bw! | |
106 call delete('tags') | |
107 call delete('Xdir', 'rf') | |
108 set tags& | |
109 let &cpo = save_cpo | |
110 endfunc | |
111 | |
112 " Test for the 'D' flag in 'cpo' (digraph after a r, f or t) | |
113 func Test_cpo_D() | |
114 CheckFeature digraphs | |
115 let save_cpo = &cpo | |
116 new | |
117 set cpo-=D | |
118 call setline(1, 'abcdefgh|') | |
119 exe "norm! 1gg0f\<c-k>!!" | |
120 call assert_equal(9, col('.')) | |
121 set cpo+=D | |
122 exe "norm! 1gg0f\<c-k>!!" | |
123 call assert_equal(1, col('.')) | |
124 set cpo-=D | |
125 close! | |
126 let &cpo = save_cpo | |
127 endfunc | |
128 | |
129 " Test for the 'e' flag in 'cpo' | |
130 func Test_cpo_e() | |
131 let save_cpo = &cpo | |
132 let @a='let i = 45' | |
133 set cpo+=e | |
134 call feedkeys(":@a\<CR>", 'xt') | |
135 call assert_equal(45, i) | |
136 set cpo-=e | |
137 call feedkeys(":@a\<CR>6\<CR>", 'xt') | |
138 call assert_equal(456, i) | |
139 let &cpo = save_cpo | |
140 endfunc | |
141 | |
142 " Test for the 'E' flag in 'cpo' with yank, change, delete, etc. operators | |
143 func Test_cpo_E() | |
144 new | |
145 call setline(1, '') | |
146 set cpo+=E | |
147 " yank an empty line | |
148 call assert_beeps('normal "ayl') | |
149 " change an empty line | |
150 call assert_beeps('normal lcTa') | |
151 " delete an empty line | |
152 call assert_beeps('normal D') | |
153 call assert_beeps('normal dl') | |
154 call assert_equal('', getline(1)) | |
155 " change case of an empty line | |
156 call assert_beeps('normal gul') | |
157 call assert_beeps('normal gUl') | |
158 " replace a character | |
159 call assert_beeps('normal vrx') | |
160 " increment and decrement | |
161 call assert_beeps('exe "normal v\<C-A>"') | |
162 call assert_beeps('exe "normal v\<C-X>"') | |
163 set cpo-=E | |
164 close! | |
165 endfunc | |
166 | |
167 " Test for the 'f' flag in 'cpo' (read in an empty buffer sets the file name) | |
168 func Test_cpo_f() | |
169 let save_cpo = &cpo | |
170 new | |
171 set cpo-=f | |
172 read test_cpoptions.vim | |
173 call assert_equal('', @%) | |
174 %d | |
175 set cpo+=f | |
176 read test_cpoptions.vim | |
177 call assert_equal('test_cpoptions.vim', @%) | |
178 close! | |
179 let &cpo = save_cpo | |
180 endfunc | |
181 | |
182 " Test for the 'F' flag in 'cpo' (write in an empty buffer sets the file name) | |
183 func Test_cpo_F() | |
184 let save_cpo = &cpo | |
185 new | |
186 set cpo-=F | |
187 write Xfile | |
188 call assert_equal('', @%) | |
189 call delete('Xfile') | |
190 set cpo+=F | |
191 write Xfile | |
192 call assert_equal('Xfile', @%) | |
193 close! | |
194 call delete('Xfile') | |
195 let &cpo = save_cpo | |
196 endfunc | |
197 | |
198 " Test for the 'g' flag in 'cpo' (jump to line 1 when re-editing a file) | |
199 func Test_cpo_g() | |
200 let save_cpo = &cpo | |
201 new test_cpoptions.vim | |
202 set cpo-=g | |
203 normal 20G | |
204 edit | |
205 call assert_equal(20, line('.')) | |
206 set cpo+=g | |
207 edit | |
208 call assert_equal(1, line('.')) | |
209 close! | |
210 let &cpo = save_cpo | |
211 endfunc | |
212 | |
213 " Test for inserting text in a line with only spaces ('H' flag in 'cpoptions') | |
214 func Test_cpo_H() | |
215 let save_cpo = &cpo | |
216 new | |
217 set cpo-=H | |
218 call setline(1, ' ') | |
219 normal! Ia | |
220 call assert_equal(' a', getline(1)) | |
221 set cpo+=H | |
222 call setline(1, ' ') | |
223 normal! Ia | |
224 call assert_equal(' a ', getline(1)) | |
225 close! | |
226 let &cpo = save_cpo | |
227 endfunc | |
228 | |
229 " Test for the 'I' flag in 'cpo' (deleting autoindent when using arrow keys) | |
230 func Test_cpo_I() | |
231 let save_cpo = &cpo | |
232 new | |
233 setlocal autoindent | |
234 set cpo+=I | |
235 exe "normal i one\<CR>\<Up>" | |
236 call assert_equal(' ', getline(2)) | |
237 set cpo-=I | |
238 %d | |
239 exe "normal i one\<CR>\<Up>" | |
240 call assert_equal('', getline(2)) | |
241 close! | |
242 let &cpo = save_cpo | |
243 endfunc | |
244 | |
245 " Test for the 'J' flag in 'cpo' (two spaces after a sentence) | |
246 func Test_cpo_J() | |
247 let save_cpo = &cpo | |
248 new | |
249 set cpo-=J | |
250 call setline(1, 'one. two! three? four."'' five.)]') | |
251 normal 0 | |
252 for colnr in [6, 12, 19, 28, 34] | |
253 normal ) | |
254 call assert_equal(colnr, col('.')) | |
255 endfor | |
256 for colnr in [28, 19, 12, 6, 1] | |
257 normal ( | |
258 call assert_equal(colnr, col('.')) | |
259 endfor | |
260 set cpo+=J | |
261 normal 0 | |
262 for colnr in [12, 28, 34] | |
263 normal ) | |
264 call assert_equal(colnr, col('.')) | |
265 endfor | |
266 for colnr in [28, 12, 1] | |
267 normal ( | |
268 call assert_equal(colnr, col('.')) | |
269 endfor | |
270 close! | |
271 let &cpo = save_cpo | |
272 endfunc | |
273 | |
274 " TODO: Add a test for 'k' in 'cpo' | |
275 | |
276 " TODO: Add a test for 'K' in 'cpo' | |
277 | |
278 " Test for the 'l' flag in 'cpo' (backslash in a [] range) | |
279 func Test_cpo_l() | |
280 let save_cpo = &cpo | |
281 new | |
282 call setline(1, ['', "a\tc" .. '\t']) | |
283 set cpo-=l | |
284 exe 'normal gg/[\t]' .. "\<CR>" | |
285 call assert_equal([2, 8], [col('.'), virtcol('.')]) | |
286 set cpo+=l | |
287 exe 'normal gg/[\t]' .. "\<CR>" | |
288 call assert_equal([4, 10], [col('.'), virtcol('.')]) | |
289 close! | |
290 let &cpo = save_cpo | |
291 endfunc | |
292 | |
293 " Test for inserting tab in virtual replace mode ('L' flag in 'cpoptions') | |
294 func Test_cpo_L() | |
295 let save_cpo = &cpo | |
296 new | |
297 set cpo-=L | |
298 call setline(1, 'abcdefghijklmnopqr') | |
299 exe "normal 0gR\<Tab>" | |
300 call assert_equal("\<Tab>ijklmnopqr", getline(1)) | |
301 set cpo+=L | |
302 set list | |
303 call setline(1, 'abcdefghijklmnopqr') | |
304 exe "normal 0gR\<Tab>" | |
305 call assert_equal("\<Tab>cdefghijklmnopqr", getline(1)) | |
306 set nolist | |
307 call setline(1, 'abcdefghijklmnopqr') | |
308 exe "normal 0gR\<Tab>" | |
309 call assert_equal("\<Tab>ijklmnopqr", getline(1)) | |
310 close! | |
311 let &cpo = save_cpo | |
312 endfunc | |
313 | |
314 " TODO: This test doesn't work. | |
315 | |
316 " Test for the 'M' flag in 'cpo' (% with escape parenthesis) | |
317 func Test_cpo_M() | |
318 let save_cpo = &cpo | |
319 new | |
320 call setline(1, ['( \( )', '\( ( \)']) | |
321 | |
322 set cpo-=M | |
323 call cursor(1, 1) | |
324 normal % | |
325 call assert_equal(6, col('.')) | |
326 call cursor(1, 4) | |
327 call assert_beeps('normal %') | |
328 call cursor(2, 2) | |
329 normal % | |
330 call assert_equal(7, col('.')) | |
331 call cursor(2, 4) | |
332 call assert_beeps('normal %') | |
333 | |
334 set cpo+=M | |
335 call cursor(1, 4) | |
336 normal % | |
337 call assert_equal(6, col('.')) | |
338 call cursor(1, 1) | |
339 call assert_beeps('normal %') | |
340 call cursor(2, 4) | |
341 normal % | |
342 call assert_equal(7, col('.')) | |
343 call cursor(2, 1) | |
344 call assert_beeps('normal %') | |
345 | |
346 close! | |
347 let &cpo = save_cpo | |
348 endfunc | |
349 | |
350 " Test for the 'n' flag in 'cpo' (using number column for wrapped lines) | |
351 func Test_cpo_n() | |
352 let save_cpo = &cpo | |
353 new | |
354 call setline(1, repeat('a', &columns)) | |
355 setlocal number | |
356 set cpo-=n | |
357 redraw! | |
358 call assert_equal(' aaaa', Screenline(2)) | |
359 set cpo+=n | |
360 redraw! | |
361 call assert_equal('aaaa', Screenline(2)) | |
362 close! | |
363 let &cpo = save_cpo | |
364 endfunc | |
365 | |
366 " Test for the 'o' flag in 'cpo' (line offset to search command) | |
367 func Test_cpo_o() | |
368 let save_cpo = &cpo | |
369 new | |
370 call setline(1, ['', 'one', 'two', 'three', 'one', 'two', 'three']) | |
371 set cpo-=o | |
372 exe "normal /one/+2\<CR>" | |
373 normal n | |
374 call assert_equal(7, line('.')) | |
375 set cpo+=o | |
376 exe "normal /one/+2\<CR>" | |
377 normal n | |
378 call assert_equal(5, line('.')) | |
379 close! | |
380 let &cpo = save_cpo | |
381 endfunc | |
382 | |
383 " Test for the 'O' flag in 'cpo' (overwriting an existing file) | |
384 func Test_cpo_O() | |
385 let save_cpo = &cpo | |
386 new Xfile | |
387 call setline(1, 'one') | |
388 call writefile(['two'], 'Xfile') | |
389 set cpo-=O | |
390 call assert_fails('write', 'E13:') | |
391 set cpo+=O | |
392 write | |
393 call assert_equal(['one'], readfile('Xfile')) | |
394 close! | |
395 call delete('Xfile') | |
396 let &cpo = save_cpo | |
397 endfunc | |
398 | |
399 " Test for the 'P' flag in 'cpo' (appending to a file sets the current file | |
400 " name) | |
401 func Test_cpo_P() | |
402 let save_cpo = &cpo | |
403 call writefile([], 'Xfile') | |
404 new | |
405 call setline(1, 'one') | |
406 set cpo+=F | |
407 set cpo-=P | |
408 write >> Xfile | |
409 call assert_equal('', @%) | |
410 set cpo+=P | |
411 write >> Xfile | |
412 call assert_equal('Xfile', @%) | |
413 close! | |
414 call delete('Xfile') | |
415 let &cpo = save_cpo | |
416 endfunc | |
417 | |
418 " Test for the 'q' flag in 'cpo' (joining multiple lines) | |
419 func Test_cpo_q() | |
420 let save_cpo = &cpo | |
421 new | |
422 call setline(1, ['one', 'two', 'three', 'four', 'five']) | |
423 set cpo-=q | |
424 normal gg4J | |
425 call assert_equal(14, col('.')) | |
426 %d | |
427 call setline(1, ['one', 'two', 'three', 'four', 'five']) | |
428 set cpo+=q | |
429 normal gg4J | |
430 call assert_equal(4, col('.')) | |
431 close! | |
432 let &cpo = save_cpo | |
433 endfunc | |
434 | |
435 " Test for the 'r' flag in 'cpo' (redo command with a search motion) | |
436 func Test_cpo_r() | |
437 let save_cpo = &cpo | |
438 new | |
439 call setline(1, repeat(['one two three four'], 2)) | |
440 set cpo-=r | |
441 exe "normal ggc/two\<CR>abc " | |
442 let @/ = 'three' | |
443 normal 2G. | |
444 call assert_equal('abc two three four', getline(2)) | |
445 %d | |
446 call setline(1, repeat(['one two three four'], 2)) | |
447 set cpo+=r | |
448 exe "normal ggc/two\<CR>abc " | |
449 let @/ = 'three' | |
450 normal 2G. | |
451 call assert_equal('abc three four', getline(2)) | |
452 close! | |
453 let &cpo = save_cpo | |
454 endfunc | |
455 | |
456 " Test for the 'R' flag in 'cpo' (clear marks after a filter command) | |
457 func Test_cpo_R() | |
458 CheckUnix | |
459 let save_cpo = &cpo | |
460 new | |
461 call setline(1, ['three', 'one', 'two']) | |
462 set cpo-=R | |
463 3mark r | |
464 %!sort | |
465 call assert_equal(3, line("'r")) | |
466 %d | |
467 call setline(1, ['three', 'one', 'two']) | |
468 set cpo+=R | |
469 3mark r | |
470 %!sort | |
471 call assert_equal(0, line("'r")) | |
472 close! | |
473 let &cpo = save_cpo | |
474 endfunc | |
475 | |
476 " Test for the 'S' flag in 'cpo' (copying buffer options) | |
477 func Test_cpo_S() | |
478 let save_cpo = &cpo | |
479 new Xfile1 | |
480 set noautoindent | |
481 new Xfile2 | |
482 set cpo-=S | |
483 set autoindent | |
484 wincmd p | |
485 call assert_equal(0, &autoindent) | |
486 wincmd p | |
487 call assert_equal(1, &autoindent) | |
488 set cpo+=S | |
489 wincmd p | |
490 call assert_equal(1, &autoindent) | |
491 set noautoindent | |
492 wincmd p | |
493 call assert_equal(0, &autoindent) | |
494 wincmd t | |
495 close! | |
496 close! | |
497 let &cpo = save_cpo | |
498 endfunc | |
499 | |
500 " Test for the 'u' flag in 'cpo' (Vi-compatible undo) | |
501 func Test_cpo_u() | |
502 let save_cpo = &cpo | |
503 new | |
504 set cpo-=u | |
505 exe "normal iabc\<C-G>udef\<C-G>ughi" | |
506 normal uu | |
507 call assert_equal('abc', getline(1)) | |
508 %d | |
509 set cpo+=u | |
510 exe "normal iabc\<C-G>udef\<C-G>ughi" | |
511 normal uu | |
512 call assert_equal('abcdefghi', getline(1)) | |
513 close! | |
514 let &cpo = save_cpo | |
515 endfunc | |
516 | |
517 " Test for the 'x' flag in 'cpo' (Esc on command-line executes command) | |
518 func Test_cpo_x() | |
519 let save_cpo = &cpo | |
520 set cpo-=x | |
521 let i = 1 | |
522 call feedkeys(":let i=10\<Esc>", 'xt') | |
523 call assert_equal(1, i) | |
524 set cpo+=x | |
525 call feedkeys(":let i=10\<Esc>", 'xt') | |
526 call assert_equal(10, i) | |
527 let &cpo = save_cpo | |
528 endfunc | |
529 | |
530 " Test for the 'X' flag in 'cpo' ('R' with a count) | |
531 func Test_cpo_X() | |
532 let save_cpo = &cpo | |
533 new | |
534 call setline(1, 'aaaaaa') | |
535 set cpo-=X | |
536 normal gg4Rx | |
537 call assert_equal('xxxxaa', getline(1)) | |
538 normal ggRy | |
539 normal 4. | |
540 call assert_equal('yyyyaa', getline(1)) | |
541 call setline(1, 'aaaaaa') | |
542 set cpo+=X | |
543 normal gg4Rx | |
544 call assert_equal('xxxxaaaaa', getline(1)) | |
545 normal ggRy | |
546 normal 4. | |
547 call assert_equal('yyyyxxxaaaaa', getline(1)) | |
548 close! | |
549 let &cpo = save_cpo | |
550 endfunc | |
551 | |
552 " Test for the 'y' flag in 'cpo' (repeating a yank command) | |
553 func Test_cpo_y() | |
554 let save_cpo = &cpo | |
555 new | |
556 call setline(1, ['one', 'two']) | |
557 set cpo-=y | |
558 normal ggyy | |
559 normal 2G. | |
560 call assert_equal("one\n", @") | |
561 %d | |
562 call setline(1, ['one', 'two']) | |
563 set cpo+=y | |
564 normal ggyy | |
565 normal 2G. | |
566 call assert_equal("two\n", @") | |
567 close! | |
568 let &cpo = save_cpo | |
569 endfunc | |
570 | |
571 " Test for the 'Z' flag in 'cpo' (write! resets 'readonly') | |
572 func Test_cpo_Z() | |
573 let save_cpo = &cpo | |
574 call writefile([], 'Xfile') | |
575 new Xfile | |
576 setlocal readonly | |
577 set cpo-=Z | |
578 write! | |
579 call assert_equal(0, &readonly) | |
580 set cpo+=Z | |
581 setlocal readonly | |
582 write! | |
583 call assert_equal(1, &readonly) | |
584 close! | |
585 call delete('Xfile') | |
586 let &cpo = save_cpo | |
587 endfunc | |
588 | |
589 " Test for cursor movement with '-' in 'cpoptions' | |
590 func Test_cpo_minus() | |
591 new | |
592 call setline(1, ['foo', 'bar', 'baz']) | |
593 let save_cpo = &cpo | |
594 set cpo+=- | |
595 call assert_beeps('normal 10j') | |
596 call assert_equal(1, line('.')) | |
597 normal G | |
598 call assert_beeps('normal 10k') | |
599 call assert_equal(3, line('.')) | |
600 call assert_fails(10, 'E16:') | |
601 let &cpo = save_cpo | |
602 close! | |
603 endfunc | |
604 | |
605 " Test for displaying dollar when changing text ('$' flag in 'cpoptions') | |
606 func Test_cpo_dollar() | |
607 new | |
608 let g:Line = '' | |
609 func SaveFirstLine() | |
610 let g:Line = Screenline(1) | |
611 return '' | |
612 endfunc | |
613 inoremap <expr> <buffer> <F2> SaveFirstLine() | |
614 call test_override('redraw_flag', 1) | |
615 set cpo+=$ | |
616 call setline(1, 'one two three') | |
617 redraw! | |
618 exe "normal c2w\<F2>vim" | |
619 call assert_equal('one tw$ three', g:Line) | |
620 call assert_equal('vim three', getline(1)) | |
621 set cpo-=$ | |
622 call test_override('ALL', 0) | |
623 delfunc SaveFirstLine | |
624 %bw! | |
625 endfunc | |
626 | |
627 " vim: shiftwidth=2 sts=2 expandtab |