blob: 13fb50b9854ad38ece827482fb9fef16d9bf20ad [file] [log] [blame]
Bram Moolenaar209d3872017-11-16 21:52:51 +01001" Tests for the various 'formatoptions' settings
2func Test_text_format()
3 enew!
4
5 setl noai tw=2 fo=t
6 call append('$', [
7 \ '{',
8 \ ' ',
9 \ '',
10 \ '}'])
11 exe "normal /^{/+1\n0"
12 normal gRa b
13 let lnum = line('.')
14 call assert_equal([
15 \ 'a',
16 \ 'b'], getline(lnum - 1, lnum))
17
18 normal ggdG
19 setl ai tw=2 fo=tw
20 call append('$', [
21 \ '{',
22 \ 'a b ',
23 \ '',
24 \ 'a ',
25 \ '}'])
26 exe "normal /^{/+1\n0"
27 normal gqgqjjllab
28 let lnum = line('.')
29 call assert_equal([
30 \ 'a ',
31 \ 'b ',
32 \ '',
33 \ 'a ',
34 \ 'b'], getline(lnum - 4, lnum))
35
36 normal ggdG
37 setl tw=3 fo=t
38 call append('$', [
39 \ '{',
40 \ "a \<C-A>",
41 \ '}'])
42 exe "normal /^{/+1\n0"
43 exe "normal gqgqo\na \<C-V>\<C-A>"
44 let lnum = line('.')
45 call assert_equal([
46 \ 'a',
47 \ "\<C-A>",
48 \ '',
49 \ 'a',
50 \ "\<C-A>"], getline(lnum - 4, lnum))
51
52 normal ggdG
53 setl tw=2 fo=tcq1 comments=:#
54 call append('$', [
55 \ '{',
56 \ 'a b',
57 \ '#a b',
58 \ '}'])
59 exe "normal /^{/+1\n0"
60 exe "normal gqgqjgqgqo\na b\n#a b"
61 let lnum = line('.')
62 call assert_equal([
63 \ 'a b',
64 \ '#a b',
65 \ '',
66 \ 'a b',
67 \ '#a b'], getline(lnum - 4, lnum))
68
69 normal ggdG
70 setl tw=5 fo=tcn comments=:#
71 call append('$', [
72 \ '{',
73 \ ' 1 a',
74 \ '# 1 a',
75 \ '}'])
76 exe "normal /^{/+1\n0"
77 exe "normal A b\<Esc>jA b"
78 let lnum = line('.')
79 call assert_equal([
80 \ ' 1 a',
81 \ ' b',
82 \ '# 1 a',
83 \ '# b'], getline(lnum - 3, lnum))
84
85 normal ggdG
86 setl tw=5 fo=t2a si
87 call append('$', [
88 \ '{',
89 \ '',
90 \ ' x a',
91 \ ' b',
92 \ ' c',
93 \ '',
94 \ '}'])
95 exe "normal /^{/+3\n0"
96 exe "normal i \<Esc>A_"
97 let lnum = line('.')
98 call assert_equal([
99 \ '',
100 \ ' x a',
101 \ ' b_',
102 \ ' c',
103 \ ''], getline(lnum - 2, lnum + 2))
104
105 normal ggdG
106 setl tw=5 fo=qn comments=:#
107 call append('$', [
108 \ '{',
109 \ '# 1 a b',
110 \ '}'])
111 exe "normal /^{/+1\n5|"
112 normal gwap
113 call assert_equal(5, col('.'))
114 let lnum = line('.')
115 call assert_equal([
116 \ '# 1 a',
117 \ '# b'], getline(lnum, lnum + 1))
118
119 normal ggdG
120 setl tw=5 fo=q2 comments=:#
121 call append('$', [
122 \ '{',
123 \ '# x',
124 \ '# a b',
125 \ '}'])
126 exe "normal /^{/+1\n0"
127 normal gwap
128 let lnum = line('.')
129 call assert_equal([
130 \ '# x a',
131 \ '# b'], getline(lnum, lnum + 1))
132
133 normal ggdG
134 setl tw& fo=a
135 call append('$', [
136 \ '{',
137 \ ' 1aa',
138 \ ' 2bb',
139 \ '}'])
140 exe "normal /^{/+2\n0"
141 normal I^^
142 call assert_equal('{ 1aa ^^2bb }', getline('.'))
143
144 normal ggdG
145 setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
146 call append('$', [
147 \ '/* abc def ghi jkl ',
148 \ ' * mno pqr stu',
149 \ ' */'])
150 exe "normal /mno pqr/\n"
151 normal A vwx yz
152 let lnum = line('.')
153 call assert_equal([
154 \ ' * mno pqr stu ',
155 \ ' * vwx yz',
156 \ ' */'], getline(lnum - 1, lnum + 1))
157
158 normal ggdG
159 setl tw=12 fo=tqnc comments=:#
160 call setline('.', '# 1 xxxxx')
161 normal A foobar
162 call assert_equal([
163 \ '# 1 xxxxx',
164 \ '# foobar'], getline(1, 2))
165
Bram Moolenaarc3c31582019-01-11 22:15:05 +0100166 " Test the 'p' flag for 'formatoptions'
167 " First test without the flag: that it will break "Mr. Feynman" at the space
168 normal ggdG
169 setl tw=28 fo=tcq
170 call setline('.', 'Surely you''re joking, Mr. Feynman!')
171 normal gqq
172 call assert_equal([
173 \ 'Surely you''re joking, Mr.',
174 \ 'Feynman!'], getline(1, 2))
175 " Now test with the flag: that it will push the name with the title onto the
176 " next line
177 normal ggdG
178 setl fo+=p
179 call setline('.', 'Surely you''re joking, Mr. Feynman!')
180 normal gqq
181 call assert_equal([
182 \ 'Surely you''re joking,',
183 \ 'Mr. Feynman!'], getline(1, 2))
184 " Ensure that it will still break if two spaces are entered
185 normal ggdG
186 call setline('.', 'Surely you''re joking, Mr. Feynman!')
187 normal gqq
188 call assert_equal([
189 \ 'Surely you''re joking, Mr.',
190 \ 'Feynman!'], getline(1, 2))
191
Bram Moolenaar209d3872017-11-16 21:52:51 +0100192 setl ai& tw& fo& si& comments&
193 enew!
194endfunc
Bram Moolenaarcada7892018-01-31 19:30:24 +0100195
196" Tests for :right, :center and :left on text with embedded TAB.
197func Test_format_align()
198 enew!
199 set tw=65
200
201 " :left alignment
202 call append(0, [
203 \ " test for :left",
204 \ " a a",
205 \ " fa a",
206 \ " dfa a",
207 \ " sdfa a",
208 \ " asdfa a",
209 \ " xasdfa a",
210 \ "asxxdfa a",
211 \ ])
212 %left
213 call assert_equal([
214 \ "test for :left",
215 \ "a a",
216 \ "fa a",
217 \ "dfa a",
218 \ "sdfa a",
219 \ "asdfa a",
220 \ "xasdfa a",
221 \ "asxxdfa a",
222 \ ""
223 \ ], getline(1, '$'))
224 enew!
225
226 " :center alignment
227 call append(0, [
228 \ " test for :center",
229 \ " a a",
230 \ " fa afd asdf",
231 \ " dfa a",
232 \ " sdfa afd asdf",
233 \ " asdfa a",
234 \ " xasdfa asdfasdfasdfasdfasdf",
235 \ "asxxdfa a"
236 \ ])
237 %center
238 call assert_equal([
239 \ " test for :center",
240 \ " a a",
241 \ " fa afd asdf",
242 \ " dfa a",
243 \ " sdfa afd asdf",
244 \ " asdfa a",
245 \ " xasdfa asdfasdfasdfasdfasdf",
246 \ " asxxdfa a",
247 \ ""
248 \ ], getline(1, '$'))
249 enew!
250
251 " :right alignment
252 call append(0, [
253 \ " test for :right",
254 \ " a a",
255 \ " fa a",
256 \ " dfa a",
257 \ " sdfa a",
258 \ " asdfa a",
259 \ " xasdfa a",
260 \ " asxxdfa a",
261 \ " asxa;ofa a",
262 \ " asdfaqwer a",
263 \ " a ax",
264 \ " fa ax",
265 \ " dfa ax",
266 \ " sdfa ax",
267 \ " asdfa ax",
268 \ " xasdfa ax",
269 \ " asxxdfa ax",
270 \ " asxa;ofa ax",
271 \ " asdfaqwer ax",
272 \ " a axx",
273 \ " fa axx",
274 \ " dfa axx",
275 \ " sdfa axx",
276 \ " asdfa axx",
277 \ " xasdfa axx",
278 \ " asxxdfa axx",
279 \ " asxa;ofa axx",
280 \ " asdfaqwer axx",
281 \ " a axxx",
282 \ " fa axxx",
283 \ " dfa axxx",
284 \ " sdfa axxx",
285 \ " asdfa axxx",
286 \ " xasdfa axxx",
287 \ " asxxdfa axxx",
288 \ " asxa;ofa axxx",
289 \ " asdfaqwer axxx",
290 \ " a axxxo",
291 \ " fa axxxo",
292 \ " dfa axxxo",
293 \ " sdfa axxxo",
294 \ " asdfa axxxo",
295 \ " xasdfa axxxo",
296 \ " asxxdfa axxxo",
297 \ " asxa;ofa axxxo",
298 \ " asdfaqwer axxxo",
299 \ " a axxxoi",
300 \ " fa axxxoi",
301 \ " dfa axxxoi",
302 \ " sdfa axxxoi",
303 \ " asdfa axxxoi",
304 \ " xasdfa axxxoi",
305 \ " asxxdfa axxxoi",
306 \ " asxa;ofa axxxoi",
307 \ " asdfaqwer axxxoi",
308 \ " a axxxoik",
309 \ " fa axxxoik",
310 \ " dfa axxxoik",
311 \ " sdfa axxxoik",
312 \ " asdfa axxxoik",
313 \ " xasdfa axxxoik",
314 \ " asxxdfa axxxoik",
315 \ " asxa;ofa axxxoik",
316 \ " asdfaqwer axxxoik",
317 \ " a axxxoike",
318 \ " fa axxxoike",
319 \ " dfa axxxoike",
320 \ " sdfa axxxoike",
321 \ " asdfa axxxoike",
322 \ " xasdfa axxxoike",
323 \ " asxxdfa axxxoike",
324 \ " asxa;ofa axxxoike",
325 \ " asdfaqwer axxxoike",
326 \ " a axxxoikey",
327 \ " fa axxxoikey",
328 \ " dfa axxxoikey",
329 \ " sdfa axxxoikey",
330 \ " asdfa axxxoikey",
331 \ " xasdfa axxxoikey",
332 \ " asxxdfa axxxoikey",
333 \ " asxa;ofa axxxoikey",
334 \ " asdfaqwer axxxoikey",
335 \ ])
336 %right
337 call assert_equal([
338 \ "\t\t\t\t test for :right",
339 \ "\t\t\t\t a a",
340 \ "\t\t\t\t fa a",
341 \ "\t\t\t\t dfa a",
342 \ "\t\t\t\t sdfa a",
343 \ "\t\t\t\t asdfa a",
344 \ "\t\t\t\t xasdfa a",
345 \ "\t\t\t\t asxxdfa a",
346 \ "\t\t\t\t asxa;ofa a",
347 \ "\t\t\t\t asdfaqwer a",
348 \ "\t\t\t\t a ax",
349 \ "\t\t\t\t fa ax",
350 \ "\t\t\t\t dfa ax",
351 \ "\t\t\t\t sdfa ax",
352 \ "\t\t\t\t asdfa ax",
353 \ "\t\t\t\t xasdfa ax",
354 \ "\t\t\t\t asxxdfa ax",
355 \ "\t\t\t\t asxa;ofa ax",
356 \ "\t\t\t\t asdfaqwer ax",
357 \ "\t\t\t\t a axx",
358 \ "\t\t\t\t fa axx",
359 \ "\t\t\t\t dfa axx",
360 \ "\t\t\t\t sdfa axx",
361 \ "\t\t\t\t asdfa axx",
362 \ "\t\t\t\t xasdfa axx",
363 \ "\t\t\t\t asxxdfa axx",
364 \ "\t\t\t\t asxa;ofa axx",
365 \ "\t\t\t\t asdfaqwer axx",
366 \ "\t\t\t\t a axxx",
367 \ "\t\t\t\t fa axxx",
368 \ "\t\t\t\t dfa axxx",
369 \ "\t\t\t\t sdfa axxx",
370 \ "\t\t\t\t asdfa axxx",
371 \ "\t\t\t\t xasdfa axxx",
372 \ "\t\t\t\t asxxdfa axxx",
373 \ "\t\t\t\t asxa;ofa axxx",
374 \ "\t\t\t\t asdfaqwer axxx",
375 \ "\t\t\t\t a axxxo",
376 \ "\t\t\t\t fa axxxo",
377 \ "\t\t\t\t dfa axxxo",
378 \ "\t\t\t\t sdfa axxxo",
379 \ "\t\t\t\t asdfa axxxo",
380 \ "\t\t\t\t xasdfa axxxo",
381 \ "\t\t\t\t asxxdfa axxxo",
382 \ "\t\t\t\t asxa;ofa axxxo",
383 \ "\t\t\t\t asdfaqwer axxxo",
384 \ "\t\t\t\t a axxxoi",
385 \ "\t\t\t\t fa axxxoi",
386 \ "\t\t\t\t dfa axxxoi",
387 \ "\t\t\t\t sdfa axxxoi",
388 \ "\t\t\t\t asdfa axxxoi",
389 \ "\t\t\t\t xasdfa axxxoi",
390 \ "\t\t\t\t asxxdfa axxxoi",
391 \ "\t\t\t\t asxa;ofa axxxoi",
392 \ "\t\t\t\t asdfaqwer axxxoi",
393 \ "\t\t\t\t a axxxoik",
394 \ "\t\t\t\t fa axxxoik",
395 \ "\t\t\t\t dfa axxxoik",
396 \ "\t\t\t\t sdfa axxxoik",
397 \ "\t\t\t\t asdfa axxxoik",
398 \ "\t\t\t\t xasdfa axxxoik",
399 \ "\t\t\t\t asxxdfa axxxoik",
400 \ "\t\t\t\t asxa;ofa axxxoik",
401 \ "\t\t\t\t asdfaqwer axxxoik",
402 \ "\t\t\t\t a axxxoike",
403 \ "\t\t\t\t fa axxxoike",
404 \ "\t\t\t\t dfa axxxoike",
405 \ "\t\t\t\t sdfa axxxoike",
406 \ "\t\t\t\t asdfa axxxoike",
407 \ "\t\t\t\t xasdfa axxxoike",
408 \ "\t\t\t\t asxxdfa axxxoike",
409 \ "\t\t\t\t asxa;ofa axxxoike",
410 \ "\t\t\t\t asdfaqwer axxxoike",
411 \ "\t\t\t\t a axxxoikey",
412 \ "\t\t\t\t fa axxxoikey",
413 \ "\t\t\t\t dfa axxxoikey",
414 \ "\t\t\t\t sdfa axxxoikey",
415 \ "\t\t\t\t asdfa axxxoikey",
416 \ "\t\t\t\t xasdfa axxxoikey",
417 \ "\t\t\t\t asxxdfa axxxoikey",
418 \ "\t\t\t\t asxa;ofa axxxoikey",
419 \ "\t\t\t\t asdfaqwer axxxoikey",
420 \ ""
421 \ ], getline(1, '$'))
422 enew!
423
424 set tw&
425endfunc
426
427" Test formatting a paragraph.
428func Test_format_para()
429 enew!
430 set fo+=tcroql tw=72
431
432 call append(0, [
433 \ "xxxxx xx xxxxxx ",
434 \ "xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx",
435 \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx",
436 \ "xx xxxxxxx. xxxx xxxx.",
437 \ "",
438 \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx",
439 \ "> xxxxxx xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx"
440 \ ])
441 exe "normal /xxxxxxxx$\<CR>"
442 normal 0gq6kk
443 call assert_equal([
444 \ "xxxxx xx xxxxxx xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx",
445 \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx xx xxxxxxx.",
446 \ "xxxx xxxx.",
447 \ "",
448 \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx xxxxxx",
449 \ "> xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx",
450 \ ""
451 \ ], getline(1, '$'))
452
453 set fo& tw&
454 enew!
455endfunc
456
457" Test undo after ":%s" and formatting.
458func Test_format_undo()
459 enew!
460 map gg :.,.+2s/^/x/<CR>kk:set tw=3<CR>gqq
461
462 call append(0, [
463 \ "aa aa aa aa",
464 \ "bb bb bb bb",
465 \ "cc cc cc cc"
466 \ ])
467 " undo/redo here to make the next undo only work on the following changes
468 exe "normal i\<C-G>u"
469 call cursor(1,1)
470 normal ggu
471 call assert_equal([
472 \ "aa aa aa aa",
473 \ "bb bb bb bb",
474 \ "cc cc cc cc",
475 \ ""
476 \ ], getline(1, '$'))
477
478 unmap gg
Bram Moolenaare1e714e2018-12-31 23:58:24 +0100479 set tw&
Bram Moolenaarcada7892018-01-31 19:30:24 +0100480 enew!
481endfunc
Bram Moolenaare1e714e2018-12-31 23:58:24 +0100482
483func Test_format_list_auto()
484 new
485 call setline(1, ['1. abc', '2. def', '3. ghi'])
486 set fo=tan ai bs=2
487 call feedkeys("3G0lli\<BS>\<BS>x\<Esc>", 'tx')
488 call assert_equal('2. defx ghi', getline(2))
489 bwipe!
490 set fo& ai& bs&
491endfunc