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 94*bd7206e0SBram Moolenaar " Test for 'retab' with vts 95*bd7206e0SBram Moolenaar set ts=8 sts=0 vts=5,3,6,2 vsts= 96*bd7206e0SBram Moolenaar exe "norm! S l" 97*bd7206e0SBram Moolenaar .retab! 98*bd7206e0SBram Moolenaar call assert_equal("\t\t\t\tl", getline(1)) 99*bd7206e0SBram Moolenaar 100*bd7206e0SBram Moolenaar " Test for 'retab' with same vlaues as vts 101*bd7206e0SBram Moolenaar set ts=8 sts=0 vts=5,3,6,2 vsts= 102*bd7206e0SBram Moolenaar exe "norm! S l" 103*bd7206e0SBram Moolenaar .retab! 5,3,6,2 104*bd7206e0SBram Moolenaar call assert_equal("\t\t\t\tl", getline(1)) 105*bd7206e0SBram 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() 15004958cbaSBram Moolenaar if !exists("+breakindent") 15104958cbaSBram Moolenaar return 15204958cbaSBram Moolenaar endif 15304958cbaSBram Moolenaar new 15404958cbaSBram Moolenaar %d 15504958cbaSBram Moolenaar 15604958cbaSBram Moolenaar " Test normal operation of tabstops ... 15704958cbaSBram Moolenaar set ts=4 15804958cbaSBram Moolenaar call setline(1, join(split('aaaaa', '\zs'), "\t")) 15904958cbaSBram Moolenaar retab 8 16004958cbaSBram Moolenaar let expect = "a a\<tab>a a\<tab>a" 16104958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 16204958cbaSBram Moolenaar 16304958cbaSBram Moolenaar " ... and softtabstops 16404958cbaSBram Moolenaar set ts=8 sts=6 16504958cbaSBram Moolenaar exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b" 16604958cbaSBram Moolenaar let expect = "b b\<tab> b\<tab> b\<tab>b" 16704958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 16804958cbaSBram Moolenaar 16904958cbaSBram Moolenaar " Test variable tabstops. 17004958cbaSBram Moolenaar set sts=0 vts=4,8,4,8 17104958cbaSBram Moolenaar exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c" 17204958cbaSBram Moolenaar retab 8 17304958cbaSBram Moolenaar let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c" 17404958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 17504958cbaSBram Moolenaar 17604958cbaSBram Moolenaar set et vts=4,8,4,8 17704958cbaSBram Moolenaar exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d" 17804958cbaSBram Moolenaar let expect = "d d d d d d" 17904958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 18004958cbaSBram Moolenaar 18104958cbaSBram Moolenaar " Changing ts should have no effect if vts is in use. 18204958cbaSBram Moolenaar call cursor(1, 1) 18304958cbaSBram Moolenaar set ts=6 18404958cbaSBram Moolenaar exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e" 18504958cbaSBram Moolenaar let expect = "e e e e e e" 18604958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 18704958cbaSBram Moolenaar 18804958cbaSBram Moolenaar " Clearing vts should revert to using ts. 18904958cbaSBram Moolenaar set vts= 19004958cbaSBram Moolenaar exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f" 19104958cbaSBram Moolenaar let expect = "f f f f f f" 19204958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 19304958cbaSBram Moolenaar 19404958cbaSBram Moolenaar " Test variable softtabstops. 19504958cbaSBram Moolenaar set noet ts=8 vsts=12,2,6 19604958cbaSBram Moolenaar exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g" 19704958cbaSBram Moolenaar let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g" 19804958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 19904958cbaSBram Moolenaar 20004958cbaSBram Moolenaar " Variable tabstops and softtabstops combined. 20104958cbaSBram Moolenaar set vsts=6,12,8 vts=4,6,8 20204958cbaSBram Moolenaar exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h" 20304958cbaSBram Moolenaar let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h" 20404958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 20504958cbaSBram Moolenaar 20604958cbaSBram Moolenaar " Retab with a single value, not using vts. 20704958cbaSBram Moolenaar set ts=8 sts=0 vts= vsts= 20804958cbaSBram Moolenaar exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i" 20904958cbaSBram Moolenaar retab 4 21004958cbaSBram Moolenaar let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i" 21104958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 21204958cbaSBram Moolenaar 21304958cbaSBram Moolenaar " Retab with a single value, using vts. 21404958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 21504958cbaSBram Moolenaar exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j" 21604958cbaSBram Moolenaar retab 4 21704958cbaSBram Moolenaar let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j" 21804958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 21904958cbaSBram Moolenaar 22004958cbaSBram Moolenaar " Retab with multiple values, not using vts. 22104958cbaSBram Moolenaar set ts=6 sts=0 vts= vsts= 22204958cbaSBram Moolenaar exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k" 22304958cbaSBram Moolenaar retab 4,8 22404958cbaSBram Moolenaar let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k" 22504958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 22604958cbaSBram Moolenaar 22704958cbaSBram Moolenaar " Retab with multiple values, using vts. 22804958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 22904958cbaSBram Moolenaar exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l" 23004958cbaSBram Moolenaar retab 4,8 23104958cbaSBram Moolenaar let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l" 23204958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 23304958cbaSBram Moolenaar 23404958cbaSBram Moolenaar " Check that global and local values are set. 23504958cbaSBram Moolenaar set ts=4 vts=6 sts=8 vsts=10 23604958cbaSBram Moolenaar call assert_equal(&ts, 4) 23704958cbaSBram Moolenaar call assert_equal(&vts, '6') 23804958cbaSBram Moolenaar call assert_equal(&sts, 8) 23904958cbaSBram Moolenaar call assert_equal(&vsts, '10') 24004958cbaSBram Moolenaar new 24104958cbaSBram Moolenaar call assert_equal(&ts, 4) 24204958cbaSBram Moolenaar call assert_equal(&vts, '6') 24304958cbaSBram Moolenaar call assert_equal(&sts, 8) 24404958cbaSBram Moolenaar call assert_equal(&vsts, '10') 24504958cbaSBram Moolenaar bwipeout! 24604958cbaSBram Moolenaar 24704958cbaSBram Moolenaar " Check that local values only are set. 24804958cbaSBram Moolenaar setlocal ts=5 vts=7 sts=9 vsts=11 24904958cbaSBram Moolenaar call assert_equal(&ts, 5) 25004958cbaSBram Moolenaar call assert_equal(&vts, '7') 25104958cbaSBram Moolenaar call assert_equal(&sts, 9) 25204958cbaSBram Moolenaar call assert_equal(&vsts, '11') 25304958cbaSBram Moolenaar new 25404958cbaSBram Moolenaar call assert_equal(&ts, 4) 25504958cbaSBram Moolenaar call assert_equal(&vts, '6') 25604958cbaSBram Moolenaar call assert_equal(&sts, 8) 25704958cbaSBram Moolenaar call assert_equal(&vsts, '10') 25804958cbaSBram Moolenaar bwipeout! 25904958cbaSBram Moolenaar 26004958cbaSBram Moolenaar " Check that global values only are set. 26104958cbaSBram Moolenaar setglobal ts=6 vts=8 sts=10 vsts=12 26204958cbaSBram Moolenaar call assert_equal(&ts, 5) 26304958cbaSBram Moolenaar call assert_equal(&vts, '7') 26404958cbaSBram Moolenaar call assert_equal(&sts, 9) 26504958cbaSBram Moolenaar call assert_equal(&vsts, '11') 26604958cbaSBram Moolenaar new 26704958cbaSBram Moolenaar call assert_equal(&ts, 6) 26804958cbaSBram Moolenaar call assert_equal(&vts, '8') 26904958cbaSBram Moolenaar call assert_equal(&sts, 10) 27004958cbaSBram Moolenaar call assert_equal(&vsts, '12') 27104958cbaSBram Moolenaar bwipeout! 27204958cbaSBram Moolenaar 27304958cbaSBram Moolenaar bwipeout! 27404958cbaSBram Moolenaarendfunc 275a87b72ccSBram Moolenaar 27664f41074SBram Moolenaarfunc Test_vartabs_linebreak() 277307ac5c6SBram Moolenaar if winwidth(0) < 40 278a87b72ccSBram Moolenaar return 279a87b72ccSBram Moolenaar endif 280a87b72ccSBram Moolenaar new 281307ac5c6SBram Moolenaar 40vnew 282a87b72ccSBram Moolenaar %d 283307ac5c6SBram Moolenaar setl linebreak vartabstop=10,20,30,40 284a87b72ccSBram Moolenaar call setline(1, "\tx\tx\tx\tx") 285a87b72ccSBram Moolenaar 286307ac5c6SBram Moolenaar let expect = [' x ', 287307ac5c6SBram Moolenaar \ 'x x ', 288a87b72ccSBram Moolenaar \ 'x '] 289307ac5c6SBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 290307ac5c6SBram Moolenaar call s:compare_lines(expect, lines) 291307ac5c6SBram Moolenaar setl list listchars=tab:>- 292307ac5c6SBram Moolenaar let expect = ['>---------x>------------------ ', 293307ac5c6SBram Moolenaar \ 'x>------------------x>------------------', 294307ac5c6SBram Moolenaar \ 'x '] 295307ac5c6SBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 296307ac5c6SBram Moolenaar call s:compare_lines(expect, lines) 297307ac5c6SBram Moolenaar setl linebreak vartabstop=40 298307ac5c6SBram Moolenaar let expect = ['>---------------------------------------', 299307ac5c6SBram Moolenaar \ 'x>--------------------------------------', 300307ac5c6SBram Moolenaar \ 'x>--------------------------------------', 301307ac5c6SBram Moolenaar \ 'x>--------------------------------------', 302307ac5c6SBram Moolenaar \ 'x '] 303307ac5c6SBram Moolenaar let lines = ScreenLines([1, 5], winwidth(0)) 304a87b72ccSBram Moolenaar call s:compare_lines(expect, lines) 305a87b72ccSBram Moolenaar 306a87b72ccSBram Moolenaar " cleanup 307a87b72ccSBram Moolenaar bw! 308a87b72ccSBram Moolenaar bw! 309307ac5c6SBram Moolenaar set nolist listchars&vim 310a87b72ccSBram Moolenaarendfunc 31164f41074SBram Moolenaar 312f951416aSBram Moolenaarfunc Test_vartabs_shiftwidth() 313f951416aSBram Moolenaar "return 314f951416aSBram Moolenaar if winwidth(0) < 40 315f951416aSBram Moolenaar return 316f951416aSBram Moolenaar endif 317f951416aSBram Moolenaar new 318f951416aSBram Moolenaar 40vnew 319f951416aSBram Moolenaar %d 320f951416aSBram Moolenaar" setl varsofttabstop=10,20,30,40 321f951416aSBram Moolenaar setl shiftwidth=0 vartabstop=10,20,30,40 322f951416aSBram Moolenaar call setline(1, "x") 323f951416aSBram Moolenaar 324f951416aSBram Moolenaar " Check without any change. 325f951416aSBram Moolenaar let expect = ['x '] 326f951416aSBram Moolenaar let lines = ScreenLines(1, winwidth(0)) 327f951416aSBram Moolenaar call s:compare_lines(expect, lines) 328f951416aSBram Moolenaar " Test 1: 329f951416aSBram Moolenaar " shiftwidth depends on the indent, first check with cursor at the end of the 330f951416aSBram Moolenaar " line (which is the same as the start of the line, since there is only one 331f951416aSBram Moolenaar " character). 332f951416aSBram Moolenaar norm! $>> 333f951416aSBram Moolenaar let expect1 = [' x '] 334f951416aSBram Moolenaar let lines = ScreenLines(1, winwidth(0)) 335f951416aSBram Moolenaar call s:compare_lines(expect1, lines) 336f951416aSBram Moolenaar call assert_equal(10, shiftwidth()) 337f951416aSBram Moolenaar call assert_equal(10, shiftwidth(1)) 338f951416aSBram Moolenaar call assert_equal(20, shiftwidth(virtcol('.'))) 339f951416aSBram Moolenaar norm! $>> 340f951416aSBram Moolenaar let expect2 = [' x ', '~ '] 341f951416aSBram Moolenaar let lines = ScreenLines([1, 2], winwidth(0)) 342f951416aSBram Moolenaar call s:compare_lines(expect2, lines) 343f951416aSBram Moolenaar call assert_equal(20, shiftwidth(virtcol('.')-2)) 344aad222c9SBram Moolenaar call assert_equal(30, virtcol('.')->shiftwidth()) 345f951416aSBram Moolenaar norm! $>> 346f951416aSBram Moolenaar let expect3 = [' ', ' x ', '~ '] 347f951416aSBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 348f951416aSBram Moolenaar call s:compare_lines(expect3, lines) 349f951416aSBram Moolenaar call assert_equal(30, shiftwidth(virtcol('.')-2)) 350f951416aSBram Moolenaar call assert_equal(40, shiftwidth(virtcol('.'))) 351f951416aSBram Moolenaar norm! $>> 352f951416aSBram Moolenaar let expect4 = [' ', ' ', ' x '] 353f951416aSBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 354f951416aSBram Moolenaar call assert_equal(40, shiftwidth(virtcol('.'))) 355f951416aSBram Moolenaar call s:compare_lines(expect4, lines) 356f951416aSBram Moolenaar 357f951416aSBram Moolenaar " Test 2: Put the cursor at the first column, result should be the same 358f951416aSBram Moolenaar call setline(1, "x") 359f951416aSBram Moolenaar norm! 0>> 360f951416aSBram Moolenaar let lines = ScreenLines(1, winwidth(0)) 361f951416aSBram Moolenaar call s:compare_lines(expect1, lines) 362f951416aSBram Moolenaar norm! 0>> 363f951416aSBram Moolenaar let lines = ScreenLines([1, 2], winwidth(0)) 364f951416aSBram Moolenaar call s:compare_lines(expect2, lines) 365f951416aSBram Moolenaar norm! 0>> 366f951416aSBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 367f951416aSBram Moolenaar call s:compare_lines(expect3, lines) 368f951416aSBram Moolenaar norm! 0>> 369f951416aSBram Moolenaar let lines = ScreenLines([1, 3], winwidth(0)) 370f951416aSBram Moolenaar call s:compare_lines(expect4, lines) 371f951416aSBram 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 393*bd7206e0SBram Moolenaar 394*bd7206e0SBram Moolenaarfunc s:SaveCol(l) 395*bd7206e0SBram Moolenaar call add(a:l, [col('.'), virtcol('.')]) 396*bd7206e0SBram Moolenaar return '' 397*bd7206e0SBram Moolenaarendfunc 398*bd7206e0SBram Moolenaar 399*bd7206e0SBram Moolenaar" Test for 'varsofttabstop' 400*bd7206e0SBram Moolenaarfunc Test_varsofttabstop() 401*bd7206e0SBram Moolenaar new 402*bd7206e0SBram Moolenaar inoremap <expr> <F2> s:SaveCol(g:cols) 403*bd7206e0SBram Moolenaar 404*bd7206e0SBram Moolenaar set backspace=indent,eol,start 405*bd7206e0SBram Moolenaar set varsofttabstop=6,2,5,3 406*bd7206e0SBram Moolenaar let g:cols = [] 407*bd7206e0SBram Moolenaar call feedkeys("a\t\<F2>\t\<F2>\t\<F2>\t\<F2> ", 'xt') 408*bd7206e0SBram Moolenaar call assert_equal("\t\t ", getline(1)) 409*bd7206e0SBram Moolenaar call assert_equal([[7, 7], [2, 9], [7, 14], [3, 17]], g:cols) 410*bd7206e0SBram Moolenaar 411*bd7206e0SBram Moolenaar let g:cols = [] 412*bd7206e0SBram Moolenaar call feedkeys("a\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>\<bs>\<F2>", 'xt') 413*bd7206e0SBram Moolenaar call assert_equal('', getline(1)) 414*bd7206e0SBram Moolenaar call assert_equal([[3, 17], [7, 14], [2, 9], [7, 7], [1, 1]], g:cols) 415*bd7206e0SBram Moolenaar 416*bd7206e0SBram Moolenaar set varsofttabstop& 417*bd7206e0SBram Moolenaar set backspace& 418*bd7206e0SBram Moolenaar iunmap <F2> 419*bd7206e0SBram Moolenaar close! 420*bd7206e0SBram Moolenaarendfunc 421*bd7206e0SBram Moolenaar 422*bd7206e0SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 423