" Test for variable tabstops if !has("vartabs") finish endif func! Test_vartabs() new %d " Test normal operation of tabstops ... set ts=4 call setline(1, join(split('aaaaa', '\zs'), "\t")) retab 8 let expect = "a a\a a\a" call assert_equal(expect, getline(1)) " ... and softtabstops set ts=8 sts=6 exe "norm! Sb\b\b\b\b" let expect = "b b\ b\ b\b" call assert_equal(expect, getline(1)) " Test variable tabstops. set sts=0 vts=4,8,4,8 exe "norm! Sc\c\c\c\c\c" retab 8 let expect = "c c\ c\c\c\c" call assert_equal(expect, getline(1)) set et vts=4,8,4,8 exe "norm! Sd\d\d\d\d\d" let expect = "d d d d d d" call assert_equal(expect, getline(1)) " Changing ts should have no effect if vts is in use. call cursor(1, 1) set ts=6 exe "norm! Se\e\e\e\e\e" let expect = "e e e e e e" call assert_equal(expect, getline(1)) " Clearing vts should revert to using ts. set vts= exe "norm! Sf\f\f\f\f\f" let expect = "f f f f f f" call assert_equal(expect, getline(1)) " Test variable softtabstops. set noet ts=8 vsts=12,2,6 exe "norm! Sg\g\g\g\g\g" let expect = "g\ g g\ g\ g\g" call assert_equal(expect, getline(1)) " Variable tabstops and softtabstops combined. set vsts=6,12,8 vts=4,6,8 exe "norm! Sh\h\h\h\h" let expect = "h\ h\\h\h\h" call assert_equal(expect, getline(1)) " Retab with a single value, not using vts. set ts=8 sts=0 vts= vsts= exe "norm! Si\i\i\i\i" retab 4 let expect = "i\\i\\i\\i\\i" call assert_equal(expect, getline(1)) " Retab with a single value, using vts. set ts=8 sts=0 vts=6 vsts= exe "norm! Sj\j\j\j\j" retab 4 let expect = "j\ j\\j\ j\\j" call assert_equal(expect, getline(1)) " Retab with multiple values, not using vts. set ts=6 sts=0 vts= vsts= exe "norm! Sk\k\k\k\k\k" retab 4,8 let expect = "k\ k\k k\ k\ k" call assert_equal(expect, getline(1)) " Retab with multiple values, using vts. set ts=8 sts=0 vts=6 vsts= exe "norm! Sl\l\l\l\l\l" retab 4,8 let expect = "l\ l\l l\ l\ l" call assert_equal(expect, getline(1)) " Check that global and local values are set. set ts=4 vts=6 sts=8 vsts=10 call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') new call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') bwipeout! " Check that local values only are set. setlocal ts=5 vts=7 sts=9 vsts=11 call assert_equal(&ts, 5) call assert_equal(&vts, '7') call assert_equal(&sts, 9) call assert_equal(&vsts, '11') new call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') bwipeout! " Check that global values only are set. setglobal ts=6 vts=8 sts=10 vsts=12 call assert_equal(&ts, 5) call assert_equal(&vts, '7') call assert_equal(&sts, 9) call assert_equal(&vsts, '11') new call assert_equal(&ts, 6) call assert_equal(&vts, '8') call assert_equal(&sts, 10) call assert_equal(&vsts, '12') bwipeout! set ts& vts& sts& vsts& et& bwipeout! endfunc func! Test_vartabs_breakindent() if !exists("+breakindent") return endif new %d " Test normal operation of tabstops ... set ts=4 call setline(1, join(split('aaaaa', '\zs'), "\t")) retab 8 let expect = "a a\a a\a" call assert_equal(expect, getline(1)) " ... and softtabstops set ts=8 sts=6 exe "norm! Sb\b\b\b\b" let expect = "b b\ b\ b\b" call assert_equal(expect, getline(1)) " Test variable tabstops. set sts=0 vts=4,8,4,8 exe "norm! Sc\c\c\c\c\c" retab 8 let expect = "c c\ c\c\c\c" call assert_equal(expect, getline(1)) set et vts=4,8,4,8 exe "norm! Sd\d\d\d\d\d" let expect = "d d d d d d" call assert_equal(expect, getline(1)) " Changing ts should have no effect if vts is in use. call cursor(1, 1) set ts=6 exe "norm! Se\e\e\e\e\e" let expect = "e e e e e e" call assert_equal(expect, getline(1)) " Clearing vts should revert to using ts. set vts= exe "norm! Sf\f\f\f\f\f" let expect = "f f f f f f" call assert_equal(expect, getline(1)) " Test variable softtabstops. set noet ts=8 vsts=12,2,6 exe "norm! Sg\g\g\g\g\g" let expect = "g\ g g\ g\ g\g" call assert_equal(expect, getline(1)) " Variable tabstops and softtabstops combined. set vsts=6,12,8 vts=4,6,8 exe "norm! Sh\h\h\h\h" let expect = "h\ h\\h\h\h" call assert_equal(expect, getline(1)) " Retab with a single value, not using vts. set ts=8 sts=0 vts= vsts= exe "norm! Si\i\i\i\i" retab 4 let expect = "i\\i\\i\\i\\i" call assert_equal(expect, getline(1)) " Retab with a single value, using vts. set ts=8 sts=0 vts=6 vsts= exe "norm! Sj\j\j\j\j" retab 4 let expect = "j\ j\\j\ j\\j" call assert_equal(expect, getline(1)) " Retab with multiple values, not using vts. set ts=6 sts=0 vts= vsts= exe "norm! Sk\k\k\k\k\k" retab 4,8 let expect = "k\ k\k k\ k\ k" call assert_equal(expect, getline(1)) " Retab with multiple values, using vts. set ts=8 sts=0 vts=6 vsts= exe "norm! Sl\l\l\l\l\l" retab 4,8 let expect = "l\ l\l l\ l\ l" call assert_equal(expect, getline(1)) " Check that global and local values are set. set ts=4 vts=6 sts=8 vsts=10 call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') new call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') bwipeout! " Check that local values only are set. setlocal ts=5 vts=7 sts=9 vsts=11 call assert_equal(&ts, 5) call assert_equal(&vts, '7') call assert_equal(&sts, 9) call assert_equal(&vsts, '11') new call assert_equal(&ts, 4) call assert_equal(&vts, '6') call assert_equal(&sts, 8) call assert_equal(&vsts, '10') bwipeout! " Check that global values only are set. setglobal ts=6 vts=8 sts=10 vsts=12 call assert_equal(&ts, 5) call assert_equal(&vts, '7') call assert_equal(&sts, 9) call assert_equal(&vsts, '11') new call assert_equal(&ts, 6) call assert_equal(&vts, '8') call assert_equal(&sts, 10) call assert_equal(&vsts, '12') bwipeout! bwipeout! endfunc