xref: /vim-8.2.3635/src/testdir/test_vartabs.vim (revision f951416a)
104958cbaSBram Moolenaar" Test for variable tabstops
204958cbaSBram Moolenaar
304958cbaSBram Moolenaarif !has("vartabs")
404958cbaSBram Moolenaar  finish
504958cbaSBram Moolenaarendif
604958cbaSBram Moolenaar
7a87b72ccSBram Moolenaarsource view_util.vim
864f41074SBram Moolenaarfunc s:compare_lines(expect, actual)
9a87b72ccSBram Moolenaar  call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
1064f41074SBram Moolenaarendfunc
11a87b72ccSBram Moolenaar
1264f41074SBram Moolenaarfunc Test_vartabs()
1304958cbaSBram Moolenaar  new
1404958cbaSBram Moolenaar  %d
1504958cbaSBram Moolenaar
1604958cbaSBram Moolenaar  " Test normal operation of tabstops ...
1704958cbaSBram Moolenaar  set ts=4
1804958cbaSBram Moolenaar  call setline(1, join(split('aaaaa', '\zs'), "\t"))
1904958cbaSBram Moolenaar  retab 8
2004958cbaSBram Moolenaar  let expect = "a   a\<tab>a   a\<tab>a"
2104958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
2204958cbaSBram Moolenaar
2304958cbaSBram Moolenaar  " ... and softtabstops
2404958cbaSBram Moolenaar  set ts=8 sts=6
2504958cbaSBram Moolenaar  exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
2604958cbaSBram Moolenaar  let expect = "b     b\<tab>    b\<tab>  b\<tab>b"
2704958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
2804958cbaSBram Moolenaar
2904958cbaSBram Moolenaar  " Test variable tabstops.
3004958cbaSBram Moolenaar  set sts=0 vts=4,8,4,8
3104958cbaSBram Moolenaar  exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
3204958cbaSBram Moolenaar  retab 8
3304958cbaSBram Moolenaar  let expect = "c   c\<tab>    c\<tab>c\<tab>c\<tab>c"
3404958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
3504958cbaSBram Moolenaar
3604958cbaSBram Moolenaar  set et vts=4,8,4,8
3704958cbaSBram Moolenaar  exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
3804958cbaSBram Moolenaar  let expect = "d   d       d   d       d       d"
3904958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
4004958cbaSBram Moolenaar
4104958cbaSBram Moolenaar  " Changing ts should have no effect if vts is in use.
4204958cbaSBram Moolenaar  call cursor(1, 1)
4304958cbaSBram Moolenaar  set ts=6
4404958cbaSBram Moolenaar  exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
4504958cbaSBram Moolenaar  let expect = "e   e       e   e       e       e"
4604958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
4704958cbaSBram Moolenaar
4804958cbaSBram Moolenaar  " Clearing vts should revert to using ts.
4904958cbaSBram Moolenaar  set vts=
5004958cbaSBram Moolenaar  exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
5104958cbaSBram Moolenaar  let expect = "f     f     f     f     f     f"
5204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
5304958cbaSBram Moolenaar
5404958cbaSBram Moolenaar  " Test variable softtabstops.
5504958cbaSBram Moolenaar  set noet ts=8 vsts=12,2,6
5604958cbaSBram Moolenaar  exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
5704958cbaSBram Moolenaar  let expect = "g\<tab>    g g\<tab>    g\<tab>  g\<tab>g"
5804958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
5904958cbaSBram Moolenaar
6004958cbaSBram Moolenaar  " Variable tabstops and softtabstops combined.
6104958cbaSBram Moolenaar  set vsts=6,12,8 vts=4,6,8
6204958cbaSBram Moolenaar  exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
6304958cbaSBram Moolenaar  let expect = "h\<tab>  h\<tab>\<tab>h\<tab>h\<tab>h"
6404958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
6504958cbaSBram Moolenaar
6604958cbaSBram Moolenaar  " Retab with a single value, not using vts.
6704958cbaSBram Moolenaar  set ts=8 sts=0 vts= vsts=
6804958cbaSBram Moolenaar  exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
6904958cbaSBram Moolenaar  retab 4
7004958cbaSBram Moolenaar  let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
7104958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
7204958cbaSBram Moolenaar
7304958cbaSBram Moolenaar  " Retab with a single value, using vts.
7404958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
7504958cbaSBram Moolenaar  exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
7604958cbaSBram Moolenaar  retab 4
7704958cbaSBram Moolenaar  let expect = "j\<tab>  j\<tab>\<tab>j\<tab>  j\<tab>\<tab>j"
7804958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
7904958cbaSBram Moolenaar
8004958cbaSBram Moolenaar  " Retab with multiple values, not using vts.
8104958cbaSBram Moolenaar  set ts=6 sts=0 vts= vsts=
8204958cbaSBram Moolenaar  exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
8304958cbaSBram Moolenaar  retab 4,8
8404958cbaSBram Moolenaar  let expect = "k\<tab>  k\<tab>k     k\<tab>    k\<tab>  k"
8504958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
8604958cbaSBram Moolenaar
8704958cbaSBram Moolenaar  " Retab with multiple values, using vts.
8804958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
8904958cbaSBram Moolenaar  exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
9004958cbaSBram Moolenaar  retab 4,8
9104958cbaSBram Moolenaar  let expect = "l\<tab>  l\<tab>l     l\<tab>    l\<tab>  l"
9204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
9304958cbaSBram Moolenaar
9404958cbaSBram Moolenaar  " Check that global and local values are set.
9504958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
9604958cbaSBram Moolenaar  call assert_equal(&ts, 4)
9704958cbaSBram Moolenaar  call assert_equal(&vts, '6')
9804958cbaSBram Moolenaar  call assert_equal(&sts, 8)
9904958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
10004958cbaSBram Moolenaar  new
10104958cbaSBram Moolenaar  call assert_equal(&ts, 4)
10204958cbaSBram Moolenaar  call assert_equal(&vts, '6')
10304958cbaSBram Moolenaar  call assert_equal(&sts, 8)
10404958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
10504958cbaSBram Moolenaar  bwipeout!
10604958cbaSBram Moolenaar
10704958cbaSBram Moolenaar  " Check that local values only are set.
10804958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
10904958cbaSBram Moolenaar  call assert_equal(&ts, 5)
11004958cbaSBram Moolenaar  call assert_equal(&vts, '7')
11104958cbaSBram Moolenaar  call assert_equal(&sts, 9)
11204958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
11304958cbaSBram Moolenaar  new
11404958cbaSBram Moolenaar  call assert_equal(&ts, 4)
11504958cbaSBram Moolenaar  call assert_equal(&vts, '6')
11604958cbaSBram Moolenaar  call assert_equal(&sts, 8)
11704958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
11804958cbaSBram Moolenaar  bwipeout!
11904958cbaSBram Moolenaar
12004958cbaSBram Moolenaar  " Check that global values only are set.
12104958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
12204958cbaSBram Moolenaar  call assert_equal(&ts, 5)
12304958cbaSBram Moolenaar  call assert_equal(&vts, '7')
12404958cbaSBram Moolenaar  call assert_equal(&sts, 9)
12504958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
12604958cbaSBram Moolenaar  new
12704958cbaSBram Moolenaar  call assert_equal(&ts, 6)
12804958cbaSBram Moolenaar  call assert_equal(&vts, '8')
12904958cbaSBram Moolenaar  call assert_equal(&sts, 10)
13004958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
13104958cbaSBram Moolenaar  bwipeout!
13204958cbaSBram Moolenaar
13304958cbaSBram Moolenaar  set ts& vts& sts& vsts& et&
13404958cbaSBram Moolenaar  bwipeout!
13504958cbaSBram Moolenaarendfunc
13604958cbaSBram Moolenaar
13704958cbaSBram Moolenaarfunc! Test_vartabs_breakindent()
13804958cbaSBram Moolenaar  if !exists("+breakindent")
13904958cbaSBram Moolenaar    return
14004958cbaSBram Moolenaar  endif
14104958cbaSBram Moolenaar  new
14204958cbaSBram Moolenaar  %d
14304958cbaSBram Moolenaar
14404958cbaSBram Moolenaar  " Test normal operation of tabstops ...
14504958cbaSBram Moolenaar  set ts=4
14604958cbaSBram Moolenaar  call setline(1, join(split('aaaaa', '\zs'), "\t"))
14704958cbaSBram Moolenaar  retab 8
14804958cbaSBram Moolenaar  let expect = "a   a\<tab>a   a\<tab>a"
14904958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
15004958cbaSBram Moolenaar
15104958cbaSBram Moolenaar  " ... and softtabstops
15204958cbaSBram Moolenaar  set ts=8 sts=6
15304958cbaSBram Moolenaar  exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
15404958cbaSBram Moolenaar  let expect = "b     b\<tab>    b\<tab>  b\<tab>b"
15504958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
15604958cbaSBram Moolenaar
15704958cbaSBram Moolenaar  " Test variable tabstops.
15804958cbaSBram Moolenaar  set sts=0 vts=4,8,4,8
15904958cbaSBram Moolenaar  exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
16004958cbaSBram Moolenaar  retab 8
16104958cbaSBram Moolenaar  let expect = "c   c\<tab>    c\<tab>c\<tab>c\<tab>c"
16204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
16304958cbaSBram Moolenaar
16404958cbaSBram Moolenaar  set et vts=4,8,4,8
16504958cbaSBram Moolenaar  exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
16604958cbaSBram Moolenaar  let expect = "d   d       d   d       d       d"
16704958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
16804958cbaSBram Moolenaar
16904958cbaSBram Moolenaar  " Changing ts should have no effect if vts is in use.
17004958cbaSBram Moolenaar  call cursor(1, 1)
17104958cbaSBram Moolenaar  set ts=6
17204958cbaSBram Moolenaar  exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
17304958cbaSBram Moolenaar  let expect = "e   e       e   e       e       e"
17404958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
17504958cbaSBram Moolenaar
17604958cbaSBram Moolenaar  " Clearing vts should revert to using ts.
17704958cbaSBram Moolenaar  set vts=
17804958cbaSBram Moolenaar  exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
17904958cbaSBram Moolenaar  let expect = "f     f     f     f     f     f"
18004958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
18104958cbaSBram Moolenaar
18204958cbaSBram Moolenaar  " Test variable softtabstops.
18304958cbaSBram Moolenaar  set noet ts=8 vsts=12,2,6
18404958cbaSBram Moolenaar  exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
18504958cbaSBram Moolenaar  let expect = "g\<tab>    g g\<tab>    g\<tab>  g\<tab>g"
18604958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
18704958cbaSBram Moolenaar
18804958cbaSBram Moolenaar  " Variable tabstops and softtabstops combined.
18904958cbaSBram Moolenaar  set vsts=6,12,8 vts=4,6,8
19004958cbaSBram Moolenaar  exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
19104958cbaSBram Moolenaar  let expect = "h\<tab>  h\<tab>\<tab>h\<tab>h\<tab>h"
19204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
19304958cbaSBram Moolenaar
19404958cbaSBram Moolenaar  " Retab with a single value, not using vts.
19504958cbaSBram Moolenaar  set ts=8 sts=0 vts= vsts=
19604958cbaSBram Moolenaar  exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
19704958cbaSBram Moolenaar  retab 4
19804958cbaSBram Moolenaar  let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
19904958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
20004958cbaSBram Moolenaar
20104958cbaSBram Moolenaar  " Retab with a single value, using vts.
20204958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
20304958cbaSBram Moolenaar  exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
20404958cbaSBram Moolenaar  retab 4
20504958cbaSBram Moolenaar  let expect = "j\<tab>  j\<tab>\<tab>j\<tab>  j\<tab>\<tab>j"
20604958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
20704958cbaSBram Moolenaar
20804958cbaSBram Moolenaar  " Retab with multiple values, not using vts.
20904958cbaSBram Moolenaar  set ts=6 sts=0 vts= vsts=
21004958cbaSBram Moolenaar  exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
21104958cbaSBram Moolenaar  retab 4,8
21204958cbaSBram Moolenaar  let expect = "k\<tab>  k\<tab>k     k\<tab>    k\<tab>  k"
21304958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
21404958cbaSBram Moolenaar
21504958cbaSBram Moolenaar  " Retab with multiple values, using vts.
21604958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
21704958cbaSBram Moolenaar  exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
21804958cbaSBram Moolenaar  retab 4,8
21904958cbaSBram Moolenaar  let expect = "l\<tab>  l\<tab>l     l\<tab>    l\<tab>  l"
22004958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
22104958cbaSBram Moolenaar
22204958cbaSBram Moolenaar  " Check that global and local values are set.
22304958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
22404958cbaSBram Moolenaar  call assert_equal(&ts, 4)
22504958cbaSBram Moolenaar  call assert_equal(&vts, '6')
22604958cbaSBram Moolenaar  call assert_equal(&sts, 8)
22704958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
22804958cbaSBram Moolenaar  new
22904958cbaSBram Moolenaar  call assert_equal(&ts, 4)
23004958cbaSBram Moolenaar  call assert_equal(&vts, '6')
23104958cbaSBram Moolenaar  call assert_equal(&sts, 8)
23204958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
23304958cbaSBram Moolenaar  bwipeout!
23404958cbaSBram Moolenaar
23504958cbaSBram Moolenaar  " Check that local values only are set.
23604958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
23704958cbaSBram Moolenaar  call assert_equal(&ts, 5)
23804958cbaSBram Moolenaar  call assert_equal(&vts, '7')
23904958cbaSBram Moolenaar  call assert_equal(&sts, 9)
24004958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
24104958cbaSBram Moolenaar  new
24204958cbaSBram Moolenaar  call assert_equal(&ts, 4)
24304958cbaSBram Moolenaar  call assert_equal(&vts, '6')
24404958cbaSBram Moolenaar  call assert_equal(&sts, 8)
24504958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
24604958cbaSBram Moolenaar  bwipeout!
24704958cbaSBram Moolenaar
24804958cbaSBram Moolenaar  " Check that global values only are set.
24904958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
25004958cbaSBram Moolenaar  call assert_equal(&ts, 5)
25104958cbaSBram Moolenaar  call assert_equal(&vts, '7')
25204958cbaSBram Moolenaar  call assert_equal(&sts, 9)
25304958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
25404958cbaSBram Moolenaar  new
25504958cbaSBram Moolenaar  call assert_equal(&ts, 6)
25604958cbaSBram Moolenaar  call assert_equal(&vts, '8')
25704958cbaSBram Moolenaar  call assert_equal(&sts, 10)
25804958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
25904958cbaSBram Moolenaar  bwipeout!
26004958cbaSBram Moolenaar
26104958cbaSBram Moolenaar  bwipeout!
26204958cbaSBram Moolenaarendfunc
263a87b72ccSBram Moolenaar
26464f41074SBram Moolenaarfunc Test_vartabs_linebreak()
265307ac5c6SBram Moolenaar  if winwidth(0) < 40
266a87b72ccSBram Moolenaar    return
267a87b72ccSBram Moolenaar  endif
268a87b72ccSBram Moolenaar  new
269307ac5c6SBram Moolenaar  40vnew
270a87b72ccSBram Moolenaar  %d
271307ac5c6SBram Moolenaar  setl linebreak vartabstop=10,20,30,40
272a87b72ccSBram Moolenaar  call setline(1, "\tx\tx\tx\tx")
273a87b72ccSBram Moolenaar
274307ac5c6SBram Moolenaar  let expect = ['          x                             ',
275307ac5c6SBram Moolenaar        \       'x                   x                   ',
276a87b72ccSBram Moolenaar        \       'x                                       ']
277307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
278307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
279307ac5c6SBram Moolenaar  setl list listchars=tab:>-
280307ac5c6SBram Moolenaar  let expect = ['>---------x>------------------          ',
281307ac5c6SBram Moolenaar        \       'x>------------------x>------------------',
282307ac5c6SBram Moolenaar        \       'x                                       ']
283307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
284307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
285307ac5c6SBram Moolenaar  setl linebreak vartabstop=40
286307ac5c6SBram Moolenaar  let expect = ['>---------------------------------------',
287307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
288307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
289307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
290307ac5c6SBram Moolenaar        \       'x                                       ']
291307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 5], winwidth(0))
292a87b72ccSBram Moolenaar  call s:compare_lines(expect, lines)
293a87b72ccSBram Moolenaar
294a87b72ccSBram Moolenaar  " cleanup
295a87b72ccSBram Moolenaar  bw!
296a87b72ccSBram Moolenaar  bw!
297307ac5c6SBram Moolenaar  set nolist listchars&vim
298a87b72ccSBram Moolenaarendfunc
29964f41074SBram Moolenaar
300*f951416aSBram Moolenaarfunc Test_vartabs_shiftwidth()
301*f951416aSBram Moolenaar  "return
302*f951416aSBram Moolenaar  if winwidth(0) < 40
303*f951416aSBram Moolenaar    return
304*f951416aSBram Moolenaar  endif
305*f951416aSBram Moolenaar  new
306*f951416aSBram Moolenaar  40vnew
307*f951416aSBram Moolenaar  %d
308*f951416aSBram Moolenaar"  setl varsofttabstop=10,20,30,40
309*f951416aSBram Moolenaar  setl shiftwidth=0 vartabstop=10,20,30,40
310*f951416aSBram Moolenaar  call setline(1, "x")
311*f951416aSBram Moolenaar
312*f951416aSBram Moolenaar  " Check without any change.
313*f951416aSBram Moolenaar  let expect = ['x                                       ']
314*f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
315*f951416aSBram Moolenaar  call s:compare_lines(expect, lines)
316*f951416aSBram Moolenaar  " Test 1:
317*f951416aSBram Moolenaar  " shiftwidth depends on the indent, first check with cursor at the end of the
318*f951416aSBram Moolenaar  " line (which is the same as the start of the line, since there is only one
319*f951416aSBram Moolenaar  " character).
320*f951416aSBram Moolenaar  norm! $>>
321*f951416aSBram Moolenaar  let expect1 = ['          x                             ']
322*f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
323*f951416aSBram Moolenaar  call s:compare_lines(expect1, lines)
324*f951416aSBram Moolenaar  call assert_equal(10, shiftwidth())
325*f951416aSBram Moolenaar  call assert_equal(10, shiftwidth(1))
326*f951416aSBram Moolenaar  call assert_equal(20, shiftwidth(virtcol('.')))
327*f951416aSBram Moolenaar  norm! $>>
328*f951416aSBram Moolenaar  let expect2 = ['                              x         ', '~                                       ']
329*f951416aSBram Moolenaar  let lines = ScreenLines([1, 2], winwidth(0))
330*f951416aSBram Moolenaar  call s:compare_lines(expect2, lines)
331*f951416aSBram Moolenaar  call assert_equal(20, shiftwidth(virtcol('.')-2))
332*f951416aSBram Moolenaar  call assert_equal(30, shiftwidth(virtcol('.')))
333*f951416aSBram Moolenaar  norm! $>>
334*f951416aSBram Moolenaar  let expect3 = ['                                        ', '                    x                   ', '~                                       ']
335*f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
336*f951416aSBram Moolenaar  call s:compare_lines(expect3, lines)
337*f951416aSBram Moolenaar  call assert_equal(30, shiftwidth(virtcol('.')-2))
338*f951416aSBram Moolenaar  call assert_equal(40, shiftwidth(virtcol('.')))
339*f951416aSBram Moolenaar  norm! $>>
340*f951416aSBram Moolenaar  let expect4 = ['                                        ', '                                        ', '                    x                   ']
341*f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
342*f951416aSBram Moolenaar  call assert_equal(40, shiftwidth(virtcol('.')))
343*f951416aSBram Moolenaar  call s:compare_lines(expect4, lines)
344*f951416aSBram Moolenaar
345*f951416aSBram Moolenaar  " Test 2: Put the cursor at the first column, result should be the same
346*f951416aSBram Moolenaar  call setline(1, "x")
347*f951416aSBram Moolenaar  norm! 0>>
348*f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
349*f951416aSBram Moolenaar  call s:compare_lines(expect1, lines)
350*f951416aSBram Moolenaar  norm! 0>>
351*f951416aSBram Moolenaar  let lines = ScreenLines([1, 2], winwidth(0))
352*f951416aSBram Moolenaar  call s:compare_lines(expect2, lines)
353*f951416aSBram Moolenaar  norm! 0>>
354*f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
355*f951416aSBram Moolenaar  call s:compare_lines(expect3, lines)
356*f951416aSBram Moolenaar  norm! 0>>
357*f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
358*f951416aSBram Moolenaar  call s:compare_lines(expect4, lines)
359*f951416aSBram Moolenaar
360*f951416aSBram Moolenaar  " cleanup
361*f951416aSBram Moolenaar  bw!
362*f951416aSBram Moolenaar  bw!
363*f951416aSBram Moolenaarendfunc
364*f951416aSBram Moolenaar
36564f41074SBram Moolenaarfunc Test_vartabs_failures()
36664f41074SBram Moolenaar  call assert_fails('set vts=8,')
36764f41074SBram Moolenaar  call assert_fails('set vsts=8,')
36864f41074SBram Moolenaar  call assert_fails('set vts=8,,8')
36964f41074SBram Moolenaar  call assert_fails('set vsts=8,,8')
37064f41074SBram Moolenaar  call assert_fails('set vts=8,,8,')
37164f41074SBram Moolenaar  call assert_fails('set vsts=8,,8,')
37264f41074SBram Moolenaar  call assert_fails('set vts=,8')
37364f41074SBram Moolenaar  call assert_fails('set vsts=,8')
37464f41074SBram Moolenaarendfunc
375