1" 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 166 " 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 192 setl ai& tw& fo& si& comments& 193 enew! 194endfunc 195 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 479 set tw& 480 enew! 481endfunc 482 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 492