1*04958cbaSBram Moolenaar" Test for variable tabstops 2*04958cbaSBram Moolenaar 3*04958cbaSBram Moolenaarif !has("vartabs") 4*04958cbaSBram Moolenaar finish 5*04958cbaSBram Moolenaarendif 6*04958cbaSBram Moolenaar 7*04958cbaSBram Moolenaarfunc! Test_vartabs() 8*04958cbaSBram Moolenaar new 9*04958cbaSBram Moolenaar %d 10*04958cbaSBram Moolenaar 11*04958cbaSBram Moolenaar " Test normal operation of tabstops ... 12*04958cbaSBram Moolenaar set ts=4 13*04958cbaSBram Moolenaar call setline(1, join(split('aaaaa', '\zs'), "\t")) 14*04958cbaSBram Moolenaar retab 8 15*04958cbaSBram Moolenaar let expect = "a a\<tab>a a\<tab>a" 16*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 17*04958cbaSBram Moolenaar 18*04958cbaSBram Moolenaar " ... and softtabstops 19*04958cbaSBram Moolenaar set ts=8 sts=6 20*04958cbaSBram Moolenaar exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b" 21*04958cbaSBram Moolenaar let expect = "b b\<tab> b\<tab> b\<tab>b" 22*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 23*04958cbaSBram Moolenaar 24*04958cbaSBram Moolenaar " Test variable tabstops. 25*04958cbaSBram Moolenaar set sts=0 vts=4,8,4,8 26*04958cbaSBram Moolenaar exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c" 27*04958cbaSBram Moolenaar retab 8 28*04958cbaSBram Moolenaar let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c" 29*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 30*04958cbaSBram Moolenaar 31*04958cbaSBram Moolenaar set et vts=4,8,4,8 32*04958cbaSBram Moolenaar exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d" 33*04958cbaSBram Moolenaar let expect = "d d d d d d" 34*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 35*04958cbaSBram Moolenaar 36*04958cbaSBram Moolenaar " Changing ts should have no effect if vts is in use. 37*04958cbaSBram Moolenaar call cursor(1, 1) 38*04958cbaSBram Moolenaar set ts=6 39*04958cbaSBram Moolenaar exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e" 40*04958cbaSBram Moolenaar let expect = "e e e e e e" 41*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 42*04958cbaSBram Moolenaar 43*04958cbaSBram Moolenaar " Clearing vts should revert to using ts. 44*04958cbaSBram Moolenaar set vts= 45*04958cbaSBram Moolenaar exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f" 46*04958cbaSBram Moolenaar let expect = "f f f f f f" 47*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 48*04958cbaSBram Moolenaar 49*04958cbaSBram Moolenaar " Test variable softtabstops. 50*04958cbaSBram Moolenaar set noet ts=8 vsts=12,2,6 51*04958cbaSBram Moolenaar exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g" 52*04958cbaSBram Moolenaar let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g" 53*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 54*04958cbaSBram Moolenaar 55*04958cbaSBram Moolenaar " Variable tabstops and softtabstops combined. 56*04958cbaSBram Moolenaar set vsts=6,12,8 vts=4,6,8 57*04958cbaSBram Moolenaar exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h" 58*04958cbaSBram Moolenaar let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h" 59*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 60*04958cbaSBram Moolenaar 61*04958cbaSBram Moolenaar " Retab with a single value, not using vts. 62*04958cbaSBram Moolenaar set ts=8 sts=0 vts= vsts= 63*04958cbaSBram Moolenaar exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i" 64*04958cbaSBram Moolenaar retab 4 65*04958cbaSBram Moolenaar let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i" 66*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 67*04958cbaSBram Moolenaar 68*04958cbaSBram Moolenaar " Retab with a single value, using vts. 69*04958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 70*04958cbaSBram Moolenaar exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j" 71*04958cbaSBram Moolenaar retab 4 72*04958cbaSBram Moolenaar let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j" 73*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 74*04958cbaSBram Moolenaar 75*04958cbaSBram Moolenaar " Retab with multiple values, not using vts. 76*04958cbaSBram Moolenaar set ts=6 sts=0 vts= vsts= 77*04958cbaSBram Moolenaar exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k" 78*04958cbaSBram Moolenaar retab 4,8 79*04958cbaSBram Moolenaar let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k" 80*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 81*04958cbaSBram Moolenaar 82*04958cbaSBram Moolenaar " Retab with multiple values, using vts. 83*04958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 84*04958cbaSBram Moolenaar exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l" 85*04958cbaSBram Moolenaar retab 4,8 86*04958cbaSBram Moolenaar let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l" 87*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 88*04958cbaSBram Moolenaar 89*04958cbaSBram Moolenaar " Check that global and local values are set. 90*04958cbaSBram Moolenaar set ts=4 vts=6 sts=8 vsts=10 91*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 92*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 93*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 94*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 95*04958cbaSBram Moolenaar new 96*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 97*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 98*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 99*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 100*04958cbaSBram Moolenaar bwipeout! 101*04958cbaSBram Moolenaar 102*04958cbaSBram Moolenaar " Check that local values only are set. 103*04958cbaSBram Moolenaar setlocal ts=5 vts=7 sts=9 vsts=11 104*04958cbaSBram Moolenaar call assert_equal(&ts, 5) 105*04958cbaSBram Moolenaar call assert_equal(&vts, '7') 106*04958cbaSBram Moolenaar call assert_equal(&sts, 9) 107*04958cbaSBram Moolenaar call assert_equal(&vsts, '11') 108*04958cbaSBram Moolenaar new 109*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 110*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 111*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 112*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 113*04958cbaSBram Moolenaar bwipeout! 114*04958cbaSBram Moolenaar 115*04958cbaSBram Moolenaar " Check that global values only are set. 116*04958cbaSBram Moolenaar setglobal ts=6 vts=8 sts=10 vsts=12 117*04958cbaSBram Moolenaar call assert_equal(&ts, 5) 118*04958cbaSBram Moolenaar call assert_equal(&vts, '7') 119*04958cbaSBram Moolenaar call assert_equal(&sts, 9) 120*04958cbaSBram Moolenaar call assert_equal(&vsts, '11') 121*04958cbaSBram Moolenaar new 122*04958cbaSBram Moolenaar call assert_equal(&ts, 6) 123*04958cbaSBram Moolenaar call assert_equal(&vts, '8') 124*04958cbaSBram Moolenaar call assert_equal(&sts, 10) 125*04958cbaSBram Moolenaar call assert_equal(&vsts, '12') 126*04958cbaSBram Moolenaar bwipeout! 127*04958cbaSBram Moolenaar 128*04958cbaSBram Moolenaar set ts& vts& sts& vsts& et& 129*04958cbaSBram Moolenaar bwipeout! 130*04958cbaSBram Moolenaarendfunc 131*04958cbaSBram Moolenaar 132*04958cbaSBram Moolenaarfunc! Test_vartabs_breakindent() 133*04958cbaSBram Moolenaar if !exists("+breakindent") 134*04958cbaSBram Moolenaar return 135*04958cbaSBram Moolenaar endif 136*04958cbaSBram Moolenaar new 137*04958cbaSBram Moolenaar %d 138*04958cbaSBram Moolenaar 139*04958cbaSBram Moolenaar " Test normal operation of tabstops ... 140*04958cbaSBram Moolenaar set ts=4 141*04958cbaSBram Moolenaar call setline(1, join(split('aaaaa', '\zs'), "\t")) 142*04958cbaSBram Moolenaar retab 8 143*04958cbaSBram Moolenaar let expect = "a a\<tab>a a\<tab>a" 144*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 145*04958cbaSBram Moolenaar 146*04958cbaSBram Moolenaar " ... and softtabstops 147*04958cbaSBram Moolenaar set ts=8 sts=6 148*04958cbaSBram Moolenaar exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b" 149*04958cbaSBram Moolenaar let expect = "b b\<tab> b\<tab> b\<tab>b" 150*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 151*04958cbaSBram Moolenaar 152*04958cbaSBram Moolenaar " Test variable tabstops. 153*04958cbaSBram Moolenaar set sts=0 vts=4,8,4,8 154*04958cbaSBram Moolenaar exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c" 155*04958cbaSBram Moolenaar retab 8 156*04958cbaSBram Moolenaar let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c" 157*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 158*04958cbaSBram Moolenaar 159*04958cbaSBram Moolenaar set et vts=4,8,4,8 160*04958cbaSBram Moolenaar exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d" 161*04958cbaSBram Moolenaar let expect = "d d d d d d" 162*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 163*04958cbaSBram Moolenaar 164*04958cbaSBram Moolenaar " Changing ts should have no effect if vts is in use. 165*04958cbaSBram Moolenaar call cursor(1, 1) 166*04958cbaSBram Moolenaar set ts=6 167*04958cbaSBram Moolenaar exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e" 168*04958cbaSBram Moolenaar let expect = "e e e e e e" 169*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 170*04958cbaSBram Moolenaar 171*04958cbaSBram Moolenaar " Clearing vts should revert to using ts. 172*04958cbaSBram Moolenaar set vts= 173*04958cbaSBram Moolenaar exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f" 174*04958cbaSBram Moolenaar let expect = "f f f f f f" 175*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 176*04958cbaSBram Moolenaar 177*04958cbaSBram Moolenaar " Test variable softtabstops. 178*04958cbaSBram Moolenaar set noet ts=8 vsts=12,2,6 179*04958cbaSBram Moolenaar exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g" 180*04958cbaSBram Moolenaar let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g" 181*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 182*04958cbaSBram Moolenaar 183*04958cbaSBram Moolenaar " Variable tabstops and softtabstops combined. 184*04958cbaSBram Moolenaar set vsts=6,12,8 vts=4,6,8 185*04958cbaSBram Moolenaar exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h" 186*04958cbaSBram Moolenaar let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h" 187*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 188*04958cbaSBram Moolenaar 189*04958cbaSBram Moolenaar " Retab with a single value, not using vts. 190*04958cbaSBram Moolenaar set ts=8 sts=0 vts= vsts= 191*04958cbaSBram Moolenaar exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i" 192*04958cbaSBram Moolenaar retab 4 193*04958cbaSBram Moolenaar let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i" 194*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 195*04958cbaSBram Moolenaar 196*04958cbaSBram Moolenaar " Retab with a single value, using vts. 197*04958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 198*04958cbaSBram Moolenaar exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j" 199*04958cbaSBram Moolenaar retab 4 200*04958cbaSBram Moolenaar let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j" 201*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 202*04958cbaSBram Moolenaar 203*04958cbaSBram Moolenaar " Retab with multiple values, not using vts. 204*04958cbaSBram Moolenaar set ts=6 sts=0 vts= vsts= 205*04958cbaSBram Moolenaar exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k" 206*04958cbaSBram Moolenaar retab 4,8 207*04958cbaSBram Moolenaar let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k" 208*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 209*04958cbaSBram Moolenaar 210*04958cbaSBram Moolenaar " Retab with multiple values, using vts. 211*04958cbaSBram Moolenaar set ts=8 sts=0 vts=6 vsts= 212*04958cbaSBram Moolenaar exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l" 213*04958cbaSBram Moolenaar retab 4,8 214*04958cbaSBram Moolenaar let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l" 215*04958cbaSBram Moolenaar call assert_equal(expect, getline(1)) 216*04958cbaSBram Moolenaar 217*04958cbaSBram Moolenaar " Check that global and local values are set. 218*04958cbaSBram Moolenaar set ts=4 vts=6 sts=8 vsts=10 219*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 220*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 221*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 222*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 223*04958cbaSBram Moolenaar new 224*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 225*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 226*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 227*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 228*04958cbaSBram Moolenaar bwipeout! 229*04958cbaSBram Moolenaar 230*04958cbaSBram Moolenaar " Check that local values only are set. 231*04958cbaSBram Moolenaar setlocal ts=5 vts=7 sts=9 vsts=11 232*04958cbaSBram Moolenaar call assert_equal(&ts, 5) 233*04958cbaSBram Moolenaar call assert_equal(&vts, '7') 234*04958cbaSBram Moolenaar call assert_equal(&sts, 9) 235*04958cbaSBram Moolenaar call assert_equal(&vsts, '11') 236*04958cbaSBram Moolenaar new 237*04958cbaSBram Moolenaar call assert_equal(&ts, 4) 238*04958cbaSBram Moolenaar call assert_equal(&vts, '6') 239*04958cbaSBram Moolenaar call assert_equal(&sts, 8) 240*04958cbaSBram Moolenaar call assert_equal(&vsts, '10') 241*04958cbaSBram Moolenaar bwipeout! 242*04958cbaSBram Moolenaar 243*04958cbaSBram Moolenaar " Check that global values only are set. 244*04958cbaSBram Moolenaar setglobal ts=6 vts=8 sts=10 vsts=12 245*04958cbaSBram Moolenaar call assert_equal(&ts, 5) 246*04958cbaSBram Moolenaar call assert_equal(&vts, '7') 247*04958cbaSBram Moolenaar call assert_equal(&sts, 9) 248*04958cbaSBram Moolenaar call assert_equal(&vsts, '11') 249*04958cbaSBram Moolenaar new 250*04958cbaSBram Moolenaar call assert_equal(&ts, 6) 251*04958cbaSBram Moolenaar call assert_equal(&vts, '8') 252*04958cbaSBram Moolenaar call assert_equal(&sts, 10) 253*04958cbaSBram Moolenaar call assert_equal(&vsts, '12') 254*04958cbaSBram Moolenaar bwipeout! 255*04958cbaSBram Moolenaar 256*04958cbaSBram Moolenaar bwipeout! 257*04958cbaSBram Moolenaarendfunc 258