xref: /vim-8.2.3635/src/testdir/test_vartabs.vim (revision 6d91bcb4)
104958cbaSBram Moolenaar" Test for variable tabstops
204958cbaSBram Moolenaar
3b46fecd3SBram Moolenaarsource check.vim
4b46fecd3SBram MoolenaarCheckFeature vartabs
504958cbaSBram Moolenaar
6a87b72ccSBram Moolenaarsource view_util.vim
7037c54f2SBram Moolenaar
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
94bd7206e0SBram Moolenaar  " Test for 'retab' with vts
95bd7206e0SBram Moolenaar  set ts=8 sts=0 vts=5,3,6,2 vsts=
96bd7206e0SBram Moolenaar  exe "norm! S                l"
97bd7206e0SBram Moolenaar  .retab!
98bd7206e0SBram Moolenaar  call assert_equal("\t\t\t\tl", getline(1))
99bd7206e0SBram Moolenaar
100bd7206e0SBram Moolenaar  " Test for 'retab' with same vlaues as vts
101bd7206e0SBram Moolenaar  set ts=8 sts=0 vts=5,3,6,2 vsts=
102bd7206e0SBram Moolenaar  exe "norm! S                l"
103bd7206e0SBram Moolenaar  .retab! 5,3,6,2
104bd7206e0SBram Moolenaar  call assert_equal("\t\t\t\tl", getline(1))
105bd7206e0SBram Moolenaar
10604958cbaSBram Moolenaar  " Check that global and local values are set.
10704958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
10804958cbaSBram Moolenaar  call assert_equal(&ts, 4)
10904958cbaSBram Moolenaar  call assert_equal(&vts, '6')
11004958cbaSBram Moolenaar  call assert_equal(&sts, 8)
11104958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
11204958cbaSBram Moolenaar  new
11304958cbaSBram Moolenaar  call assert_equal(&ts, 4)
11404958cbaSBram Moolenaar  call assert_equal(&vts, '6')
11504958cbaSBram Moolenaar  call assert_equal(&sts, 8)
11604958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
11704958cbaSBram Moolenaar  bwipeout!
11804958cbaSBram Moolenaar
11904958cbaSBram Moolenaar  " Check that local values only are set.
12004958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
12104958cbaSBram Moolenaar  call assert_equal(&ts, 5)
12204958cbaSBram Moolenaar  call assert_equal(&vts, '7')
12304958cbaSBram Moolenaar  call assert_equal(&sts, 9)
12404958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
12504958cbaSBram Moolenaar  new
12604958cbaSBram Moolenaar  call assert_equal(&ts, 4)
12704958cbaSBram Moolenaar  call assert_equal(&vts, '6')
12804958cbaSBram Moolenaar  call assert_equal(&sts, 8)
12904958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
13004958cbaSBram Moolenaar  bwipeout!
13104958cbaSBram Moolenaar
13204958cbaSBram Moolenaar  " Check that global values only are set.
13304958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
13404958cbaSBram Moolenaar  call assert_equal(&ts, 5)
13504958cbaSBram Moolenaar  call assert_equal(&vts, '7')
13604958cbaSBram Moolenaar  call assert_equal(&sts, 9)
13704958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
13804958cbaSBram Moolenaar  new
13904958cbaSBram Moolenaar  call assert_equal(&ts, 6)
14004958cbaSBram Moolenaar  call assert_equal(&vts, '8')
14104958cbaSBram Moolenaar  call assert_equal(&sts, 10)
14204958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
14304958cbaSBram Moolenaar  bwipeout!
14404958cbaSBram Moolenaar
14504958cbaSBram Moolenaar  set ts& vts& sts& vsts& et&
14604958cbaSBram Moolenaar  bwipeout!
14704958cbaSBram Moolenaarendfunc
14804958cbaSBram Moolenaar
1491e115360SBram Moolenaarfunc Test_vartabs_breakindent()
150*6d91bcb4SBram Moolenaar  CheckOption breakindent
15104958cbaSBram Moolenaar  new
15204958cbaSBram Moolenaar  %d
15304958cbaSBram Moolenaar
15404958cbaSBram Moolenaar  " Test normal operation of tabstops ...
15504958cbaSBram Moolenaar  set ts=4
15604958cbaSBram Moolenaar  call setline(1, join(split('aaaaa', '\zs'), "\t"))
15704958cbaSBram Moolenaar  retab 8
15804958cbaSBram Moolenaar  let expect = "a   a\<tab>a   a\<tab>a"
15904958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
16004958cbaSBram Moolenaar
16104958cbaSBram Moolenaar  " ... and softtabstops
16204958cbaSBram Moolenaar  set ts=8 sts=6
16304958cbaSBram Moolenaar  exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b"
16404958cbaSBram Moolenaar  let expect = "b     b\<tab>    b\<tab>  b\<tab>b"
16504958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
16604958cbaSBram Moolenaar
16704958cbaSBram Moolenaar  " Test variable tabstops.
16804958cbaSBram Moolenaar  set sts=0 vts=4,8,4,8
16904958cbaSBram Moolenaar  exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c"
17004958cbaSBram Moolenaar  retab 8
17104958cbaSBram Moolenaar  let expect = "c   c\<tab>    c\<tab>c\<tab>c\<tab>c"
17204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
17304958cbaSBram Moolenaar
17404958cbaSBram Moolenaar  set et vts=4,8,4,8
17504958cbaSBram Moolenaar  exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d"
17604958cbaSBram Moolenaar  let expect = "d   d       d   d       d       d"
17704958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
17804958cbaSBram Moolenaar
17904958cbaSBram Moolenaar  " Changing ts should have no effect if vts is in use.
18004958cbaSBram Moolenaar  call cursor(1, 1)
18104958cbaSBram Moolenaar  set ts=6
18204958cbaSBram Moolenaar  exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e"
18304958cbaSBram Moolenaar  let expect = "e   e       e   e       e       e"
18404958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
18504958cbaSBram Moolenaar
18604958cbaSBram Moolenaar  " Clearing vts should revert to using ts.
18704958cbaSBram Moolenaar  set vts=
18804958cbaSBram Moolenaar  exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f"
18904958cbaSBram Moolenaar  let expect = "f     f     f     f     f     f"
19004958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
19104958cbaSBram Moolenaar
19204958cbaSBram Moolenaar  " Test variable softtabstops.
19304958cbaSBram Moolenaar  set noet ts=8 vsts=12,2,6
19404958cbaSBram Moolenaar  exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g"
19504958cbaSBram Moolenaar  let expect = "g\<tab>    g g\<tab>    g\<tab>  g\<tab>g"
19604958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
19704958cbaSBram Moolenaar
19804958cbaSBram Moolenaar  " Variable tabstops and softtabstops combined.
19904958cbaSBram Moolenaar  set vsts=6,12,8 vts=4,6,8
20004958cbaSBram Moolenaar  exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h"
20104958cbaSBram Moolenaar  let expect = "h\<tab>  h\<tab>\<tab>h\<tab>h\<tab>h"
20204958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
20304958cbaSBram Moolenaar
20404958cbaSBram Moolenaar  " Retab with a single value, not using vts.
20504958cbaSBram Moolenaar  set ts=8 sts=0 vts= vsts=
20604958cbaSBram Moolenaar  exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i"
20704958cbaSBram Moolenaar  retab 4
20804958cbaSBram Moolenaar  let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i"
20904958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
21004958cbaSBram Moolenaar
21104958cbaSBram Moolenaar  " Retab with a single value, using vts.
21204958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
21304958cbaSBram Moolenaar  exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j"
21404958cbaSBram Moolenaar  retab 4
21504958cbaSBram Moolenaar  let expect = "j\<tab>  j\<tab>\<tab>j\<tab>  j\<tab>\<tab>j"
21604958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
21704958cbaSBram Moolenaar
21804958cbaSBram Moolenaar  " Retab with multiple values, not using vts.
21904958cbaSBram Moolenaar  set ts=6 sts=0 vts= vsts=
22004958cbaSBram Moolenaar  exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k"
22104958cbaSBram Moolenaar  retab 4,8
22204958cbaSBram Moolenaar  let expect = "k\<tab>  k\<tab>k     k\<tab>    k\<tab>  k"
22304958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
22404958cbaSBram Moolenaar
22504958cbaSBram Moolenaar  " Retab with multiple values, using vts.
22604958cbaSBram Moolenaar  set ts=8 sts=0 vts=6 vsts=
22704958cbaSBram Moolenaar  exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l"
22804958cbaSBram Moolenaar  retab 4,8
22904958cbaSBram Moolenaar  let expect = "l\<tab>  l\<tab>l     l\<tab>    l\<tab>  l"
23004958cbaSBram Moolenaar  call assert_equal(expect, getline(1))
23104958cbaSBram Moolenaar
23204958cbaSBram Moolenaar  " Check that global and local values are set.
23304958cbaSBram Moolenaar  set ts=4 vts=6 sts=8 vsts=10
23404958cbaSBram Moolenaar  call assert_equal(&ts, 4)
23504958cbaSBram Moolenaar  call assert_equal(&vts, '6')
23604958cbaSBram Moolenaar  call assert_equal(&sts, 8)
23704958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
23804958cbaSBram Moolenaar  new
23904958cbaSBram Moolenaar  call assert_equal(&ts, 4)
24004958cbaSBram Moolenaar  call assert_equal(&vts, '6')
24104958cbaSBram Moolenaar  call assert_equal(&sts, 8)
24204958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
24304958cbaSBram Moolenaar  bwipeout!
24404958cbaSBram Moolenaar
24504958cbaSBram Moolenaar  " Check that local values only are set.
24604958cbaSBram Moolenaar  setlocal ts=5 vts=7 sts=9 vsts=11
24704958cbaSBram Moolenaar  call assert_equal(&ts, 5)
24804958cbaSBram Moolenaar  call assert_equal(&vts, '7')
24904958cbaSBram Moolenaar  call assert_equal(&sts, 9)
25004958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
25104958cbaSBram Moolenaar  new
25204958cbaSBram Moolenaar  call assert_equal(&ts, 4)
25304958cbaSBram Moolenaar  call assert_equal(&vts, '6')
25404958cbaSBram Moolenaar  call assert_equal(&sts, 8)
25504958cbaSBram Moolenaar  call assert_equal(&vsts, '10')
25604958cbaSBram Moolenaar  bwipeout!
25704958cbaSBram Moolenaar
25804958cbaSBram Moolenaar  " Check that global values only are set.
25904958cbaSBram Moolenaar  setglobal ts=6 vts=8 sts=10 vsts=12
26004958cbaSBram Moolenaar  call assert_equal(&ts, 5)
26104958cbaSBram Moolenaar  call assert_equal(&vts, '7')
26204958cbaSBram Moolenaar  call assert_equal(&sts, 9)
26304958cbaSBram Moolenaar  call assert_equal(&vsts, '11')
26404958cbaSBram Moolenaar  new
26504958cbaSBram Moolenaar  call assert_equal(&ts, 6)
26604958cbaSBram Moolenaar  call assert_equal(&vts, '8')
26704958cbaSBram Moolenaar  call assert_equal(&sts, 10)
26804958cbaSBram Moolenaar  call assert_equal(&vsts, '12')
26904958cbaSBram Moolenaar  bwipeout!
27004958cbaSBram Moolenaar
27104958cbaSBram Moolenaar  bwipeout!
27204958cbaSBram Moolenaarendfunc
273a87b72ccSBram Moolenaar
27464f41074SBram Moolenaarfunc Test_vartabs_linebreak()
275307ac5c6SBram Moolenaar  if winwidth(0) < 40
276a87b72ccSBram Moolenaar    return
277a87b72ccSBram Moolenaar  endif
278a87b72ccSBram Moolenaar  new
279307ac5c6SBram Moolenaar  40vnew
280a87b72ccSBram Moolenaar  %d
281307ac5c6SBram Moolenaar  setl linebreak vartabstop=10,20,30,40
282a87b72ccSBram Moolenaar  call setline(1, "\tx\tx\tx\tx")
283a87b72ccSBram Moolenaar
284307ac5c6SBram Moolenaar  let expect = ['          x                             ',
285307ac5c6SBram Moolenaar        \       'x                   x                   ',
286a87b72ccSBram Moolenaar        \       'x                                       ']
287307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
288307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
289307ac5c6SBram Moolenaar  setl list listchars=tab:>-
290307ac5c6SBram Moolenaar  let expect = ['>---------x>------------------          ',
291307ac5c6SBram Moolenaar        \       'x>------------------x>------------------',
292307ac5c6SBram Moolenaar        \       'x                                       ']
293307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
294307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
295307ac5c6SBram Moolenaar  setl linebreak vartabstop=40
296307ac5c6SBram Moolenaar  let expect = ['>---------------------------------------',
297307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
298307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
299307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
300307ac5c6SBram Moolenaar        \       'x                                       ']
301307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 5], winwidth(0))
302a87b72ccSBram Moolenaar  call s:compare_lines(expect, lines)
303a87b72ccSBram Moolenaar
304a87b72ccSBram Moolenaar  " cleanup
305a87b72ccSBram Moolenaar  bw!
306a87b72ccSBram Moolenaar  bw!
307307ac5c6SBram Moolenaar  set nolist listchars&vim
308a87b72ccSBram Moolenaarendfunc
30964f41074SBram Moolenaar
310f951416aSBram Moolenaarfunc Test_vartabs_shiftwidth()
311f951416aSBram Moolenaar  "return
312f951416aSBram Moolenaar  if winwidth(0) < 40
313f951416aSBram Moolenaar    return
314f951416aSBram Moolenaar  endif
315f951416aSBram Moolenaar  new
316f951416aSBram Moolenaar  40vnew
317f951416aSBram Moolenaar  %d
318f951416aSBram Moolenaar"  setl varsofttabstop=10,20,30,40
319f951416aSBram Moolenaar  setl shiftwidth=0 vartabstop=10,20,30,40
320f951416aSBram Moolenaar  call setline(1, "x")
321f951416aSBram Moolenaar
322f951416aSBram Moolenaar  " Check without any change.
323f951416aSBram Moolenaar  let expect = ['x                                       ']
324f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
325f951416aSBram Moolenaar  call s:compare_lines(expect, lines)
326f951416aSBram Moolenaar  " Test 1:
327f951416aSBram Moolenaar  " shiftwidth depends on the indent, first check with cursor at the end of the
328f951416aSBram Moolenaar  " line (which is the same as the start of the line, since there is only one
329f951416aSBram Moolenaar  " character).
330f951416aSBram Moolenaar  norm! $>>
331f951416aSBram Moolenaar  let expect1 = ['          x                             ']
332f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
333f951416aSBram Moolenaar  call s:compare_lines(expect1, lines)
334f951416aSBram Moolenaar  call assert_equal(10, shiftwidth())
335f951416aSBram Moolenaar  call assert_equal(10, shiftwidth(1))
336f951416aSBram Moolenaar  call assert_equal(20, shiftwidth(virtcol('.')))
337f951416aSBram Moolenaar  norm! $>>
338f951416aSBram Moolenaar  let expect2 = ['                              x         ', '~                                       ']
339f951416aSBram Moolenaar  let lines = ScreenLines([1, 2], winwidth(0))
340f951416aSBram Moolenaar  call s:compare_lines(expect2, lines)
341f951416aSBram Moolenaar  call assert_equal(20, shiftwidth(virtcol('.')-2))
342aad222c9SBram Moolenaar  call assert_equal(30, virtcol('.')->shiftwidth())
343f951416aSBram Moolenaar  norm! $>>
344f951416aSBram Moolenaar  let expect3 = ['                                        ', '                    x                   ', '~                                       ']
345f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
346f951416aSBram Moolenaar  call s:compare_lines(expect3, lines)
347f951416aSBram Moolenaar  call assert_equal(30, shiftwidth(virtcol('.')-2))
348f951416aSBram Moolenaar  call assert_equal(40, shiftwidth(virtcol('.')))
349f951416aSBram Moolenaar  norm! $>>
350f951416aSBram Moolenaar  let expect4 = ['                                        ', '                                        ', '                    x                   ']
351f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
352f951416aSBram Moolenaar  call assert_equal(40, shiftwidth(virtcol('.')))
353f951416aSBram Moolenaar  call s:compare_lines(expect4, lines)
354f951416aSBram Moolenaar
355f951416aSBram Moolenaar  " Test 2: Put the cursor at the first column, result should be the same
356f951416aSBram Moolenaar  call setline(1, "x")
357f951416aSBram Moolenaar  norm! 0>>
358f951416aSBram Moolenaar  let lines = ScreenLines(1, winwidth(0))
359f951416aSBram Moolenaar  call s:compare_lines(expect1, lines)
360f951416aSBram Moolenaar  norm! 0>>
361f951416aSBram Moolenaar  let lines = ScreenLines([1, 2], winwidth(0))
362f951416aSBram Moolenaar  call s:compare_lines(expect2, lines)
363f951416aSBram Moolenaar  norm! 0>>
364f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
365f951416aSBram Moolenaar  call s:compare_lines(expect3, lines)
366f951416aSBram Moolenaar  norm! 0>>
367f951416aSBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
368f951416aSBram Moolenaar  call s:compare_lines(expect4, lines)
369f951416aSBram Moolenaar
3700e05de46SBram Moolenaar  call assert_fails('call shiftwidth([])', 'E745:')
3710e05de46SBram Moolenaar
372f951416aSBram Moolenaar  " cleanup
373f951416aSBram Moolenaar  bw!
374f951416aSBram Moolenaar  bw!
375f951416aSBram Moolenaarendfunc
376f951416aSBram Moolenaar
37764f41074SBram Moolenaarfunc Test_vartabs_failures()
37864f41074SBram Moolenaar  call assert_fails('set vts=8,')
37964f41074SBram Moolenaar  call assert_fails('set vsts=8,')
38064f41074SBram Moolenaar  call assert_fails('set vts=8,,8')
38164f41074SBram Moolenaar  call assert_fails('set vsts=8,,8')
38264f41074SBram Moolenaar  call assert_fails('set vts=8,,8,')
38364f41074SBram Moolenaar  call assert_fails('set vsts=8,,8,')
38464f41074SBram Moolenaar  call assert_fails('set vts=,8')
38564f41074SBram Moolenaar  call assert_fails('set vsts=,8')
38664f41074SBram Moolenaarendfunc
387037c54f2SBram Moolenaar
388037c54f2SBram Moolenaarfunc Test_vartabs_reset()
389037c54f2SBram Moolenaar  set vts=8
390037c54f2SBram Moolenaar  set all&
391037c54f2SBram Moolenaar  call assert_equal('', &vts)
392037c54f2SBram Moolenaarendfunc
393bd7206e0SBram Moolenaar
394bd7206e0SBram Moolenaarfunc s:SaveCol(l)
395bd7206e0SBram Moolenaar  call add(a:l, [col('.'), virtcol('.')])
396bd7206e0SBram Moolenaar  return ''
397bd7206e0SBram Moolenaarendfunc
398bd7206e0SBram Moolenaar
399bd7206e0SBram Moolenaar" Test for 'varsofttabstop'
400bd7206e0SBram Moolenaarfunc Test_varsofttabstop()
401bd7206e0SBram Moolenaar  new
402bd7206e0SBram Moolenaar  inoremap <expr> <F2>  s:SaveCol(g:cols)
403bd7206e0SBram Moolenaar
404bd7206e0SBram Moolenaar  set backspace=indent,eol,start
405bd7206e0SBram Moolenaar  set varsofttabstop=6,2,5,3
406bd7206e0SBram Moolenaar  let g:cols = []
407bd7206e0SBram Moolenaar  call feedkeys("a\t\<F2>\t\<F2>\t\<F2>\t\<F2> ", 'xt')
408bd7206e0SBram Moolenaar  call assert_equal("\t\t ", getline(1))
409bd7206e0SBram Moolenaar  call assert_equal([[7, 7], [2, 9], [7, 14], [3, 17]], g:cols)
410bd7206e0SBram Moolenaar
411bd7206e0SBram Moolenaar  let g:cols = []
412bd7206e0SBram Moolenaar  call feedkeys("a\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>", 'xt')
413bd7206e0SBram Moolenaar  call assert_equal('', getline(1))
414bd7206e0SBram Moolenaar  call assert_equal([[3, 17], [7, 14], [2, 9], [7, 7], [1, 1]], g:cols)
415bd7206e0SBram Moolenaar
416bd7206e0SBram Moolenaar  set varsofttabstop&
417bd7206e0SBram Moolenaar  set backspace&
418bd7206e0SBram Moolenaar  iunmap <F2>
419bd7206e0SBram Moolenaar  close!
420bd7206e0SBram Moolenaarendfunc
421bd7206e0SBram Moolenaar
422bd7206e0SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
423