xref: /vim-8.2.3635/src/testdir/test_vartabs.vim (revision 04958cba)
1*04958cbaSBram Moolenaar" Test for variable tabstops
2*04958cbaSBram Moolenaar
3*04958cbaSBram Moolenaarif !has("vartabs")
4*04958cbaSBram Moolenaar  finish
5*04958cbaSBram Moolenaarendif
6*04958cbaSBram Moolenaar
7*04958cbaSBram Moolenaarfunc! Test_vartabs()
8*04958cbaSBram Moolenaar  new
9*04958cbaSBram Moolenaar  %d
10*04958cbaSBram Moolenaar
11*04958cbaSBram Moolenaar  " Test normal operation of tabstops ...
12*04958cbaSBram Moolenaar  set ts=4
13*04958cbaSBram Moolenaar  call setline(1, join(split('aaaaa', '\zs'), "\t"))
14*04958cbaSBram Moolenaar  retab 8
15*04958cbaSBram Moolenaar  let expect = "a   a\<tab>a   a\<tab>a"
16*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
17*04958cbaSBram Moolenaar
18*04958cbaSBram Moolenaar  " ... and softtabstops
19*04958cbaSBram Moolenaar  set ts=8 sts=6
20*04958cbaSBram Moolenaar  exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
21*04958cbaSBram Moolenaar  let expect = "b     b\<tab>    b\<tab>  b\<tab>b"
22*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
23*04958cbaSBram Moolenaar
24*04958cbaSBram Moolenaar  " Test variable tabstops.
25*04958cbaSBram Moolenaar  set sts=0 vts=4,8,4,8
26*04958cbaSBram Moolenaar  exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
27*04958cbaSBram Moolenaar  retab 8
28*04958cbaSBram Moolenaar  let expect = "c   c\<tab>    c\<tab>c\<tab>c\<tab>c"
29*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
30*04958cbaSBram Moolenaar
31*04958cbaSBram Moolenaar  set et vts=4,8,4,8
32*04958cbaSBram Moolenaar  exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
33*04958cbaSBram Moolenaar  let expect = "d   d       d   d       d       d"
34*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
35*04958cbaSBram Moolenaar
36*04958cbaSBram Moolenaar  " Changing ts should have no effect if vts is in use.
37*04958cbaSBram Moolenaar  call cursor(1, 1)
38*04958cbaSBram Moolenaar  set ts=6
39*04958cbaSBram Moolenaar  exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
40*04958cbaSBram Moolenaar  let expect = "e   e       e   e       e       e"
41*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
42*04958cbaSBram Moolenaar
43*04958cbaSBram Moolenaar  " Clearing vts should revert to using ts.
44*04958cbaSBram Moolenaar  set vts=
45*04958cbaSBram Moolenaar  exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
46*04958cbaSBram Moolenaar  let expect = "f     f     f     f     f     f"
47*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
48*04958cbaSBram Moolenaar
49*04958cbaSBram Moolenaar  " Test variable softtabstops.
50*04958cbaSBram Moolenaar  set noet ts=8 vsts=12,2,6
51*04958cbaSBram Moolenaar  exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
52*04958cbaSBram Moolenaar  let expect = "g\<tab>    g g\<tab>    g\<tab>  g\<tab>g"
53*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
54*04958cbaSBram Moolenaar
55*04958cbaSBram Moolenaar  " Variable tabstops and softtabstops combined.
56*04958cbaSBram Moolenaar  set vsts=6,12,8 vts=4,6,8
57*04958cbaSBram Moolenaar  exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
58*04958cbaSBram Moolenaar  let expect = "h\<tab>  h\<tab>\<tab>h\<tab>h\<tab>h"
59*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
60*04958cbaSBram Moolenaar
61*04958cbaSBram Moolenaar  " Retab with a single value, not using vts.
62*04958cbaSBram Moolenaar  set ts=8 sts=0 vts= vsts=
63*04958cbaSBram Moolenaar  exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
64*04958cbaSBram Moolenaar  retab 4
65*04958cbaSBram Moolenaar  let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
66*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
67*04958cbaSBram Moolenaar
68*04958cbaSBram Moolenaar  " Retab with a single value, using vts.
69*04958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
70*04958cbaSBram Moolenaar  exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
71*04958cbaSBram Moolenaar  retab 4
72*04958cbaSBram Moolenaar  let expect = "j\<tab>  j\<tab>\<tab>j\<tab>  j\<tab>\<tab>j"
73*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
74*04958cbaSBram Moolenaar
75*04958cbaSBram Moolenaar  " Retab with multiple values, not using vts.
76*04958cbaSBram Moolenaar  set ts=6 sts=0 vts= vsts=
77*04958cbaSBram Moolenaar  exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
78*04958cbaSBram Moolenaar  retab 4,8
79*04958cbaSBram Moolenaar  let expect = "k\<tab>  k\<tab>k     k\<tab>    k\<tab>  k"
80*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
81*04958cbaSBram Moolenaar
82*04958cbaSBram Moolenaar  " Retab with multiple values, using vts.
83*04958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
84*04958cbaSBram Moolenaar  exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
85*04958cbaSBram Moolenaar  retab 4,8
86*04958cbaSBram Moolenaar  let expect = "l\<tab>  l\<tab>l     l\<tab>    l\<tab>  l"
87*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
88*04958cbaSBram Moolenaar
89*04958cbaSBram Moolenaar  " Check that global and local values are set.
90*04958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
91*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
92*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
93*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
94*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
95*04958cbaSBram Moolenaar  new
96*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
97*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
98*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
99*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
100*04958cbaSBram Moolenaar  bwipeout!
101*04958cbaSBram Moolenaar
102*04958cbaSBram Moolenaar  " Check that local values only are set.
103*04958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
104*04958cbaSBram Moolenaar  call assert_equal(&ts, 5)
105*04958cbaSBram Moolenaar  call assert_equal(&vts, '7')
106*04958cbaSBram Moolenaar  call assert_equal(&sts, 9)
107*04958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
108*04958cbaSBram Moolenaar  new
109*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
110*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
111*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
112*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
113*04958cbaSBram Moolenaar  bwipeout!
114*04958cbaSBram Moolenaar
115*04958cbaSBram Moolenaar  " Check that global values only are set.
116*04958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
117*04958cbaSBram Moolenaar  call assert_equal(&ts, 5)
118*04958cbaSBram Moolenaar  call assert_equal(&vts, '7')
119*04958cbaSBram Moolenaar  call assert_equal(&sts, 9)
120*04958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
121*04958cbaSBram Moolenaar  new
122*04958cbaSBram Moolenaar  call assert_equal(&ts, 6)
123*04958cbaSBram Moolenaar  call assert_equal(&vts, '8')
124*04958cbaSBram Moolenaar  call assert_equal(&sts, 10)
125*04958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
126*04958cbaSBram Moolenaar  bwipeout!
127*04958cbaSBram Moolenaar
128*04958cbaSBram Moolenaar  set ts& vts& sts& vsts& et&
129*04958cbaSBram Moolenaar  bwipeout!
130*04958cbaSBram Moolenaarendfunc
131*04958cbaSBram Moolenaar
132*04958cbaSBram Moolenaarfunc! Test_vartabs_breakindent()
133*04958cbaSBram Moolenaar  if !exists("+breakindent")
134*04958cbaSBram Moolenaar    return
135*04958cbaSBram Moolenaar  endif
136*04958cbaSBram Moolenaar  new
137*04958cbaSBram Moolenaar  %d
138*04958cbaSBram Moolenaar
139*04958cbaSBram Moolenaar  " Test normal operation of tabstops ...
140*04958cbaSBram Moolenaar  set ts=4
141*04958cbaSBram Moolenaar  call setline(1, join(split('aaaaa', '\zs'), "\t"))
142*04958cbaSBram Moolenaar  retab 8
143*04958cbaSBram Moolenaar  let expect = "a   a\<tab>a   a\<tab>a"
144*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
145*04958cbaSBram Moolenaar
146*04958cbaSBram Moolenaar  " ... and softtabstops
147*04958cbaSBram Moolenaar  set ts=8 sts=6
148*04958cbaSBram Moolenaar  exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
149*04958cbaSBram Moolenaar  let expect = "b     b\<tab>    b\<tab>  b\<tab>b"
150*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
151*04958cbaSBram Moolenaar
152*04958cbaSBram Moolenaar  " Test variable tabstops.
153*04958cbaSBram Moolenaar  set sts=0 vts=4,8,4,8
154*04958cbaSBram Moolenaar  exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
155*04958cbaSBram Moolenaar  retab 8
156*04958cbaSBram Moolenaar  let expect = "c   c\<tab>    c\<tab>c\<tab>c\<tab>c"
157*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
158*04958cbaSBram Moolenaar
159*04958cbaSBram Moolenaar  set et vts=4,8,4,8
160*04958cbaSBram Moolenaar  exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
161*04958cbaSBram Moolenaar  let expect = "d   d       d   d       d       d"
162*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
163*04958cbaSBram Moolenaar
164*04958cbaSBram Moolenaar  " Changing ts should have no effect if vts is in use.
165*04958cbaSBram Moolenaar  call cursor(1, 1)
166*04958cbaSBram Moolenaar  set ts=6
167*04958cbaSBram Moolenaar  exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
168*04958cbaSBram Moolenaar  let expect = "e   e       e   e       e       e"
169*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
170*04958cbaSBram Moolenaar
171*04958cbaSBram Moolenaar  " Clearing vts should revert to using ts.
172*04958cbaSBram Moolenaar  set vts=
173*04958cbaSBram Moolenaar  exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
174*04958cbaSBram Moolenaar  let expect = "f     f     f     f     f     f"
175*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
176*04958cbaSBram Moolenaar
177*04958cbaSBram Moolenaar  " Test variable softtabstops.
178*04958cbaSBram Moolenaar  set noet ts=8 vsts=12,2,6
179*04958cbaSBram Moolenaar  exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
180*04958cbaSBram Moolenaar  let expect = "g\<tab>    g g\<tab>    g\<tab>  g\<tab>g"
181*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
182*04958cbaSBram Moolenaar
183*04958cbaSBram Moolenaar  " Variable tabstops and softtabstops combined.
184*04958cbaSBram Moolenaar  set vsts=6,12,8 vts=4,6,8
185*04958cbaSBram Moolenaar  exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
186*04958cbaSBram Moolenaar  let expect = "h\<tab>  h\<tab>\<tab>h\<tab>h\<tab>h"
187*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
188*04958cbaSBram Moolenaar
189*04958cbaSBram Moolenaar  " Retab with a single value, not using vts.
190*04958cbaSBram Moolenaar  set ts=8 sts=0 vts= vsts=
191*04958cbaSBram Moolenaar  exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
192*04958cbaSBram Moolenaar  retab 4
193*04958cbaSBram Moolenaar  let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
194*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
195*04958cbaSBram Moolenaar
196*04958cbaSBram Moolenaar  " Retab with a single value, using vts.
197*04958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
198*04958cbaSBram Moolenaar  exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
199*04958cbaSBram Moolenaar  retab 4
200*04958cbaSBram Moolenaar  let expect = "j\<tab>  j\<tab>\<tab>j\<tab>  j\<tab>\<tab>j"
201*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
202*04958cbaSBram Moolenaar
203*04958cbaSBram Moolenaar  " Retab with multiple values, not using vts.
204*04958cbaSBram Moolenaar  set ts=6 sts=0 vts= vsts=
205*04958cbaSBram Moolenaar  exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
206*04958cbaSBram Moolenaar  retab 4,8
207*04958cbaSBram Moolenaar  let expect = "k\<tab>  k\<tab>k     k\<tab>    k\<tab>  k"
208*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
209*04958cbaSBram Moolenaar
210*04958cbaSBram Moolenaar  " Retab with multiple values, using vts.
211*04958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
212*04958cbaSBram Moolenaar  exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
213*04958cbaSBram Moolenaar  retab 4,8
214*04958cbaSBram Moolenaar  let expect = "l\<tab>  l\<tab>l     l\<tab>    l\<tab>  l"
215*04958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
216*04958cbaSBram Moolenaar
217*04958cbaSBram Moolenaar  " Check that global and local values are set.
218*04958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
219*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
220*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
221*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
222*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
223*04958cbaSBram Moolenaar  new
224*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
225*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
226*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
227*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
228*04958cbaSBram Moolenaar  bwipeout!
229*04958cbaSBram Moolenaar
230*04958cbaSBram Moolenaar  " Check that local values only are set.
231*04958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
232*04958cbaSBram Moolenaar  call assert_equal(&ts, 5)
233*04958cbaSBram Moolenaar  call assert_equal(&vts, '7')
234*04958cbaSBram Moolenaar  call assert_equal(&sts, 9)
235*04958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
236*04958cbaSBram Moolenaar  new
237*04958cbaSBram Moolenaar  call assert_equal(&ts, 4)
238*04958cbaSBram Moolenaar  call assert_equal(&vts, '6')
239*04958cbaSBram Moolenaar  call assert_equal(&sts, 8)
240*04958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
241*04958cbaSBram Moolenaar  bwipeout!
242*04958cbaSBram Moolenaar
243*04958cbaSBram Moolenaar  " Check that global values only are set.
244*04958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
245*04958cbaSBram Moolenaar  call assert_equal(&ts, 5)
246*04958cbaSBram Moolenaar  call assert_equal(&vts, '7')
247*04958cbaSBram Moolenaar  call assert_equal(&sts, 9)
248*04958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
249*04958cbaSBram Moolenaar  new
250*04958cbaSBram Moolenaar  call assert_equal(&ts, 6)
251*04958cbaSBram Moolenaar  call assert_equal(&vts, '8')
252*04958cbaSBram Moolenaar  call assert_equal(&sts, 10)
253*04958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
254*04958cbaSBram Moolenaar  bwipeout!
255*04958cbaSBram Moolenaar
256*04958cbaSBram Moolenaar  bwipeout!
257*04958cbaSBram Moolenaarendfunc
258