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 setl ai& tw& fo& si& comments& 167 enew! 168endfunc 169 170" Tests for :right, :center and :left on text with embedded TAB. 171func Test_format_align() 172 enew! 173 set tw=65 174 175 " :left alignment 176 call append(0, [ 177 \ " test for :left", 178 \ " a a", 179 \ " fa a", 180 \ " dfa a", 181 \ " sdfa a", 182 \ " asdfa a", 183 \ " xasdfa a", 184 \ "asxxdfa a", 185 \ ]) 186 %left 187 call assert_equal([ 188 \ "test for :left", 189 \ "a a", 190 \ "fa a", 191 \ "dfa a", 192 \ "sdfa a", 193 \ "asdfa a", 194 \ "xasdfa a", 195 \ "asxxdfa a", 196 \ "" 197 \ ], getline(1, '$')) 198 enew! 199 200 " :center alignment 201 call append(0, [ 202 \ " test for :center", 203 \ " a a", 204 \ " fa afd asdf", 205 \ " dfa a", 206 \ " sdfa afd asdf", 207 \ " asdfa a", 208 \ " xasdfa asdfasdfasdfasdfasdf", 209 \ "asxxdfa a" 210 \ ]) 211 %center 212 call assert_equal([ 213 \ " test for :center", 214 \ " a a", 215 \ " fa afd asdf", 216 \ " dfa a", 217 \ " sdfa afd asdf", 218 \ " asdfa a", 219 \ " xasdfa asdfasdfasdfasdfasdf", 220 \ " asxxdfa a", 221 \ "" 222 \ ], getline(1, '$')) 223 enew! 224 225 " :right alignment 226 call append(0, [ 227 \ " test for :right", 228 \ " a a", 229 \ " fa a", 230 \ " dfa a", 231 \ " sdfa a", 232 \ " asdfa a", 233 \ " xasdfa a", 234 \ " asxxdfa a", 235 \ " asxa;ofa a", 236 \ " asdfaqwer a", 237 \ " a ax", 238 \ " fa ax", 239 \ " dfa ax", 240 \ " sdfa ax", 241 \ " asdfa ax", 242 \ " xasdfa ax", 243 \ " asxxdfa ax", 244 \ " asxa;ofa ax", 245 \ " asdfaqwer ax", 246 \ " a axx", 247 \ " fa axx", 248 \ " dfa axx", 249 \ " sdfa axx", 250 \ " asdfa axx", 251 \ " xasdfa axx", 252 \ " asxxdfa axx", 253 \ " asxa;ofa axx", 254 \ " asdfaqwer axx", 255 \ " a axxx", 256 \ " fa axxx", 257 \ " dfa axxx", 258 \ " sdfa axxx", 259 \ " asdfa axxx", 260 \ " xasdfa axxx", 261 \ " asxxdfa axxx", 262 \ " asxa;ofa axxx", 263 \ " asdfaqwer axxx", 264 \ " a axxxo", 265 \ " fa axxxo", 266 \ " dfa axxxo", 267 \ " sdfa axxxo", 268 \ " asdfa axxxo", 269 \ " xasdfa axxxo", 270 \ " asxxdfa axxxo", 271 \ " asxa;ofa axxxo", 272 \ " asdfaqwer axxxo", 273 \ " a axxxoi", 274 \ " fa axxxoi", 275 \ " dfa axxxoi", 276 \ " sdfa axxxoi", 277 \ " asdfa axxxoi", 278 \ " xasdfa axxxoi", 279 \ " asxxdfa axxxoi", 280 \ " asxa;ofa axxxoi", 281 \ " asdfaqwer axxxoi", 282 \ " a axxxoik", 283 \ " fa axxxoik", 284 \ " dfa axxxoik", 285 \ " sdfa axxxoik", 286 \ " asdfa axxxoik", 287 \ " xasdfa axxxoik", 288 \ " asxxdfa axxxoik", 289 \ " asxa;ofa axxxoik", 290 \ " asdfaqwer axxxoik", 291 \ " a axxxoike", 292 \ " fa axxxoike", 293 \ " dfa axxxoike", 294 \ " sdfa axxxoike", 295 \ " asdfa axxxoike", 296 \ " xasdfa axxxoike", 297 \ " asxxdfa axxxoike", 298 \ " asxa;ofa axxxoike", 299 \ " asdfaqwer axxxoike", 300 \ " a axxxoikey", 301 \ " fa axxxoikey", 302 \ " dfa axxxoikey", 303 \ " sdfa axxxoikey", 304 \ " asdfa axxxoikey", 305 \ " xasdfa axxxoikey", 306 \ " asxxdfa axxxoikey", 307 \ " asxa;ofa axxxoikey", 308 \ " asdfaqwer axxxoikey", 309 \ ]) 310 %right 311 call assert_equal([ 312 \ "\t\t\t\t test for :right", 313 \ "\t\t\t\t a a", 314 \ "\t\t\t\t fa a", 315 \ "\t\t\t\t dfa a", 316 \ "\t\t\t\t sdfa a", 317 \ "\t\t\t\t asdfa a", 318 \ "\t\t\t\t xasdfa a", 319 \ "\t\t\t\t asxxdfa a", 320 \ "\t\t\t\t asxa;ofa a", 321 \ "\t\t\t\t asdfaqwer a", 322 \ "\t\t\t\t a ax", 323 \ "\t\t\t\t fa ax", 324 \ "\t\t\t\t dfa ax", 325 \ "\t\t\t\t sdfa ax", 326 \ "\t\t\t\t asdfa ax", 327 \ "\t\t\t\t xasdfa ax", 328 \ "\t\t\t\t asxxdfa ax", 329 \ "\t\t\t\t asxa;ofa ax", 330 \ "\t\t\t\t asdfaqwer ax", 331 \ "\t\t\t\t a axx", 332 \ "\t\t\t\t fa axx", 333 \ "\t\t\t\t dfa axx", 334 \ "\t\t\t\t sdfa axx", 335 \ "\t\t\t\t asdfa axx", 336 \ "\t\t\t\t xasdfa axx", 337 \ "\t\t\t\t asxxdfa axx", 338 \ "\t\t\t\t asxa;ofa axx", 339 \ "\t\t\t\t asdfaqwer axx", 340 \ "\t\t\t\t a axxx", 341 \ "\t\t\t\t fa axxx", 342 \ "\t\t\t\t dfa axxx", 343 \ "\t\t\t\t sdfa axxx", 344 \ "\t\t\t\t asdfa axxx", 345 \ "\t\t\t\t xasdfa axxx", 346 \ "\t\t\t\t asxxdfa axxx", 347 \ "\t\t\t\t asxa;ofa axxx", 348 \ "\t\t\t\t asdfaqwer axxx", 349 \ "\t\t\t\t a axxxo", 350 \ "\t\t\t\t fa axxxo", 351 \ "\t\t\t\t dfa axxxo", 352 \ "\t\t\t\t sdfa axxxo", 353 \ "\t\t\t\t asdfa axxxo", 354 \ "\t\t\t\t xasdfa axxxo", 355 \ "\t\t\t\t asxxdfa axxxo", 356 \ "\t\t\t\t asxa;ofa axxxo", 357 \ "\t\t\t\t asdfaqwer axxxo", 358 \ "\t\t\t\t a axxxoi", 359 \ "\t\t\t\t fa axxxoi", 360 \ "\t\t\t\t dfa axxxoi", 361 \ "\t\t\t\t sdfa axxxoi", 362 \ "\t\t\t\t asdfa axxxoi", 363 \ "\t\t\t\t xasdfa axxxoi", 364 \ "\t\t\t\t asxxdfa axxxoi", 365 \ "\t\t\t\t asxa;ofa axxxoi", 366 \ "\t\t\t\t asdfaqwer axxxoi", 367 \ "\t\t\t\t a axxxoik", 368 \ "\t\t\t\t fa axxxoik", 369 \ "\t\t\t\t dfa axxxoik", 370 \ "\t\t\t\t sdfa axxxoik", 371 \ "\t\t\t\t asdfa axxxoik", 372 \ "\t\t\t\t xasdfa axxxoik", 373 \ "\t\t\t\t asxxdfa axxxoik", 374 \ "\t\t\t\t asxa;ofa axxxoik", 375 \ "\t\t\t\t asdfaqwer axxxoik", 376 \ "\t\t\t\t a axxxoike", 377 \ "\t\t\t\t fa axxxoike", 378 \ "\t\t\t\t dfa axxxoike", 379 \ "\t\t\t\t sdfa axxxoike", 380 \ "\t\t\t\t asdfa axxxoike", 381 \ "\t\t\t\t xasdfa axxxoike", 382 \ "\t\t\t\t asxxdfa axxxoike", 383 \ "\t\t\t\t asxa;ofa axxxoike", 384 \ "\t\t\t\t asdfaqwer axxxoike", 385 \ "\t\t\t\t a axxxoikey", 386 \ "\t\t\t\t fa axxxoikey", 387 \ "\t\t\t\t dfa axxxoikey", 388 \ "\t\t\t\t sdfa axxxoikey", 389 \ "\t\t\t\t asdfa axxxoikey", 390 \ "\t\t\t\t xasdfa axxxoikey", 391 \ "\t\t\t\t asxxdfa axxxoikey", 392 \ "\t\t\t\t asxa;ofa axxxoikey", 393 \ "\t\t\t\t asdfaqwer axxxoikey", 394 \ "" 395 \ ], getline(1, '$')) 396 enew! 397 398 set tw& 399endfunc 400 401" Test formatting a paragraph. 402func Test_format_para() 403 enew! 404 set fo+=tcroql tw=72 405 406 call append(0, [ 407 \ "xxxxx xx xxxxxx ", 408 \ "xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx", 409 \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx", 410 \ "xx xxxxxxx. xxxx xxxx.", 411 \ "", 412 \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx", 413 \ "> xxxxxx xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx" 414 \ ]) 415 exe "normal /xxxxxxxx$\<CR>" 416 normal 0gq6kk 417 call assert_equal([ 418 \ "xxxxx xx xxxxxx xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx", 419 \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx xx xxxxxxx.", 420 \ "xxxx xxxx.", 421 \ "", 422 \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx xxxxxx", 423 \ "> xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx", 424 \ "" 425 \ ], getline(1, '$')) 426 427 set fo& tw& 428 enew! 429endfunc 430 431" Test undo after ":%s" and formatting. 432func Test_format_undo() 433 enew! 434 map gg :.,.+2s/^/x/<CR>kk:set tw=3<CR>gqq 435 436 call append(0, [ 437 \ "aa aa aa aa", 438 \ "bb bb bb bb", 439 \ "cc cc cc cc" 440 \ ]) 441 " undo/redo here to make the next undo only work on the following changes 442 exe "normal i\<C-G>u" 443 call cursor(1,1) 444 normal ggu 445 call assert_equal([ 446 \ "aa aa aa aa", 447 \ "bb bb bb bb", 448 \ "cc cc cc cc", 449 \ "" 450 \ ], getline(1, '$')) 451 452 unmap gg 453 set tw& 454 enew! 455endfunc 456 457func Test_format_list_auto() 458 new 459 call setline(1, ['1. abc', '2. def', '3. ghi']) 460 set fo=tan ai bs=2 461 call feedkeys("3G0lli\<BS>\<BS>x\<Esc>", 'tx') 462 call assert_equal('2. defx ghi', getline(2)) 463 bwipe! 464 set fo& ai& bs& 465endfunc 466