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 Moolenaar124*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 Moolenaar142*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 Moolenaar157*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 Moolenaar171*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