1*b7e24836SBram Moolenaar" Tests for the various flags in the 'comments' option 2*b7e24836SBram Moolenaar 3*b7e24836SBram Moolenaar" Test for the 'n' flag in 'comments' 4*b7e24836SBram Moolenaarfunc Test_comment_nested() 5*b7e24836SBram Moolenaar new 6*b7e24836SBram Moolenaar setlocal comments=n:> fo+=ro 7*b7e24836SBram Moolenaar exe "normal i> B\nD\<C-C>ggOA\<C-C>joC\<C-C>Go\<BS>>>> F\nH" 8*b7e24836SBram Moolenaar exe "normal 5GOE\<C-C>6GoG" 9*b7e24836SBram Moolenaar let expected =<< trim END 10*b7e24836SBram Moolenaar > A 11*b7e24836SBram Moolenaar > B 12*b7e24836SBram Moolenaar > C 13*b7e24836SBram Moolenaar > D 14*b7e24836SBram Moolenaar >>>> E 15*b7e24836SBram Moolenaar >>>> F 16*b7e24836SBram Moolenaar >>>> G 17*b7e24836SBram Moolenaar >>>> H 18*b7e24836SBram Moolenaar END 19*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 20*b7e24836SBram Moolenaar close! 21*b7e24836SBram Moolenaarendfunc 22*b7e24836SBram Moolenaar 23*b7e24836SBram Moolenaar" Test for the 'b' flag in 'comments' 24*b7e24836SBram Moolenaarfunc Test_comment_blank() 25*b7e24836SBram Moolenaar new 26*b7e24836SBram Moolenaar setlocal comments=b:* fo+=ro 27*b7e24836SBram Moolenaar exe "normal i* E\nF\n\<BS>G\nH\<C-C>ggOC\<C-C>O\<BS>B\<C-C>OA\<C-C>2joD" 28*b7e24836SBram Moolenaar let expected =<< trim END 29*b7e24836SBram Moolenaar A 30*b7e24836SBram Moolenaar *B 31*b7e24836SBram Moolenaar * C 32*b7e24836SBram Moolenaar * D 33*b7e24836SBram Moolenaar * E 34*b7e24836SBram Moolenaar * F 35*b7e24836SBram Moolenaar *G 36*b7e24836SBram Moolenaar H 37*b7e24836SBram Moolenaar END 38*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 39*b7e24836SBram Moolenaar close! 40*b7e24836SBram Moolenaarendfunc 41*b7e24836SBram Moolenaar 42*b7e24836SBram Moolenaar" Test for the 'f' flag in 'comments' (only the first line has a comment 43*b7e24836SBram Moolenaar" string) 44*b7e24836SBram Moolenaarfunc Test_comment_firstline() 45*b7e24836SBram Moolenaar new 46*b7e24836SBram Moolenaar setlocal comments=f:- fo+=ro 47*b7e24836SBram Moolenaar exe "normal i- B\nD\<C-C>ggoC\<C-C>ggOA\<C-C>" 48*b7e24836SBram Moolenaar call assert_equal(['A', '- B', ' C', ' D'], getline(1, '$')) 49*b7e24836SBram Moolenaar %d 50*b7e24836SBram Moolenaar setlocal comments=:- 51*b7e24836SBram Moolenaar exe "normal i- B\nD\<C-C>ggoC\<C-C>ggOA\<C-C>" 52*b7e24836SBram Moolenaar call assert_equal(['- A', '- B', '- C', '- D'], getline(1, '$')) 53*b7e24836SBram Moolenaar close! 54*b7e24836SBram Moolenaarendfunc 55*b7e24836SBram Moolenaar 56*b7e24836SBram Moolenaar" Test for the 's', 'm' and 'e' flags in 'comments' 57*b7e24836SBram Moolenaar" Test for automatically adding comment leaders in insert mode 58*b7e24836SBram Moolenaarfunc Test_comment_threepiece() 59*b7e24836SBram Moolenaar new 60*b7e24836SBram Moolenaar setlocal expandtab 61*b7e24836SBram Moolenaar call setline(1, ["\t/*"]) 62*b7e24836SBram Moolenaar setlocal formatoptions=croql 63*b7e24836SBram Moolenaar call cursor(1, 3) 64*b7e24836SBram Moolenaar call feedkeys("A\<cr>\<cr>/", 'tnix') 65*b7e24836SBram Moolenaar call assert_equal(["\t/*", " *", " */"], getline(1, '$')) 66*b7e24836SBram Moolenaar 67*b7e24836SBram Moolenaar " If a comment ends in a single line, then don't add it in the next line 68*b7e24836SBram Moolenaar %d 69*b7e24836SBram Moolenaar call setline(1, '/* line1 */') 70*b7e24836SBram Moolenaar call feedkeys("A\<CR>next line", 'xt') 71*b7e24836SBram Moolenaar call assert_equal(['/* line1 */', 'next line'], getline(1, '$')) 72*b7e24836SBram Moolenaar 73*b7e24836SBram Moolenaar %d 74*b7e24836SBram Moolenaar " Copy the trailing indentation from the leader comment to a new line 75*b7e24836SBram Moolenaar setlocal autoindent noexpandtab 76*b7e24836SBram Moolenaar call feedkeys("a\t/*\tone\ntwo\n/", 'xt') 77*b7e24836SBram Moolenaar call assert_equal(["\t/*\tone", "\t *\ttwo", "\t */"], getline(1, '$')) 78*b7e24836SBram Moolenaar close! 79*b7e24836SBram Moolenaarendfunc 80*b7e24836SBram Moolenaar 81*b7e24836SBram Moolenaar" Test for the 'r' flag in 'comments' (right align comment) 82*b7e24836SBram Moolenaarfunc Test_comment_rightalign() 83*b7e24836SBram Moolenaar new 84*b7e24836SBram Moolenaar setlocal comments=sr:/***,m:**,ex-2:******/ fo+=ro 85*b7e24836SBram Moolenaar exe "normal i=\<C-C>o\t /***\nD\n/" 86*b7e24836SBram Moolenaar exe "normal 2GOA\<C-C>joB\<C-C>jOC\<C-C>joE\<C-C>GOF\<C-C>joG" 87*b7e24836SBram Moolenaar let expected =<< trim END 88*b7e24836SBram Moolenaar = 89*b7e24836SBram Moolenaar A 90*b7e24836SBram Moolenaar /*** 91*b7e24836SBram Moolenaar ** B 92*b7e24836SBram Moolenaar ** C 93*b7e24836SBram Moolenaar ** D 94*b7e24836SBram Moolenaar ** E 95*b7e24836SBram Moolenaar ** F 96*b7e24836SBram Moolenaar ******/ 97*b7e24836SBram Moolenaar G 98*b7e24836SBram Moolenaar END 99*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 100*b7e24836SBram Moolenaar close! 101*b7e24836SBram Moolenaarendfunc 102*b7e24836SBram Moolenaar 103*b7e24836SBram Moolenaar" Test for the 'O' flag in 'comments' 104*b7e24836SBram Moolenaarfunc Test_comment_O() 105*b7e24836SBram Moolenaar new 106*b7e24836SBram Moolenaar setlocal comments=Ob:* fo+=ro 107*b7e24836SBram Moolenaar exe "normal i* B\nD\<C-C>kOA\<C-C>joC" 108*b7e24836SBram Moolenaar let expected =<< trim END 109*b7e24836SBram Moolenaar A 110*b7e24836SBram Moolenaar * B 111*b7e24836SBram Moolenaar * C 112*b7e24836SBram Moolenaar * D 113*b7e24836SBram Moolenaar END 114*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 115*b7e24836SBram Moolenaar close! 116*b7e24836SBram Moolenaarendfunc 117*b7e24836SBram Moolenaar 118*b7e24836SBram Moolenaar" Test for using a multibyte character as a comment leader 119*b7e24836SBram Moolenaarfunc Test_comment_multibyte_leader() 120*b7e24836SBram Moolenaar new 121*b7e24836SBram Moolenaar let t =<< trim END 122*b7e24836SBram Moolenaar { 123*b7e24836SBram Moolenaar X 124*b7e24836SBram Moolenaar Xa 125*b7e24836SBram Moolenaar XaY 126*b7e24836SBram Moolenaar XY 127*b7e24836SBram Moolenaar XYZ 128*b7e24836SBram Moolenaar X Y 129*b7e24836SBram Moolenaar X YZ 130*b7e24836SBram Moolenaar XX 131*b7e24836SBram Moolenaar XXa 132*b7e24836SBram Moolenaar XXY 133*b7e24836SBram Moolenaar } 134*b7e24836SBram Moolenaar END 135*b7e24836SBram Moolenaar call setline(1, t) 136*b7e24836SBram Moolenaar call cursor(2, 1) 137*b7e24836SBram Moolenaar 138*b7e24836SBram Moolenaar set tw=2 fo=cqm comments=n:X 139*b7e24836SBram Moolenaar exe "normal gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgq" 140*b7e24836SBram Moolenaar let t =<< trim END 141*b7e24836SBram Moolenaar X 142*b7e24836SBram Moolenaar Xa 143*b7e24836SBram Moolenaar XaY 144*b7e24836SBram Moolenaar XY 145*b7e24836SBram Moolenaar XYZ 146*b7e24836SBram Moolenaar X Y 147*b7e24836SBram Moolenaar X YZ 148*b7e24836SBram Moolenaar XX 149*b7e24836SBram Moolenaar XXa 150*b7e24836SBram Moolenaar XXY 151*b7e24836SBram Moolenaar END 152*b7e24836SBram Moolenaar exe "normal o\n" . join(t, "\n") 153*b7e24836SBram Moolenaar 154*b7e24836SBram Moolenaar let expected =<< trim END 155*b7e24836SBram Moolenaar { 156*b7e24836SBram Moolenaar X 157*b7e24836SBram Moolenaar Xa 158*b7e24836SBram Moolenaar Xa 159*b7e24836SBram Moolenaar XY 160*b7e24836SBram Moolenaar XY 161*b7e24836SBram Moolenaar XY 162*b7e24836SBram Moolenaar XZ 163*b7e24836SBram Moolenaar X Y 164*b7e24836SBram Moolenaar X Y 165*b7e24836SBram Moolenaar X Z 166*b7e24836SBram Moolenaar XX 167*b7e24836SBram Moolenaar XXa 168*b7e24836SBram Moolenaar XXY 169*b7e24836SBram Moolenaar 170*b7e24836SBram Moolenaar X 171*b7e24836SBram Moolenaar Xa 172*b7e24836SBram Moolenaar Xa 173*b7e24836SBram Moolenaar XY 174*b7e24836SBram Moolenaar XY 175*b7e24836SBram Moolenaar XY 176*b7e24836SBram Moolenaar XZ 177*b7e24836SBram Moolenaar X Y 178*b7e24836SBram Moolenaar X Y 179*b7e24836SBram Moolenaar X Z 180*b7e24836SBram Moolenaar XX 181*b7e24836SBram Moolenaar XXa 182*b7e24836SBram Moolenaar XXY 183*b7e24836SBram Moolenaar } 184*b7e24836SBram Moolenaar END 185*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 186*b7e24836SBram Moolenaar 187*b7e24836SBram Moolenaar set tw& fo& comments& 188*b7e24836SBram Moolenaar close! 189*b7e24836SBram Moolenaarendfunc 190*b7e24836SBram Moolenaar 191*b7e24836SBram Moolenaar" Test for a space character in 'comments' setting 192*b7e24836SBram Moolenaarfunc Test_comment_space() 193*b7e24836SBram Moolenaar new 194*b7e24836SBram Moolenaar setlocal comments=b:\ > fo+=ro 195*b7e24836SBram Moolenaar exe "normal i> B\nD\<C-C>ggOA\<C-C>joC" 196*b7e24836SBram Moolenaar exe "normal Go > F\nH\<C-C>kOE\<C-C>joG" 197*b7e24836SBram Moolenaar let expected =<< trim END 198*b7e24836SBram Moolenaar A 199*b7e24836SBram Moolenaar > B 200*b7e24836SBram Moolenaar C 201*b7e24836SBram Moolenaar D 202*b7e24836SBram Moolenaar > E 203*b7e24836SBram Moolenaar > F 204*b7e24836SBram Moolenaar > G 205*b7e24836SBram Moolenaar > H 206*b7e24836SBram Moolenaar END 207*b7e24836SBram Moolenaar call assert_equal(expected, getline(1, '$')) 208*b7e24836SBram Moolenaar close! 209*b7e24836SBram Moolenaarendfunc 210*b7e24836SBram Moolenaar 211*b7e24836SBram Moolenaar" Test for formatting lines with and without comments 212*b7e24836SBram Moolenaarfunc Test_comment_format_lines() 213*b7e24836SBram Moolenaar new 214*b7e24836SBram Moolenaar call setline(1, ['one', '/* two */', 'three']) 215*b7e24836SBram Moolenaar normal gggqG 216*b7e24836SBram Moolenaar call assert_equal(['one', '/* two */', 'three'], getline(1, '$')) 217*b7e24836SBram Moolenaar close! 218*b7e24836SBram Moolenaarendfunc 219*b7e24836SBram Moolenaar 220*b7e24836SBram Moolenaar" Test for using 'a' in 'formatoptions' with comments 221*b7e24836SBram Moolenaarfunc Test_comment_autoformat() 222*b7e24836SBram Moolenaar new 223*b7e24836SBram Moolenaar setlocal formatoptions+=a 224*b7e24836SBram Moolenaar call feedkeys("a- one\n- two\n", 'xt') 225*b7e24836SBram Moolenaar call assert_equal(['- one', '- two', ''], getline(1, '$')) 226*b7e24836SBram Moolenaar 227*b7e24836SBram Moolenaar %d 228*b7e24836SBram Moolenaar call feedkeys("a\none\n", 'xt') 229*b7e24836SBram Moolenaar call assert_equal(['', 'one', ''], getline(1, '$')) 230*b7e24836SBram Moolenaar 231*b7e24836SBram Moolenaar setlocal formatoptions+=aw 232*b7e24836SBram Moolenaar %d 233*b7e24836SBram Moolenaar call feedkeys("aone \ntwo\n", 'xt') 234*b7e24836SBram Moolenaar call assert_equal(['one two', ''], getline(1, '$')) 235*b7e24836SBram Moolenaar 236*b7e24836SBram Moolenaar %d 237*b7e24836SBram Moolenaar call feedkeys("aone\ntwo\n", 'xt') 238*b7e24836SBram Moolenaar call assert_equal(['one', 'two', ''], getline(1, '$')) 239*b7e24836SBram Moolenaar 240*b7e24836SBram Moolenaar close! 241*b7e24836SBram Moolenaarendfunc 242*b7e24836SBram Moolenaar 243*b7e24836SBram Moolenaar" Test for joining lines with comments ('j' flag in 'formatoptions') 244*b7e24836SBram Moolenaarfunc Test_comment_join_lines_fo_j() 245*b7e24836SBram Moolenaar new 246*b7e24836SBram Moolenaar setlocal fo+=j comments=:// 247*b7e24836SBram Moolenaar call setline(1, ['i++; // comment1', ' // comment2']) 248*b7e24836SBram Moolenaar normal J 249*b7e24836SBram Moolenaar call assert_equal('i++; // comment1 comment2', getline(1)) 250*b7e24836SBram Moolenaar setlocal fo-=j 251*b7e24836SBram Moolenaar call setline(1, ['i++; // comment1', ' // comment2']) 252*b7e24836SBram Moolenaar normal J 253*b7e24836SBram Moolenaar call assert_equal('i++; // comment1 // comment2', getline(1)) 254*b7e24836SBram Moolenaar " Test with nested comments 255*b7e24836SBram Moolenaar setlocal fo+=j comments=n:>,n:) 256*b7e24836SBram Moolenaar call setline(1, ['i++; > ) > ) comment1', ' > ) comment2']) 257*b7e24836SBram Moolenaar normal J 258*b7e24836SBram Moolenaar call assert_equal('i++; > ) > ) comment1 comment2', getline(1)) 259*b7e24836SBram Moolenaar close! 260*b7e24836SBram Moolenaarendfunc 261*b7e24836SBram Moolenaar 262*b7e24836SBram Moolenaar" Test for formatting lines where only the first line has a comment. 263*b7e24836SBram Moolenaarfunc Test_comment_format_firstline_comment() 264*b7e24836SBram Moolenaar new 265*b7e24836SBram Moolenaar setlocal formatoptions=tcq 266*b7e24836SBram Moolenaar call setline(1, ['- one two', 'three']) 267*b7e24836SBram Moolenaar normal gggqG 268*b7e24836SBram Moolenaar call assert_equal(['- one two three'], getline(1, '$')) 269*b7e24836SBram Moolenaar 270*b7e24836SBram Moolenaar %d 271*b7e24836SBram Moolenaar call setline(1, ['- one', '- two']) 272*b7e24836SBram Moolenaar normal gggqG 273*b7e24836SBram Moolenaar call assert_equal(['- one', '- two'], getline(1, '$')) 274*b7e24836SBram Moolenaar close! 275*b7e24836SBram Moolenaarendfunc 276*b7e24836SBram Moolenaar 277*b7e24836SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 278