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