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