xref: /vim-8.2.3635/src/testdir/test_vartabs.vim (revision 307ac5c6)
104958cbaSBram Moolenaar" Test for variable tabstops
204958cbaSBram Moolenaar
304958cbaSBram Moolenaarif !has("vartabs")
404958cbaSBram Moolenaar  finish
504958cbaSBram Moolenaarendif
604958cbaSBram Moolenaar
7a87b72ccSBram Moolenaarsource view_util.vim
8a87b72ccSBram Moolenaarfunction! s:compare_lines(expect, actual)
9a87b72ccSBram Moolenaar  call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
10a87b72ccSBram Moolenaarendfunction
11a87b72ccSBram Moolenaar
1204958cbaSBram 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
264a87b72ccSBram Moolenaarfunc! Test_vartabs_linebreak()
265*307ac5c6SBram Moolenaar  if winwidth(0) < 40
266a87b72ccSBram Moolenaar    return
267a87b72ccSBram Moolenaar  endif
268a87b72ccSBram Moolenaar  new
269*307ac5c6SBram Moolenaar  40vnew
270a87b72ccSBram Moolenaar  %d
271*307ac5c6SBram Moolenaar  setl linebreak vartabstop=10,20,30,40
272a87b72ccSBram Moolenaar  call setline(1, "\tx\tx\tx\tx")
273a87b72ccSBram Moolenaar
274*307ac5c6SBram Moolenaar  let expect = ['          x                             ',
275*307ac5c6SBram Moolenaar        \       'x                   x                   ',
276a87b72ccSBram Moolenaar        \       'x                                       ']
277*307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
278*307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
279*307ac5c6SBram Moolenaar  setl list listchars=tab:>-
280*307ac5c6SBram Moolenaar  let expect = ['>---------x>------------------          ',
281*307ac5c6SBram Moolenaar        \       'x>------------------x>------------------',
282*307ac5c6SBram Moolenaar        \       'x                                       ']
283*307ac5c6SBram Moolenaar  let lines = ScreenLines([1, 3], winwidth(0))
284*307ac5c6SBram Moolenaar  call s:compare_lines(expect, lines)
285*307ac5c6SBram Moolenaar  setl linebreak vartabstop=40
286*307ac5c6SBram Moolenaar  let expect = ['>---------------------------------------',
287*307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
288*307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
289*307ac5c6SBram Moolenaar        \       'x>--------------------------------------',
290*307ac5c6SBram Moolenaar        \       'x                                       ']
291*307ac5c6SBram 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!
297*307ac5c6SBram Moolenaar  set nolist listchars&vim
298a87b72ccSBram Moolenaarendfunc
299