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 1008e7d6223SBram Moolenaar " Test for 'retab' with same values 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() 1506d91bcb4SBram 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 422*59585497SYegappan Lakshmanan" Setting 'shiftwidth' to a negative value, should set it to either the value 423*59585497SYegappan Lakshmanan" of 'tabstop' (if 'vartabstop' is not set) or to the first value in 424*59585497SYegappan Lakshmanan" 'vartabstop' 425*59585497SYegappan Lakshmananfunc Test_shiftwidth_vartabstop() 426*59585497SYegappan Lakshmanan setlocal tabstop=7 vartabstop= 427*59585497SYegappan Lakshmanan call assert_fails('set shiftwidth=-1', 'E487:') 428*59585497SYegappan Lakshmanan call assert_equal(7, &shiftwidth) 429*59585497SYegappan Lakshmanan setlocal tabstop=7 vartabstop=5,7,10 430*59585497SYegappan Lakshmanan call assert_fails('set shiftwidth=-1', 'E487:') 431*59585497SYegappan Lakshmanan call assert_equal(5, &shiftwidth) 432*59585497SYegappan Lakshmanan setlocal shiftwidth& vartabstop& tabstop& 433*59585497SYegappan Lakshmananendfunc 434*59585497SYegappan Lakshmanan 435bd7206e0SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 436