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 Moolenaar580afc13bd8SBram 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 Moolenaar592afc13bd8SBram 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 Moolenaar603afc13bd8SBram Moolenaar604afc13bd8SBram Moolenaar    a
605afc13bd8SBram Moolenaar606afc13bd8SBram Moolenaar    a
607afc13bd8SBram Moolenaar608afc13bd8SBram Moolenaar609afc13bd8SBram Moolenaar610afc13bd8SBram Moolenaar611afc13bd8SBram Moolenaar
612afc13bd8SBram Moolenaar613afc13bd8SBram Moolenaar614afc13bd8SBram Moolenaar    a
615afc13bd8SBram Moolenaar616afc13bd8SBram Moolenaar    a
617afc13bd8SBram Moolenaar618afc13bd8SBram Moolenaar619afc13bd8SBram Moolenaar620afc13bd8SBram Moolenaar621afc13bd8SBram 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 Moolenaar635afc13bd8SBram 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 Moolenaar652afc13bd8SBram 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 Moolenaar668afc13bd8SBram Moolenaar669afc13bd8SBram Moolenaar    a
670afc13bd8SBram Moolenaar671afc13bd8SBram Moolenaar    a
672afc13bd8SBram Moolenaar673afc13bd8SBram Moolenaar674afc13bd8SBram Moolenaar675afc13bd8SBram Moolenaar676afc13bd8SBram Moolenaar    a
677afc13bd8SBram Moolenaar678afc13bd8SBram Moolenaar    ab
679afc13bd8SBram Moolenaar680afc13bd8SBram Moolenaar    abc
681afc13bd8SBram Moolenaar682afc13bd8SBram Moolenaar    ab
683afc13bd8SBram Moolenaar684afc13bd8SBram Moolenaar    c
685afc13bd8SBram Moolenaar    ab
686afc13bd8SBram Moolenaar687afc13bd8SBram Moolenaar688afc13bd8SBram Moolenaar
689afc13bd8SBram Moolenaar690afc13bd8SBram Moolenaar691afc13bd8SBram Moolenaar    a
692afc13bd8SBram Moolenaar693afc13bd8SBram Moolenaar    a
694afc13bd8SBram Moolenaar695afc13bd8SBram Moolenaar696afc13bd8SBram Moolenaar697afc13bd8SBram Moolenaar698afc13bd8SBram Moolenaar    a
699afc13bd8SBram Moolenaar700afc13bd8SBram Moolenaar    ab
701afc13bd8SBram Moolenaar702afc13bd8SBram Moolenaar    abc
703afc13bd8SBram Moolenaar704afc13bd8SBram Moolenaar    ab
705afc13bd8SBram Moolenaar706afc13bd8SBram Moolenaar    c
707afc13bd8SBram Moolenaar    ab
708afc13bd8SBram Moolenaar709afc13bd8SBram Moolenaar710afc13bd8SBram 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 Moolenaar724afc13bd8SBram 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 Moolenaar733afc13bd8SBram 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 Moolenaar741afc13bd8SBram Moolenaar742afc13bd8SBram Moolenaar      a
743afc13bd8SBram Moolenaar
744afc13bd8SBram Moolenaar745afc13bd8SBram Moolenaar746afc13bd8SBram 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 Moolenaar761afc13bd8SBram 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 Moolenaar773afc13bd8SBram Moolenaar774afc13bd8SBram Moolenaar    a
775afc13bd8SBram Moolenaar
776afc13bd8SBram Moolenaar777afc13bd8SBram Moolenaar778afc13bd8SBram 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 Moolenaar803afc13bd8SBram 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