1209d3874SBram Moolenaar" Tests for the various 'formatoptions' settings 2396b7c78SBram Moolenaar 3396b7c78SBram Moolenaarsource check.vim 4396b7c78SBram Moolenaar 5209d3874SBram Moolenaarfunc Test_text_format() 6209d3874SBram Moolenaar enew! 7209d3874SBram Moolenaar 8209d3874SBram Moolenaar setl noai tw=2 fo=t 9209d3874SBram Moolenaar call append('$', [ 10209d3874SBram Moolenaar \ '{', 11209d3874SBram Moolenaar \ ' ', 12209d3874SBram Moolenaar \ '', 13209d3874SBram Moolenaar \ '}']) 14209d3874SBram Moolenaar exe "normal /^{/+1\n0" 15209d3874SBram Moolenaar normal gRa b 16209d3874SBram Moolenaar let lnum = line('.') 17209d3874SBram Moolenaar call assert_equal([ 18209d3874SBram Moolenaar \ 'a', 19209d3874SBram Moolenaar \ 'b'], getline(lnum - 1, lnum)) 20209d3874SBram Moolenaar 21209d3874SBram Moolenaar normal ggdG 22209d3874SBram Moolenaar setl ai tw=2 fo=tw 23209d3874SBram Moolenaar call append('$', [ 24209d3874SBram Moolenaar \ '{', 25209d3874SBram Moolenaar \ 'a b ', 26209d3874SBram Moolenaar \ '', 27209d3874SBram Moolenaar \ 'a ', 28209d3874SBram Moolenaar \ '}']) 29209d3874SBram Moolenaar exe "normal /^{/+1\n0" 30209d3874SBram Moolenaar normal gqgqjjllab 31209d3874SBram Moolenaar let lnum = line('.') 32209d3874SBram Moolenaar call assert_equal([ 33209d3874SBram Moolenaar \ 'a ', 34209d3874SBram Moolenaar \ 'b ', 35209d3874SBram Moolenaar \ '', 36209d3874SBram Moolenaar \ 'a ', 37209d3874SBram Moolenaar \ 'b'], getline(lnum - 4, lnum)) 38209d3874SBram Moolenaar 39209d3874SBram Moolenaar normal ggdG 40209d3874SBram Moolenaar setl tw=3 fo=t 41209d3874SBram Moolenaar call append('$', [ 42209d3874SBram Moolenaar \ '{', 43209d3874SBram Moolenaar \ "a \<C-A>", 44209d3874SBram Moolenaar \ '}']) 45209d3874SBram Moolenaar exe "normal /^{/+1\n0" 46209d3874SBram Moolenaar exe "normal gqgqo\na \<C-V>\<C-A>" 47209d3874SBram Moolenaar let lnum = line('.') 48209d3874SBram Moolenaar call assert_equal([ 49209d3874SBram Moolenaar \ 'a', 50209d3874SBram Moolenaar \ "\<C-A>", 51209d3874SBram Moolenaar \ '', 52209d3874SBram Moolenaar \ 'a', 53209d3874SBram Moolenaar \ "\<C-A>"], getline(lnum - 4, lnum)) 54209d3874SBram Moolenaar 55209d3874SBram Moolenaar normal ggdG 56209d3874SBram Moolenaar setl tw=2 fo=tcq1 comments=:# 57209d3874SBram Moolenaar call append('$', [ 58209d3874SBram Moolenaar \ '{', 59209d3874SBram Moolenaar \ 'a b', 60209d3874SBram Moolenaar \ '#a b', 61209d3874SBram Moolenaar \ '}']) 62209d3874SBram Moolenaar exe "normal /^{/+1\n0" 63209d3874SBram Moolenaar exe "normal gqgqjgqgqo\na b\n#a b" 64209d3874SBram Moolenaar let lnum = line('.') 65209d3874SBram Moolenaar call assert_equal([ 66209d3874SBram Moolenaar \ 'a b', 67209d3874SBram Moolenaar \ '#a b', 68209d3874SBram Moolenaar \ '', 69209d3874SBram Moolenaar \ 'a b', 70209d3874SBram Moolenaar \ '#a b'], getline(lnum - 4, lnum)) 71209d3874SBram Moolenaar 72209d3874SBram Moolenaar normal ggdG 73209d3874SBram Moolenaar setl tw=5 fo=tcn comments=:# 74209d3874SBram Moolenaar call append('$', [ 75209d3874SBram Moolenaar \ '{', 76209d3874SBram Moolenaar \ ' 1 a', 77209d3874SBram Moolenaar \ '# 1 a', 78209d3874SBram Moolenaar \ '}']) 79209d3874SBram Moolenaar exe "normal /^{/+1\n0" 80209d3874SBram Moolenaar exe "normal A b\<Esc>jA b" 81209d3874SBram Moolenaar let lnum = line('.') 82209d3874SBram Moolenaar call assert_equal([ 83209d3874SBram Moolenaar \ ' 1 a', 84209d3874SBram Moolenaar \ ' b', 85209d3874SBram Moolenaar \ '# 1 a', 86209d3874SBram Moolenaar \ '# b'], getline(lnum - 3, lnum)) 87209d3874SBram Moolenaar 88209d3874SBram Moolenaar normal ggdG 89209d3874SBram Moolenaar setl tw=5 fo=t2a si 90209d3874SBram Moolenaar call append('$', [ 91209d3874SBram Moolenaar \ '{', 92209d3874SBram Moolenaar \ '', 93209d3874SBram Moolenaar \ ' x a', 94209d3874SBram Moolenaar \ ' b', 95209d3874SBram Moolenaar \ ' c', 96209d3874SBram Moolenaar \ '', 97209d3874SBram Moolenaar \ '}']) 98209d3874SBram Moolenaar exe "normal /^{/+3\n0" 99209d3874SBram Moolenaar exe "normal i \<Esc>A_" 100209d3874SBram Moolenaar let lnum = line('.') 101209d3874SBram Moolenaar call assert_equal([ 102209d3874SBram Moolenaar \ '', 103209d3874SBram Moolenaar \ ' x a', 104209d3874SBram Moolenaar \ ' b_', 105209d3874SBram Moolenaar \ ' c', 106209d3874SBram Moolenaar \ ''], getline(lnum - 2, lnum + 2)) 107209d3874SBram Moolenaar 108209d3874SBram Moolenaar normal ggdG 109209d3874SBram Moolenaar setl tw=5 fo=qn comments=:# 110209d3874SBram Moolenaar call append('$', [ 111209d3874SBram Moolenaar \ '{', 112209d3874SBram Moolenaar \ '# 1 a b', 113209d3874SBram Moolenaar \ '}']) 114209d3874SBram Moolenaar exe "normal /^{/+1\n5|" 115209d3874SBram Moolenaar normal gwap 116209d3874SBram Moolenaar call assert_equal(5, col('.')) 117209d3874SBram Moolenaar let lnum = line('.') 118209d3874SBram Moolenaar call assert_equal([ 119209d3874SBram Moolenaar \ '# 1 a', 120209d3874SBram Moolenaar \ '# b'], getline(lnum, lnum + 1)) 121209d3874SBram Moolenaar 122209d3874SBram Moolenaar normal ggdG 123209d3874SBram Moolenaar setl tw=5 fo=q2 comments=:# 124209d3874SBram Moolenaar call append('$', [ 125209d3874SBram Moolenaar \ '{', 126209d3874SBram Moolenaar \ '# x', 127209d3874SBram Moolenaar \ '# a b', 128209d3874SBram Moolenaar \ '}']) 129209d3874SBram Moolenaar exe "normal /^{/+1\n0" 130209d3874SBram Moolenaar normal gwap 131209d3874SBram Moolenaar let lnum = line('.') 132209d3874SBram Moolenaar call assert_equal([ 133209d3874SBram Moolenaar \ '# x a', 134209d3874SBram Moolenaar \ '# b'], getline(lnum, lnum + 1)) 135209d3874SBram Moolenaar 136209d3874SBram Moolenaar normal ggdG 137209d3874SBram Moolenaar setl tw& fo=a 138209d3874SBram Moolenaar call append('$', [ 139209d3874SBram Moolenaar \ '{', 140209d3874SBram Moolenaar \ ' 1aa', 141209d3874SBram Moolenaar \ ' 2bb', 142209d3874SBram Moolenaar \ '}']) 143209d3874SBram Moolenaar exe "normal /^{/+2\n0" 144209d3874SBram Moolenaar normal I^^ 145209d3874SBram Moolenaar call assert_equal('{ 1aa ^^2bb }', getline('.')) 146209d3874SBram Moolenaar 147209d3874SBram Moolenaar normal ggdG 148209d3874SBram Moolenaar setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/ 149209d3874SBram Moolenaar call append('$', [ 150209d3874SBram Moolenaar \ '/* abc def ghi jkl ', 151209d3874SBram Moolenaar \ ' * mno pqr stu', 152209d3874SBram Moolenaar \ ' */']) 153209d3874SBram Moolenaar exe "normal /mno pqr/\n" 154209d3874SBram Moolenaar normal A vwx yz 155209d3874SBram Moolenaar let lnum = line('.') 156209d3874SBram Moolenaar call assert_equal([ 157209d3874SBram Moolenaar \ ' * mno pqr stu ', 158209d3874SBram Moolenaar \ ' * vwx yz', 159209d3874SBram Moolenaar \ ' */'], getline(lnum - 1, lnum + 1)) 160209d3874SBram Moolenaar 161209d3874SBram Moolenaar normal ggdG 162209d3874SBram Moolenaar setl tw=12 fo=tqnc comments=:# 163209d3874SBram Moolenaar call setline('.', '# 1 xxxxx') 164209d3874SBram Moolenaar normal A foobar 165209d3874SBram Moolenaar call assert_equal([ 166209d3874SBram Moolenaar \ '# 1 xxxxx', 167209d3874SBram Moolenaar \ '# foobar'], getline(1, 2)) 168209d3874SBram Moolenaar 169c3c31587SBram Moolenaar " Test the 'p' flag for 'formatoptions' 170c3c31587SBram Moolenaar " First test without the flag: that it will break "Mr. Feynman" at the space 171c3c31587SBram Moolenaar normal ggdG 172c3c31587SBram Moolenaar setl tw=28 fo=tcq 173c3c31587SBram Moolenaar call setline('.', 'Surely you''re joking, Mr. Feynman!') 174c3c31587SBram Moolenaar normal gqq 175c3c31587SBram Moolenaar call assert_equal([ 176c3c31587SBram Moolenaar \ 'Surely you''re joking, Mr.', 177c3c31587SBram Moolenaar \ 'Feynman!'], getline(1, 2)) 178c3c31587SBram Moolenaar " Now test with the flag: that it will push the name with the title onto the 179c3c31587SBram Moolenaar " next line 180c3c31587SBram Moolenaar normal ggdG 181c3c31587SBram Moolenaar setl fo+=p 182c3c31587SBram Moolenaar call setline('.', 'Surely you''re joking, Mr. Feynman!') 183c3c31587SBram Moolenaar normal gqq 184c3c31587SBram Moolenaar call assert_equal([ 185c3c31587SBram Moolenaar \ 'Surely you''re joking,', 186c3c31587SBram Moolenaar \ 'Mr. Feynman!'], getline(1, 2)) 187c3c31587SBram Moolenaar " Ensure that it will still break if two spaces are entered 188c3c31587SBram Moolenaar normal ggdG 189c3c31587SBram Moolenaar call setline('.', 'Surely you''re joking, Mr. Feynman!') 190c3c31587SBram Moolenaar normal gqq 191c3c31587SBram Moolenaar call assert_equal([ 192c3c31587SBram Moolenaar \ 'Surely you''re joking, Mr.', 193c3c31587SBram Moolenaar \ 'Feynman!'], getline(1, 2)) 194c3c31587SBram Moolenaar 195209d3874SBram Moolenaar setl ai& tw& fo& si& comments& 196209d3874SBram Moolenaar enew! 197209d3874SBram Moolenaarendfunc 198cada7897SBram Moolenaar 199cada7897SBram Moolenaar" Tests for :right, :center and :left on text with embedded TAB. 200cada7897SBram Moolenaarfunc Test_format_align() 201cada7897SBram Moolenaar enew! 202cada7897SBram Moolenaar set tw=65 203cada7897SBram Moolenaar 204cada7897SBram Moolenaar " :left alignment 205cada7897SBram Moolenaar call append(0, [ 206cada7897SBram Moolenaar \ " test for :left", 207cada7897SBram Moolenaar \ " a a", 208cada7897SBram Moolenaar \ " fa a", 209cada7897SBram Moolenaar \ " dfa a", 210cada7897SBram Moolenaar \ " sdfa a", 211cada7897SBram Moolenaar \ " asdfa a", 212cada7897SBram Moolenaar \ " xasdfa a", 213cada7897SBram Moolenaar \ "asxxdfa a", 214cada7897SBram Moolenaar \ ]) 215cada7897SBram Moolenaar %left 216cada7897SBram Moolenaar call assert_equal([ 217cada7897SBram Moolenaar \ "test for :left", 218cada7897SBram Moolenaar \ "a a", 219cada7897SBram Moolenaar \ "fa a", 220cada7897SBram Moolenaar \ "dfa a", 221cada7897SBram Moolenaar \ "sdfa a", 222cada7897SBram Moolenaar \ "asdfa a", 223cada7897SBram Moolenaar \ "xasdfa a", 224cada7897SBram Moolenaar \ "asxxdfa a", 225cada7897SBram Moolenaar \ "" 226cada7897SBram Moolenaar \ ], getline(1, '$')) 227cada7897SBram Moolenaar enew! 228cada7897SBram Moolenaar 229cada7897SBram Moolenaar " :center alignment 230cada7897SBram Moolenaar call append(0, [ 231cada7897SBram Moolenaar \ " test for :center", 232cada7897SBram Moolenaar \ " a a", 233cada7897SBram Moolenaar \ " fa afd asdf", 234cada7897SBram Moolenaar \ " dfa a", 235cada7897SBram Moolenaar \ " sdfa afd asdf", 236cada7897SBram Moolenaar \ " asdfa a", 237cada7897SBram Moolenaar \ " xasdfa asdfasdfasdfasdfasdf", 238cada7897SBram Moolenaar \ "asxxdfa a" 239cada7897SBram Moolenaar \ ]) 240cada7897SBram Moolenaar %center 241cada7897SBram Moolenaar call assert_equal([ 242cada7897SBram Moolenaar \ " test for :center", 243cada7897SBram Moolenaar \ " a a", 244cada7897SBram Moolenaar \ " fa afd asdf", 245cada7897SBram Moolenaar \ " dfa a", 246cada7897SBram Moolenaar \ " sdfa afd asdf", 247cada7897SBram Moolenaar \ " asdfa a", 248cada7897SBram Moolenaar \ " xasdfa asdfasdfasdfasdfasdf", 249cada7897SBram Moolenaar \ " asxxdfa a", 250cada7897SBram Moolenaar \ "" 251cada7897SBram Moolenaar \ ], getline(1, '$')) 252cada7897SBram Moolenaar enew! 253cada7897SBram Moolenaar 254cada7897SBram Moolenaar " :right alignment 255cada7897SBram Moolenaar call append(0, [ 256cada7897SBram Moolenaar \ " test for :right", 257cada7897SBram Moolenaar \ " a a", 258cada7897SBram Moolenaar \ " fa a", 259cada7897SBram Moolenaar \ " dfa a", 260cada7897SBram Moolenaar \ " sdfa a", 261cada7897SBram Moolenaar \ " asdfa a", 262cada7897SBram Moolenaar \ " xasdfa a", 263cada7897SBram Moolenaar \ " asxxdfa a", 264cada7897SBram Moolenaar \ " asxa;ofa a", 265cada7897SBram Moolenaar \ " asdfaqwer a", 266cada7897SBram Moolenaar \ " a ax", 267cada7897SBram Moolenaar \ " fa ax", 268cada7897SBram Moolenaar \ " dfa ax", 269cada7897SBram Moolenaar \ " sdfa ax", 270cada7897SBram Moolenaar \ " asdfa ax", 271cada7897SBram Moolenaar \ " xasdfa ax", 272cada7897SBram Moolenaar \ " asxxdfa ax", 273cada7897SBram Moolenaar \ " asxa;ofa ax", 274cada7897SBram Moolenaar \ " asdfaqwer ax", 275cada7897SBram Moolenaar \ " a axx", 276cada7897SBram Moolenaar \ " fa axx", 277cada7897SBram Moolenaar \ " dfa axx", 278cada7897SBram Moolenaar \ " sdfa axx", 279cada7897SBram Moolenaar \ " asdfa axx", 280cada7897SBram Moolenaar \ " xasdfa axx", 281cada7897SBram Moolenaar \ " asxxdfa axx", 282cada7897SBram Moolenaar \ " asxa;ofa axx", 283cada7897SBram Moolenaar \ " asdfaqwer axx", 284cada7897SBram Moolenaar \ " a axxx", 285cada7897SBram Moolenaar \ " fa axxx", 286cada7897SBram Moolenaar \ " dfa axxx", 287cada7897SBram Moolenaar \ " sdfa axxx", 288cada7897SBram Moolenaar \ " asdfa axxx", 289cada7897SBram Moolenaar \ " xasdfa axxx", 290cada7897SBram Moolenaar \ " asxxdfa axxx", 291cada7897SBram Moolenaar \ " asxa;ofa axxx", 292cada7897SBram Moolenaar \ " asdfaqwer axxx", 293cada7897SBram Moolenaar \ " a axxxo", 294cada7897SBram Moolenaar \ " fa axxxo", 295cada7897SBram Moolenaar \ " dfa axxxo", 296cada7897SBram Moolenaar \ " sdfa axxxo", 297cada7897SBram Moolenaar \ " asdfa axxxo", 298cada7897SBram Moolenaar \ " xasdfa axxxo", 299cada7897SBram Moolenaar \ " asxxdfa axxxo", 300cada7897SBram Moolenaar \ " asxa;ofa axxxo", 301cada7897SBram Moolenaar \ " asdfaqwer axxxo", 302cada7897SBram Moolenaar \ " a axxxoi", 303cada7897SBram Moolenaar \ " fa axxxoi", 304cada7897SBram Moolenaar \ " dfa axxxoi", 305cada7897SBram Moolenaar \ " sdfa axxxoi", 306cada7897SBram Moolenaar \ " asdfa axxxoi", 307cada7897SBram Moolenaar \ " xasdfa axxxoi", 308cada7897SBram Moolenaar \ " asxxdfa axxxoi", 309cada7897SBram Moolenaar \ " asxa;ofa axxxoi", 310cada7897SBram Moolenaar \ " asdfaqwer axxxoi", 311cada7897SBram Moolenaar \ " a axxxoik", 312cada7897SBram Moolenaar \ " fa axxxoik", 313cada7897SBram Moolenaar \ " dfa axxxoik", 314cada7897SBram Moolenaar \ " sdfa axxxoik", 315cada7897SBram Moolenaar \ " asdfa axxxoik", 316cada7897SBram Moolenaar \ " xasdfa axxxoik", 317cada7897SBram Moolenaar \ " asxxdfa axxxoik", 318cada7897SBram Moolenaar \ " asxa;ofa axxxoik", 319cada7897SBram Moolenaar \ " asdfaqwer axxxoik", 320cada7897SBram Moolenaar \ " a axxxoike", 321cada7897SBram Moolenaar \ " fa axxxoike", 322cada7897SBram Moolenaar \ " dfa axxxoike", 323cada7897SBram Moolenaar \ " sdfa axxxoike", 324cada7897SBram Moolenaar \ " asdfa axxxoike", 325cada7897SBram Moolenaar \ " xasdfa axxxoike", 326cada7897SBram Moolenaar \ " asxxdfa axxxoike", 327cada7897SBram Moolenaar \ " asxa;ofa axxxoike", 328cada7897SBram Moolenaar \ " asdfaqwer axxxoike", 329cada7897SBram Moolenaar \ " a axxxoikey", 330cada7897SBram Moolenaar \ " fa axxxoikey", 331cada7897SBram Moolenaar \ " dfa axxxoikey", 332cada7897SBram Moolenaar \ " sdfa axxxoikey", 333cada7897SBram Moolenaar \ " asdfa axxxoikey", 334cada7897SBram Moolenaar \ " xasdfa axxxoikey", 335cada7897SBram Moolenaar \ " asxxdfa axxxoikey", 336cada7897SBram Moolenaar \ " asxa;ofa axxxoikey", 337cada7897SBram Moolenaar \ " asdfaqwer axxxoikey", 338cada7897SBram Moolenaar \ ]) 339cada7897SBram Moolenaar %right 340cada7897SBram Moolenaar call assert_equal([ 341cada7897SBram Moolenaar \ "\t\t\t\t test for :right", 342cada7897SBram Moolenaar \ "\t\t\t\t a a", 343cada7897SBram Moolenaar \ "\t\t\t\t fa a", 344cada7897SBram Moolenaar \ "\t\t\t\t dfa a", 345cada7897SBram Moolenaar \ "\t\t\t\t sdfa a", 346cada7897SBram Moolenaar \ "\t\t\t\t asdfa a", 347cada7897SBram Moolenaar \ "\t\t\t\t xasdfa a", 348cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa a", 349cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa a", 350cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer a", 351cada7897SBram Moolenaar \ "\t\t\t\t a ax", 352cada7897SBram Moolenaar \ "\t\t\t\t fa ax", 353cada7897SBram Moolenaar \ "\t\t\t\t dfa ax", 354cada7897SBram Moolenaar \ "\t\t\t\t sdfa ax", 355cada7897SBram Moolenaar \ "\t\t\t\t asdfa ax", 356cada7897SBram Moolenaar \ "\t\t\t\t xasdfa ax", 357cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa ax", 358cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa ax", 359cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer ax", 360cada7897SBram Moolenaar \ "\t\t\t\t a axx", 361cada7897SBram Moolenaar \ "\t\t\t\t fa axx", 362cada7897SBram Moolenaar \ "\t\t\t\t dfa axx", 363cada7897SBram Moolenaar \ "\t\t\t\t sdfa axx", 364cada7897SBram Moolenaar \ "\t\t\t\t asdfa axx", 365cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axx", 366cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axx", 367cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axx", 368cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axx", 369cada7897SBram Moolenaar \ "\t\t\t\t a axxx", 370cada7897SBram Moolenaar \ "\t\t\t\t fa axxx", 371cada7897SBram Moolenaar \ "\t\t\t\t dfa axxx", 372cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxx", 373cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxx", 374cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxx", 375cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxx", 376cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxx", 377cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxx", 378cada7897SBram Moolenaar \ "\t\t\t\t a axxxo", 379cada7897SBram Moolenaar \ "\t\t\t\t fa axxxo", 380cada7897SBram Moolenaar \ "\t\t\t\t dfa axxxo", 381cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxxo", 382cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxxo", 383cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxxo", 384cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxxo", 385cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxxo", 386cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxxo", 387cada7897SBram Moolenaar \ "\t\t\t\t a axxxoi", 388cada7897SBram Moolenaar \ "\t\t\t\t fa axxxoi", 389cada7897SBram Moolenaar \ "\t\t\t\t dfa axxxoi", 390cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxxoi", 391cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxxoi", 392cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxxoi", 393cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxxoi", 394cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxxoi", 395cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxxoi", 396cada7897SBram Moolenaar \ "\t\t\t\t a axxxoik", 397cada7897SBram Moolenaar \ "\t\t\t\t fa axxxoik", 398cada7897SBram Moolenaar \ "\t\t\t\t dfa axxxoik", 399cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxxoik", 400cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxxoik", 401cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxxoik", 402cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxxoik", 403cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxxoik", 404cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxxoik", 405cada7897SBram Moolenaar \ "\t\t\t\t a axxxoike", 406cada7897SBram Moolenaar \ "\t\t\t\t fa axxxoike", 407cada7897SBram Moolenaar \ "\t\t\t\t dfa axxxoike", 408cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxxoike", 409cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxxoike", 410cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxxoike", 411cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxxoike", 412cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxxoike", 413cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxxoike", 414cada7897SBram Moolenaar \ "\t\t\t\t a axxxoikey", 415cada7897SBram Moolenaar \ "\t\t\t\t fa axxxoikey", 416cada7897SBram Moolenaar \ "\t\t\t\t dfa axxxoikey", 417cada7897SBram Moolenaar \ "\t\t\t\t sdfa axxxoikey", 418cada7897SBram Moolenaar \ "\t\t\t\t asdfa axxxoikey", 419cada7897SBram Moolenaar \ "\t\t\t\t xasdfa axxxoikey", 420cada7897SBram Moolenaar \ "\t\t\t\t asxxdfa axxxoikey", 421cada7897SBram Moolenaar \ "\t\t\t\t asxa;ofa axxxoikey", 422cada7897SBram Moolenaar \ "\t\t\t\t asdfaqwer axxxoikey", 423cada7897SBram Moolenaar \ "" 424cada7897SBram Moolenaar \ ], getline(1, '$')) 425cada7897SBram Moolenaar enew! 426cada7897SBram Moolenaar 4275d98dc2aSBram Moolenaar " align text with 'wrapmargin' 4280c3064b3SBram Moolenaar 50vnew 4295d98dc2aSBram Moolenaar call setline(1, ['Vim']) 4300c3064b3SBram Moolenaar setl textwidth=0 4310c3064b3SBram Moolenaar setl wrapmargin=30 4325d98dc2aSBram Moolenaar right 4335d98dc2aSBram Moolenaar call assert_equal("\t\t Vim", getline(1)) 4340c3064b3SBram Moolenaar q! 4355d98dc2aSBram Moolenaar 436ea3db914SBram Moolenaar " align text with 'rightleft' 437ea3db914SBram Moolenaar if has('rightleft') 438ea3db914SBram Moolenaar new 439ea3db914SBram Moolenaar call setline(1, 'Vim') 440ea3db914SBram Moolenaar setlocal rightleft 441ea3db914SBram Moolenaar left 20 442ea3db914SBram Moolenaar setlocal norightleft 443ea3db914SBram Moolenaar call assert_equal("\t\t Vim", getline(1)) 444ea3db914SBram Moolenaar setlocal rightleft 445ea3db914SBram Moolenaar right 446ea3db914SBram Moolenaar setlocal norightleft 447ea3db914SBram Moolenaar call assert_equal("Vim", getline(1)) 448ea3db914SBram Moolenaar close! 449ea3db914SBram Moolenaar endif 450ea3db914SBram Moolenaar 451cada7897SBram Moolenaar set tw& 452cada7897SBram Moolenaarendfunc 453cada7897SBram Moolenaar 454cada7897SBram Moolenaar" Test formatting a paragraph. 455cada7897SBram Moolenaarfunc Test_format_para() 456cada7897SBram Moolenaar enew! 457cada7897SBram Moolenaar set fo+=tcroql tw=72 458cada7897SBram Moolenaar 459cada7897SBram Moolenaar call append(0, [ 460cada7897SBram Moolenaar \ "xxxxx xx xxxxxx ", 461cada7897SBram Moolenaar \ "xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx", 462cada7897SBram Moolenaar \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx", 463cada7897SBram Moolenaar \ "xx xxxxxxx. xxxx xxxx.", 464cada7897SBram Moolenaar \ "", 465cada7897SBram Moolenaar \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx", 466cada7897SBram Moolenaar \ "> xxxxxx xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx" 467cada7897SBram Moolenaar \ ]) 468cada7897SBram Moolenaar exe "normal /xxxxxxxx$\<CR>" 469cada7897SBram Moolenaar normal 0gq6kk 470cada7897SBram Moolenaar call assert_equal([ 471cada7897SBram Moolenaar \ "xxxxx xx xxxxxx xxxxxxx xxxxxxxxx xxx xxxx xxxxx xxxxx xxx xx", 472cada7897SBram Moolenaar \ "xxxxxxxxxxxxxxxxxx xxxxx xxxx, xxxx xxxx xxxx xxxx xxx xx xx xx xxxxxxx.", 473cada7897SBram Moolenaar \ "xxxx xxxx.", 474cada7897SBram Moolenaar \ "", 475cada7897SBram Moolenaar \ "> xx xx, xxxx xxxx xxx xxxx xxx xxxxx xxx xxx xxxxxxx xxx xxxxx xxxxxx", 476cada7897SBram Moolenaar \ "> xxxxxxx: xxxx xxxxxxx, xx xxxxxx xxxx xxxxxxxxxx", 477cada7897SBram Moolenaar \ "" 478cada7897SBram Moolenaar \ ], getline(1, '$')) 479cada7897SBram Moolenaar 480cada7897SBram Moolenaar set fo& tw& 481cada7897SBram Moolenaar enew! 482cada7897SBram Moolenaarendfunc 483cada7897SBram Moolenaar 484cada7897SBram Moolenaar" Test undo after ":%s" and formatting. 485cada7897SBram Moolenaarfunc Test_format_undo() 486cada7897SBram Moolenaar enew! 487cada7897SBram Moolenaar map gg :.,.+2s/^/x/<CR>kk:set tw=3<CR>gqq 488cada7897SBram Moolenaar 489cada7897SBram Moolenaar call append(0, [ 490cada7897SBram Moolenaar \ "aa aa aa aa", 491cada7897SBram Moolenaar \ "bb bb bb bb", 492cada7897SBram Moolenaar \ "cc cc cc cc" 493cada7897SBram Moolenaar \ ]) 494cada7897SBram Moolenaar " undo/redo here to make the next undo only work on the following changes 495cada7897SBram Moolenaar exe "normal i\<C-G>u" 496cada7897SBram Moolenaar call cursor(1,1) 497cada7897SBram Moolenaar normal ggu 498cada7897SBram Moolenaar call assert_equal([ 499cada7897SBram Moolenaar \ "aa aa aa aa", 500cada7897SBram Moolenaar \ "bb bb bb bb", 501cada7897SBram Moolenaar \ "cc cc cc cc", 502cada7897SBram Moolenaar \ "" 503cada7897SBram Moolenaar \ ], getline(1, '$')) 504cada7897SBram Moolenaar 505cada7897SBram Moolenaar unmap gg 506e1e714efSBram Moolenaar set tw& 507cada7897SBram Moolenaar enew! 508cada7897SBram Moolenaarendfunc 509e1e714efSBram Moolenaar 510e1e714efSBram Moolenaarfunc Test_format_list_auto() 511e1e714efSBram Moolenaar new 512e1e714efSBram Moolenaar call setline(1, ['1. abc', '2. def', '3. ghi']) 513e1e714efSBram Moolenaar set fo=tan ai bs=2 514e1e714efSBram Moolenaar call feedkeys("3G0lli\<BS>\<BS>x\<Esc>", 'tx') 515e1e714efSBram Moolenaar call assert_equal('2. defx ghi', getline(2)) 516e1e714efSBram Moolenaar bwipe! 517e1e714efSBram Moolenaar set fo& ai& bs& 518e1e714efSBram Moolenaarendfunc 519396b7c78SBram Moolenaar 520396b7c78SBram Moolenaarfunc Test_crash_github_issue_5095() 521396b7c78SBram Moolenaar CheckFeature autocmd 522396b7c78SBram Moolenaar 523396b7c78SBram Moolenaar " This used to segfault, see https://github.com/vim/vim/issues/5095 524396b7c78SBram Moolenaar augroup testing 525396b7c78SBram Moolenaar au BufNew x center 526396b7c78SBram Moolenaar augroup END 527396b7c78SBram Moolenaar 528396b7c78SBram Moolenaar next! x 529396b7c78SBram Moolenaar 530396b7c78SBram Moolenaar bw 531396b7c78SBram Moolenaar augroup testing 532396b7c78SBram Moolenaar au! 533396b7c78SBram Moolenaar augroup END 534396b7c78SBram Moolenaar augroup! testing 535396b7c78SBram Moolenaarendfunc 536afc13bd8SBram Moolenaar 537afc13bd8SBram Moolenaar" Test for formatting multi-byte text with 'fo=t' 538afc13bd8SBram Moolenaarfunc Test_tw_2_fo_t() 539afc13bd8SBram Moolenaar new 540afc13bd8SBram Moolenaar let t =<< trim END 541afc13bd8SBram Moolenaar { 542afc13bd8SBram Moolenaar XYZ 543afc13bd8SBram Moolenaar abc XYZ 544afc13bd8SBram Moolenaar } 545afc13bd8SBram Moolenaar END 546afc13bd8SBram Moolenaar call setline(1, t) 547afc13bd8SBram Moolenaar call cursor(2, 1) 548afc13bd8SBram Moolenaar 549afc13bd8SBram Moolenaar set tw=2 fo=t 550afc13bd8SBram Moolenaar let t =<< trim END 551afc13bd8SBram Moolenaar XYZ 552afc13bd8SBram Moolenaar abc XYZ 553afc13bd8SBram Moolenaar END 554afc13bd8SBram Moolenaar exe "normal gqgqjgqgq" 555afc13bd8SBram Moolenaar exe "normal o\n" . join(t, "\n") 556afc13bd8SBram Moolenaar 557afc13bd8SBram Moolenaar let expected =<< trim END 558afc13bd8SBram Moolenaar { 559afc13bd8SBram Moolenaar XYZ 560afc13bd8SBram Moolenaar abc 561afc13bd8SBram Moolenaar XYZ 562afc13bd8SBram Moolenaar 563afc13bd8SBram Moolenaar XYZ 564afc13bd8SBram Moolenaar abc 565afc13bd8SBram Moolenaar XYZ 566afc13bd8SBram Moolenaar } 567afc13bd8SBram Moolenaar END 568afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 569afc13bd8SBram Moolenaar 570afc13bd8SBram Moolenaar set tw& fo& 571afc13bd8SBram Moolenaar bwipe! 572afc13bd8SBram Moolenaarendfunc 573afc13bd8SBram Moolenaar 574afc13bd8SBram Moolenaar" Test for formatting multi-byte text with 'fo=tm' and 'tw=1' 575afc13bd8SBram Moolenaarfunc Test_tw_1_fo_tm() 576afc13bd8SBram Moolenaar new 577afc13bd8SBram Moolenaar let t =<< trim END 578afc13bd8SBram Moolenaar { 579afc13bd8SBram Moolenaar X 580afc13bd8SBram Moolenaar Xa 581afc13bd8SBram Moolenaar X a 582afc13bd8SBram Moolenaar XY 583afc13bd8SBram Moolenaar X Y 584afc13bd8SBram Moolenaar } 585afc13bd8SBram Moolenaar END 586afc13bd8SBram Moolenaar call setline(1, t) 587afc13bd8SBram Moolenaar call cursor(2, 1) 588afc13bd8SBram Moolenaar 589afc13bd8SBram Moolenaar set tw=1 fo=tm 590afc13bd8SBram Moolenaar let t =<< trim END 591afc13bd8SBram Moolenaar X 592afc13bd8SBram Moolenaar Xa 593afc13bd8SBram Moolenaar X a 594afc13bd8SBram Moolenaar XY 595afc13bd8SBram Moolenaar X Y 596afc13bd8SBram Moolenaar END 597afc13bd8SBram Moolenaar exe "normal gqgqjgqgqjgqgqjgqgqjgqgq" 598afc13bd8SBram Moolenaar exe "normal o\n" . join(t, "\n") 599afc13bd8SBram Moolenaar 600afc13bd8SBram Moolenaar let expected =<< trim END 601afc13bd8SBram Moolenaar { 602afc13bd8SBram Moolenaar X 603afc13bd8SBram Moolenaar X 604afc13bd8SBram Moolenaar a 605afc13bd8SBram Moolenaar X 606afc13bd8SBram Moolenaar a 607afc13bd8SBram Moolenaar X 608afc13bd8SBram Moolenaar Y 609afc13bd8SBram Moolenaar X 610afc13bd8SBram Moolenaar Y 611afc13bd8SBram Moolenaar 612afc13bd8SBram Moolenaar X 613afc13bd8SBram Moolenaar X 614afc13bd8SBram Moolenaar a 615afc13bd8SBram Moolenaar X 616afc13bd8SBram Moolenaar a 617afc13bd8SBram Moolenaar X 618afc13bd8SBram Moolenaar Y 619afc13bd8SBram Moolenaar X 620afc13bd8SBram Moolenaar Y 621afc13bd8SBram Moolenaar } 622afc13bd8SBram Moolenaar END 623afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 624afc13bd8SBram Moolenaar 625afc13bd8SBram Moolenaar set tw& fo& 626afc13bd8SBram Moolenaar bwipe! 627afc13bd8SBram Moolenaarendfunc 628afc13bd8SBram Moolenaar 629afc13bd8SBram Moolenaar" Test for formatting multi-byte text with 'fo=tm' and 'tw=2' 630afc13bd8SBram Moolenaarfunc Test_tw_2_fo_tm() 631afc13bd8SBram Moolenaar new 632afc13bd8SBram Moolenaar let t =<< trim END 633afc13bd8SBram Moolenaar { 634afc13bd8SBram Moolenaar X 635afc13bd8SBram Moolenaar Xa 636afc13bd8SBram Moolenaar X a 637afc13bd8SBram Moolenaar XY 638afc13bd8SBram Moolenaar X Y 639afc13bd8SBram Moolenaar aX 640afc13bd8SBram Moolenaar abX 641afc13bd8SBram Moolenaar abcX 642afc13bd8SBram Moolenaar abX c 643afc13bd8SBram Moolenaar abXY 644afc13bd8SBram Moolenaar } 645afc13bd8SBram Moolenaar END 646afc13bd8SBram Moolenaar call setline(1, t) 647afc13bd8SBram Moolenaar call cursor(2, 1) 648afc13bd8SBram Moolenaar 649afc13bd8SBram Moolenaar set tw=2 fo=tm 650afc13bd8SBram Moolenaar let t =<< trim END 651afc13bd8SBram Moolenaar X 652afc13bd8SBram Moolenaar Xa 653afc13bd8SBram Moolenaar X a 654afc13bd8SBram Moolenaar XY 655afc13bd8SBram Moolenaar X Y 656afc13bd8SBram Moolenaar aX 657afc13bd8SBram Moolenaar abX 658afc13bd8SBram Moolenaar abcX 659afc13bd8SBram Moolenaar abX c 660afc13bd8SBram Moolenaar abXY 661afc13bd8SBram Moolenaar END 662afc13bd8SBram Moolenaar exe "normal gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgq" 663afc13bd8SBram Moolenaar exe "normal o\n" . join(t, "\n") 664afc13bd8SBram Moolenaar 665afc13bd8SBram Moolenaar let expected =<< trim END 666afc13bd8SBram Moolenaar { 667afc13bd8SBram Moolenaar X 668afc13bd8SBram Moolenaar X 669afc13bd8SBram Moolenaar a 670afc13bd8SBram Moolenaar X 671afc13bd8SBram Moolenaar a 672afc13bd8SBram Moolenaar X 673afc13bd8SBram Moolenaar Y 674afc13bd8SBram Moolenaar X 675afc13bd8SBram Moolenaar Y 676afc13bd8SBram Moolenaar a 677afc13bd8SBram Moolenaar X 678afc13bd8SBram Moolenaar ab 679afc13bd8SBram Moolenaar X 680afc13bd8SBram Moolenaar abc 681afc13bd8SBram Moolenaar X 682afc13bd8SBram Moolenaar ab 683afc13bd8SBram Moolenaar X 684afc13bd8SBram Moolenaar c 685afc13bd8SBram Moolenaar ab 686afc13bd8SBram Moolenaar X 687afc13bd8SBram Moolenaar Y 688afc13bd8SBram Moolenaar 689afc13bd8SBram Moolenaar X 690afc13bd8SBram Moolenaar X 691afc13bd8SBram Moolenaar a 692afc13bd8SBram Moolenaar X 693afc13bd8SBram Moolenaar a 694afc13bd8SBram Moolenaar X 695afc13bd8SBram Moolenaar Y 696afc13bd8SBram Moolenaar X 697afc13bd8SBram Moolenaar Y 698afc13bd8SBram Moolenaar a 699afc13bd8SBram Moolenaar X 700afc13bd8SBram Moolenaar ab 701afc13bd8SBram Moolenaar X 702afc13bd8SBram Moolenaar abc 703afc13bd8SBram Moolenaar X 704afc13bd8SBram Moolenaar ab 705afc13bd8SBram Moolenaar X 706afc13bd8SBram Moolenaar c 707afc13bd8SBram Moolenaar ab 708afc13bd8SBram Moolenaar X 709afc13bd8SBram Moolenaar Y 710afc13bd8SBram Moolenaar } 711afc13bd8SBram Moolenaar END 712afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 713afc13bd8SBram Moolenaar 714afc13bd8SBram Moolenaar set tw& fo& 715afc13bd8SBram Moolenaar bwipe! 716afc13bd8SBram Moolenaarendfunc 717afc13bd8SBram Moolenaar 718afc13bd8SBram Moolenaar" Test for formatting multi-byte text with 'fo=tm', 'tw=2' and 'autoindent'. 719afc13bd8SBram Moolenaarfunc Test_tw_2_fo_tm_ai() 720afc13bd8SBram Moolenaar new 721afc13bd8SBram Moolenaar let t =<< trim END 722afc13bd8SBram Moolenaar { 723afc13bd8SBram Moolenaar X 724afc13bd8SBram Moolenaar Xa 725afc13bd8SBram Moolenaar } 726afc13bd8SBram Moolenaar END 727afc13bd8SBram Moolenaar call setline(1, t) 728afc13bd8SBram Moolenaar call cursor(2, 1) 729afc13bd8SBram Moolenaar 730afc13bd8SBram Moolenaar set ai tw=2 fo=tm 731afc13bd8SBram Moolenaar let t =<< trim END 732afc13bd8SBram Moolenaar X 733afc13bd8SBram Moolenaar Xa 734afc13bd8SBram Moolenaar END 735afc13bd8SBram Moolenaar exe "normal gqgqjgqgq" 736afc13bd8SBram Moolenaar exe "normal o\n" . join(t, "\n") 737afc13bd8SBram Moolenaar 738afc13bd8SBram Moolenaar let expected =<< trim END 739afc13bd8SBram Moolenaar { 740afc13bd8SBram Moolenaar X 741afc13bd8SBram Moolenaar X 742afc13bd8SBram Moolenaar a 743afc13bd8SBram Moolenaar 744afc13bd8SBram Moolenaar X 745afc13bd8SBram Moolenaar X 746afc13bd8SBram Moolenaar a 747afc13bd8SBram Moolenaar } 748afc13bd8SBram Moolenaar END 749afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 750afc13bd8SBram Moolenaar 751afc13bd8SBram Moolenaar set tw& fo& ai& 752afc13bd8SBram Moolenaar bwipe! 753afc13bd8SBram Moolenaarendfunc 754afc13bd8SBram Moolenaar 755afc13bd8SBram Moolenaar" Test for formatting multi-byte text with 'fo=tm', 'tw=2' and 'noai'. 756afc13bd8SBram Moolenaarfunc Test_tw_2_fo_tm_noai() 757afc13bd8SBram Moolenaar new 758afc13bd8SBram Moolenaar let t =<< trim END 759afc13bd8SBram Moolenaar { 760afc13bd8SBram Moolenaar X 761afc13bd8SBram Moolenaar Xa 762afc13bd8SBram Moolenaar } 763afc13bd8SBram Moolenaar END 764afc13bd8SBram Moolenaar call setline(1, t) 765afc13bd8SBram Moolenaar call cursor(2, 1) 766afc13bd8SBram Moolenaar 767afc13bd8SBram Moolenaar set noai tw=2 fo=tm 768afc13bd8SBram Moolenaar exe "normal gqgqjgqgqo\n X\n Xa" 769afc13bd8SBram Moolenaar 770afc13bd8SBram Moolenaar let expected =<< trim END 771afc13bd8SBram Moolenaar { 772afc13bd8SBram Moolenaar X 773afc13bd8SBram Moolenaar X 774afc13bd8SBram Moolenaar a 775afc13bd8SBram Moolenaar 776afc13bd8SBram Moolenaar X 777afc13bd8SBram Moolenaar X 778afc13bd8SBram Moolenaar a 779afc13bd8SBram Moolenaar } 780afc13bd8SBram Moolenaar END 781afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 782afc13bd8SBram Moolenaar 783afc13bd8SBram Moolenaar set tw& fo& ai& 784afc13bd8SBram Moolenaar bwipe! 785afc13bd8SBram Moolenaarendfunc 786afc13bd8SBram Moolenaar 787afc13bd8SBram Moolenaarfunc Test_tw_2_fo_tm_replace() 788afc13bd8SBram Moolenaar new 789afc13bd8SBram Moolenaar let t =<< trim END 790afc13bd8SBram Moolenaar { 791afc13bd8SBram Moolenaar 792afc13bd8SBram Moolenaar } 793afc13bd8SBram Moolenaar END 794afc13bd8SBram Moolenaar call setline(1, t) 795afc13bd8SBram Moolenaar call cursor(2, 1) 796afc13bd8SBram Moolenaar 797afc13bd8SBram Moolenaar set tw=2 fo=tm 798afc13bd8SBram Moolenaar exe "normal RXa" 799afc13bd8SBram Moolenaar 800afc13bd8SBram Moolenaar let expected =<< trim END 801afc13bd8SBram Moolenaar { 802afc13bd8SBram Moolenaar X 803afc13bd8SBram Moolenaar a 804afc13bd8SBram Moolenaar } 805afc13bd8SBram Moolenaar END 806afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 807afc13bd8SBram Moolenaar 808afc13bd8SBram Moolenaar set tw& fo& 809afc13bd8SBram Moolenaar bwipe! 810afc13bd8SBram Moolenaarendfunc 811afc13bd8SBram Moolenaar 812afc13bd8SBram Moolenaar" Test for 'matchpairs' with multibyte chars 813224a5f17SBram Moolenaarfunc Test_mps_multibyte() 814afc13bd8SBram Moolenaar new 815afc13bd8SBram Moolenaar let t =<< trim END 816afc13bd8SBram Moolenaar { 817afc13bd8SBram Moolenaar ‘ two three ’ four 818afc13bd8SBram Moolenaar } 819afc13bd8SBram Moolenaar END 820afc13bd8SBram Moolenaar call setline(1, t) 821afc13bd8SBram Moolenaar call cursor(2, 1) 822afc13bd8SBram Moolenaar 823afc13bd8SBram Moolenaar exe "set mps+=\u2018:\u2019" 824afc13bd8SBram Moolenaar normal d% 825afc13bd8SBram Moolenaar 826afc13bd8SBram Moolenaar let expected =<< trim END 827afc13bd8SBram Moolenaar { 828afc13bd8SBram Moolenaar four 829afc13bd8SBram Moolenaar } 830afc13bd8SBram Moolenaar END 831afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 832afc13bd8SBram Moolenaar 833afc13bd8SBram Moolenaar set mps& 834afc13bd8SBram Moolenaar bwipe! 835afc13bd8SBram Moolenaarendfunc 836afc13bd8SBram Moolenaar 837224a5f17SBram Moolenaar" Test for 'matchpairs' in latin1 encoding 838224a5f17SBram Moolenaarfunc Test_mps_latin1() 839224a5f17SBram Moolenaar new 840224a5f17SBram Moolenaar let save_enc = &encoding 841224a5f17SBram Moolenaar set encoding=latin1 842224a5f17SBram Moolenaar call setline(1, 'abc(def)ghi') 843224a5f17SBram Moolenaar normal % 844224a5f17SBram Moolenaar call assert_equal(8, col('.')) 845224a5f17SBram Moolenaar normal % 846224a5f17SBram Moolenaar call assert_equal(4, col('.')) 847224a5f17SBram Moolenaar call cursor(1, 6) 848224a5f17SBram Moolenaar normal [( 849224a5f17SBram Moolenaar call assert_equal(4, col('.')) 850224a5f17SBram Moolenaar normal % 851224a5f17SBram Moolenaar call assert_equal(8, col('.')) 852224a5f17SBram Moolenaar call cursor(1, 6) 853224a5f17SBram Moolenaar normal ]) 854224a5f17SBram Moolenaar call assert_equal(8, col('.')) 855224a5f17SBram Moolenaar normal % 856224a5f17SBram Moolenaar call assert_equal(4, col('.')) 857224a5f17SBram Moolenaar let &encoding = save_enc 858224a5f17SBram Moolenaar close! 859224a5f17SBram Moolenaarendfunc 860224a5f17SBram Moolenaar 8615b8cabfeSBram Moolenaarfunc Test_empty_matchpairs() 8625b8cabfeSBram Moolenaar split 8635b8cabfeSBram Moolenaar set matchpairs= showmatch 8645b8cabfeSBram Moolenaar call assert_nobeep('call feedkeys("ax\tx\t\<Esc>", "xt")') 8655b8cabfeSBram Moolenaar set matchpairs& noshowmatch 8665b8cabfeSBram Moolenaar bwipe! 8675b8cabfeSBram Moolenaarendfunc 8685b8cabfeSBram Moolenaar 8696fd367a9SBram Moolenaarfunc Test_mps_error() 8706fd367a9SBram Moolenaar let encoding_save = &encoding 8716fd367a9SBram Moolenaar 8726fd367a9SBram Moolenaar for e in ['utf-8', 'latin1'] 8736fd367a9SBram Moolenaar exe 'set encoding=' .. e 8746fd367a9SBram Moolenaar 8756fd367a9SBram Moolenaar call assert_fails('set mps=<:', 'E474:', e) 8766fd367a9SBram Moolenaar call assert_fails('set mps=:>', 'E474:', e) 8776fd367a9SBram Moolenaar call assert_fails('set mps=<>', 'E474:', e) 8786fd367a9SBram Moolenaar call assert_fails('set mps=<:>_', 'E474:', e) 8796fd367a9SBram Moolenaar endfor 8806fd367a9SBram Moolenaar 8816fd367a9SBram Moolenaar let &encoding = encoding_save 8826fd367a9SBram Moolenaarendfunc 8836fd367a9SBram Moolenaar 884afc13bd8SBram Moolenaar" Test for ra on multi-byte characters 885afc13bd8SBram Moolenaarfunc Test_ra_multibyte() 886afc13bd8SBram Moolenaar new 887afc13bd8SBram Moolenaar let t =<< trim END 888afc13bd8SBram Moolenaar ra test 889afc13bd8SBram Moolenaar abba 890afc13bd8SBram Moolenaar aab 891afc13bd8SBram Moolenaar END 892afc13bd8SBram Moolenaar call setline(1, t) 893afc13bd8SBram Moolenaar call cursor(1, 1) 894afc13bd8SBram Moolenaar 895afc13bd8SBram Moolenaar normal jVjra 896afc13bd8SBram Moolenaar 897afc13bd8SBram Moolenaar let expected =<< trim END 898afc13bd8SBram Moolenaar ra test 899afc13bd8SBram Moolenaar aaaa 900afc13bd8SBram Moolenaar aaa 901afc13bd8SBram Moolenaar END 902afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 903afc13bd8SBram Moolenaar 904afc13bd8SBram Moolenaar bwipe! 905afc13bd8SBram Moolenaarendfunc 906afc13bd8SBram Moolenaar 907afc13bd8SBram Moolenaar" Test for 'whichwrap' with multi-byte character 908a48e78e1SBram Moolenaarfunc Test_whichwrap_multi_byte() 909afc13bd8SBram Moolenaar new 910afc13bd8SBram Moolenaar let t =<< trim END 911afc13bd8SBram Moolenaar á 912afc13bd8SBram Moolenaar x 913afc13bd8SBram Moolenaar END 914afc13bd8SBram Moolenaar call setline(1, t) 915afc13bd8SBram Moolenaar call cursor(2, 1) 916afc13bd8SBram Moolenaar 917afc13bd8SBram Moolenaar set whichwrap+=h 918afc13bd8SBram Moolenaar normal dh 919a48e78e1SBram Moolenaar set whichwrap& 920afc13bd8SBram Moolenaar 921afc13bd8SBram Moolenaar let expected =<< trim END 922afc13bd8SBram Moolenaar áx 923afc13bd8SBram Moolenaar END 924afc13bd8SBram Moolenaar call assert_equal(expected, getline(1, '$')) 925afc13bd8SBram Moolenaar 926afc13bd8SBram Moolenaar bwipe! 927afc13bd8SBram Moolenaarendfunc 928afc13bd8SBram Moolenaar 929ca68ae13SBram Moolenaar" Test for 'a' and 'w' flags in 'formatoptions' 930ca68ae13SBram Moolenaarfunc Test_fo_a_w() 931ca68ae13SBram Moolenaar new 932ca68ae13SBram Moolenaar setlocal fo+=aw tw=10 933ca68ae13SBram Moolenaar call feedkeys("iabc abc a abc\<Esc>k0weade", 'xt') 934ca68ae13SBram Moolenaar call assert_equal(['abc abcde ', 'a abc'], getline(1, '$')) 9352eaeaf3cSBram Moolenaar 936845e0ee5SBram Moolenaar " when a line ends with space, it is not broken up. 937845e0ee5SBram Moolenaar %d 938845e0ee5SBram Moolenaar call feedkeys("ione two to ", 'xt') 939845e0ee5SBram Moolenaar call assert_equal('one two to ', getline(1)) 940845e0ee5SBram Moolenaar 941845e0ee5SBram Moolenaar " when a line ends with spaces and backspace is used in the next line, the 942845e0ee5SBram Moolenaar " last space in the previous line should be removed. 943845e0ee5SBram Moolenaar %d 944845e0ee5SBram Moolenaar set backspace=indent,eol,start 945845e0ee5SBram Moolenaar call setline(1, ['one ', 'two']) 946845e0ee5SBram Moolenaar exe "normal 2Gi\<BS>" 947845e0ee5SBram Moolenaar call assert_equal(['one two'], getline(1, '$')) 948845e0ee5SBram Moolenaar set backspace& 949845e0ee5SBram Moolenaar 9502eaeaf3cSBram Moolenaar " Test for 'a', 'w' and '1' options. 9512eaeaf3cSBram Moolenaar setlocal textwidth=0 9522eaeaf3cSBram Moolenaar setlocal fo=1aw 9532eaeaf3cSBram Moolenaar %d 9542eaeaf3cSBram Moolenaar call setline(1, '. foo') 9552eaeaf3cSBram Moolenaar normal 72ig 9562eaeaf3cSBram Moolenaar call feedkeys('a uu uu uu', 'xt') 9572eaeaf3cSBram Moolenaar call assert_equal('g uu uu ', getline(1)[-8:]) 9582eaeaf3cSBram Moolenaar call assert_equal(['uu. foo'], getline(2, '$')) 9592eaeaf3cSBram Moolenaar 960d0a1dee3SBram Moolenaar " using backspace or "x" triggers reformat 961d0a1dee3SBram Moolenaar call setline(1, ['1 2 3 4 5 ', '6 7 8 9']) 962d0a1dee3SBram Moolenaar set tw=10 963d0a1dee3SBram Moolenaar set fo=taw 964d0a1dee3SBram Moolenaar set bs=indent,eol,start 965d0a1dee3SBram Moolenaar exe "normal 1G4la\<BS>\<BS>\<Esc>" 966d0a1dee3SBram Moolenaar call assert_equal(['1 2 4 5 6 ', '7 8 9'], getline(1, 2)) 967d0a1dee3SBram Moolenaar exe "normal f4xx" 968d0a1dee3SBram Moolenaar call assert_equal(['1 2 5 6 7 ', '8 9'], getline(1, 2)) 969d0a1dee3SBram Moolenaar 970*6b36d2a1SBram Moolenaar " using "cw" leaves cursor in right spot 971*6b36d2a1SBram Moolenaar call setline(1, ['Now we g whether that nation, or', 972*6b36d2a1SBram Moolenaar \ 'any nation so conceived and,']) 973*6b36d2a1SBram Moolenaar set fo=tcqa tw=35 974*6b36d2a1SBram Moolenaar exe "normal 2G0cwx\<Esc>" 975*6b36d2a1SBram Moolenaar call assert_equal(['Now we g whether that nation, or x', 'nation so conceived and,'], getline(1, 2)) 976*6b36d2a1SBram Moolenaar 977d0a1dee3SBram Moolenaar set tw=0 978d0a1dee3SBram Moolenaar set fo& 979ca68ae13SBram Moolenaar %bw! 980afc13bd8SBram Moolenaarendfunc 981afc13bd8SBram Moolenaar 9822eaeaf3cSBram Moolenaar" Test for formatting lines using gq in visual mode 9832eaeaf3cSBram Moolenaarfunc Test_visual_gq_format() 9842eaeaf3cSBram Moolenaar new 9852eaeaf3cSBram Moolenaar call setline(1, ['one two three four', 'five six', 'one two']) 9862eaeaf3cSBram Moolenaar setl textwidth=10 9872eaeaf3cSBram Moolenaar call feedkeys('ggv$jj', 'xt') 9882eaeaf3cSBram Moolenaar redraw! 9892eaeaf3cSBram Moolenaar normal gq 9902eaeaf3cSBram Moolenaar %d 9912eaeaf3cSBram Moolenaar call setline(1, ['one two three four', 'five six', 'one two']) 9922eaeaf3cSBram Moolenaar normal G$ 9932eaeaf3cSBram Moolenaar call feedkeys('v0kk', 'xt') 9942eaeaf3cSBram Moolenaar redraw! 9952eaeaf3cSBram Moolenaar normal gq 9962eaeaf3cSBram Moolenaar setl textwidth& 9972eaeaf3cSBram Moolenaar close! 9982eaeaf3cSBram Moolenaarendfunc 9992eaeaf3cSBram Moolenaar 10002eaeaf3cSBram Moolenaar" Test for 'n' flag in 'formatoptions' to format numbered lists 10012eaeaf3cSBram Moolenaarfunc Test_fo_n() 10022eaeaf3cSBram Moolenaar new 10032eaeaf3cSBram Moolenaar setlocal autoindent 10042eaeaf3cSBram Moolenaar setlocal textwidth=12 10052eaeaf3cSBram Moolenaar setlocal fo=n 10062eaeaf3cSBram Moolenaar call setline(1, [' 1) one two three four', ' 2) two']) 10072eaeaf3cSBram Moolenaar normal gggqG 10082eaeaf3cSBram Moolenaar call assert_equal([' 1) one two', ' three', ' four', ' 2) two'], 10092eaeaf3cSBram Moolenaar \ getline(1, '$')) 10102eaeaf3cSBram Moolenaar close! 10112eaeaf3cSBram Moolenaarendfunc 10122eaeaf3cSBram Moolenaar 10132eaeaf3cSBram Moolenaar" Test for 'formatlistpat' option 10142eaeaf3cSBram Moolenaarfunc Test_formatlistpat() 10152eaeaf3cSBram Moolenaar new 10162eaeaf3cSBram Moolenaar setlocal autoindent 10172eaeaf3cSBram Moolenaar setlocal textwidth=10 10182eaeaf3cSBram Moolenaar setlocal fo=n 10192eaeaf3cSBram Moolenaar setlocal formatlistpat=^\\s*-\\s* 10202eaeaf3cSBram Moolenaar call setline(1, [' - one two three', ' - two']) 10212eaeaf3cSBram Moolenaar normal gggqG 10222eaeaf3cSBram Moolenaar call assert_equal([' - one', ' two', ' three', ' - two'], 10232eaeaf3cSBram Moolenaar \ getline(1, '$')) 10242eaeaf3cSBram Moolenaar close! 10252eaeaf3cSBram Moolenaarendfunc 10262eaeaf3cSBram Moolenaar 10272eaeaf3cSBram Moolenaar" Test for the 'b' and 'v' flags in 'formatoptions' 10282eaeaf3cSBram Moolenaar" Text should wrap only if a space character is inserted at or before 10292eaeaf3cSBram Moolenaar" 'textwidth' 10302eaeaf3cSBram Moolenaarfunc Test_fo_b() 10312eaeaf3cSBram Moolenaar new 10322eaeaf3cSBram Moolenaar setlocal textwidth=20 10332eaeaf3cSBram Moolenaar 10342eaeaf3cSBram Moolenaar setlocal formatoptions=t 10352eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10362eaeaf3cSBram Moolenaar call feedkeys('Amore', 'xt') 10372eaeaf3cSBram Moolenaar call assert_equal(['one two three', 'fourmore'], getline(1, '$')) 10382eaeaf3cSBram Moolenaar 10392eaeaf3cSBram Moolenaar setlocal formatoptions=bt 10402eaeaf3cSBram Moolenaar %d 10412eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10422eaeaf3cSBram Moolenaar call feedkeys('Amore five', 'xt') 10432eaeaf3cSBram Moolenaar call assert_equal(['one two three fourmore five'], getline(1, '$')) 10442eaeaf3cSBram Moolenaar 10452eaeaf3cSBram Moolenaar setlocal formatoptions=bt 10462eaeaf3cSBram Moolenaar %d 10472eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10482eaeaf3cSBram Moolenaar call feedkeys('A five', 'xt') 10492eaeaf3cSBram Moolenaar call assert_equal(['one two three four', 'five'], getline(1, '$')) 10502eaeaf3cSBram Moolenaar 10512eaeaf3cSBram Moolenaar setlocal formatoptions=vt 10522eaeaf3cSBram Moolenaar %d 10532eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10542eaeaf3cSBram Moolenaar call feedkeys('Amore five', 'xt') 10552eaeaf3cSBram Moolenaar call assert_equal(['one two three fourmore', 'five'], getline(1, '$')) 10562eaeaf3cSBram Moolenaar 10572eaeaf3cSBram Moolenaar close! 10582eaeaf3cSBram Moolenaarendfunc 10592eaeaf3cSBram Moolenaar 10602eaeaf3cSBram Moolenaar" Test for the '1' flag in 'formatoptions'. Don't wrap text after a one letter 10612eaeaf3cSBram Moolenaar" word. 10622eaeaf3cSBram Moolenaarfunc Test_fo_1() 10632eaeaf3cSBram Moolenaar new 10642eaeaf3cSBram Moolenaar setlocal textwidth=20 10652eaeaf3cSBram Moolenaar 10662eaeaf3cSBram Moolenaar setlocal formatoptions=t 10672eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10682eaeaf3cSBram Moolenaar call feedkeys('A a bird', 'xt') 10692eaeaf3cSBram Moolenaar call assert_equal(['one two three four a', 'bird'], getline(1, '$')) 10702eaeaf3cSBram Moolenaar 10712eaeaf3cSBram Moolenaar %d 10722eaeaf3cSBram Moolenaar setlocal formatoptions=t1 10732eaeaf3cSBram Moolenaar call setline(1, 'one two three four') 10742eaeaf3cSBram Moolenaar call feedkeys('A a bird', 'xt') 10752eaeaf3cSBram Moolenaar call assert_equal(['one two three four', 'a bird'], getline(1, '$')) 10762eaeaf3cSBram Moolenaar 10772eaeaf3cSBram Moolenaar close! 10782eaeaf3cSBram Moolenaarendfunc 10792eaeaf3cSBram Moolenaar 10802eaeaf3cSBram Moolenaar" Test for 'l' flag in 'formatoptions'. When starting insert mode, if a line 10812eaeaf3cSBram Moolenaar" is longer than 'textwidth', then it is not broken. 10822eaeaf3cSBram Moolenaarfunc Test_fo_l() 10832eaeaf3cSBram Moolenaar new 10842eaeaf3cSBram Moolenaar setlocal textwidth=20 10852eaeaf3cSBram Moolenaar 10862eaeaf3cSBram Moolenaar setlocal formatoptions=t 10872eaeaf3cSBram Moolenaar call setline(1, 'one two three four five') 10882eaeaf3cSBram Moolenaar call feedkeys('A six', 'xt') 10892eaeaf3cSBram Moolenaar call assert_equal(['one two three four', 'five six'], getline(1, '$')) 10902eaeaf3cSBram Moolenaar 10912eaeaf3cSBram Moolenaar %d 10922eaeaf3cSBram Moolenaar setlocal formatoptions=tl 10932eaeaf3cSBram Moolenaar call setline(1, 'one two three four five') 10942eaeaf3cSBram Moolenaar call feedkeys('A six', 'xt') 10952eaeaf3cSBram Moolenaar call assert_equal(['one two three four five six'], getline(1, '$')) 10962eaeaf3cSBram Moolenaar 10972eaeaf3cSBram Moolenaar close! 10982eaeaf3cSBram Moolenaarendfunc 10992eaeaf3cSBram Moolenaar 11002eaeaf3cSBram Moolenaar" Test for the '2' flag in 'formatoptions' 11012eaeaf3cSBram Moolenaarfunc Test_fo_2() 11022eaeaf3cSBram Moolenaar new 11032eaeaf3cSBram Moolenaar setlocal autoindent 11042eaeaf3cSBram Moolenaar setlocal formatoptions=t2 11052eaeaf3cSBram Moolenaar setlocal textwidth=30 11062eaeaf3cSBram Moolenaar call setline(1, ["\tfirst line of a paragraph.", 11072eaeaf3cSBram Moolenaar \ "second line of the same paragraph.", 11082eaeaf3cSBram Moolenaar \ "third line."]) 11092eaeaf3cSBram Moolenaar normal gggqG 11102eaeaf3cSBram Moolenaar call assert_equal(["\tfirst line of a", 11112eaeaf3cSBram Moolenaar \ "paragraph. second line of the", 11122eaeaf3cSBram Moolenaar \ "same paragraph. third line."], getline(1, '$')) 11132eaeaf3cSBram Moolenaar close! 11142eaeaf3cSBram Moolenaarendfunc 11152eaeaf3cSBram Moolenaar 1116afc13bd8SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 1117