neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

test_shift.vim (24178B)


      1 " Test shifting lines with :> and :<
      2 
      3 source check.vim
      4 
      5 func Test_ex_shift_right()
      6  set shiftwidth=2
      7 
      8  " shift right current line.
      9  call setline(1, range(1, 5))
     10  2
     11  >
     12  3
     13  >>
     14  call assert_equal(['1',
     15        \            '  2',
     16        \            '    3',
     17        \            '4',
     18        \            '5'], getline(1, '$'))
     19 
     20  " shift right with range.
     21  call setline(1, range(1, 4))
     22  2,3>>
     23  call assert_equal(['1',
     24        \            '    2',
     25        \            '    3',
     26        \            '4',
     27        \            '5'], getline(1, '$'))
     28 
     29  " shift right with range and count.
     30  call setline(1, range(1, 4))
     31  2>3
     32  call assert_equal(['1',
     33        \            '  2',
     34        \            '  3',
     35        \            '  4',
     36        \            '5'], getline(1, '$'))
     37 
     38  bw!
     39  set shiftwidth&
     40 endfunc
     41 
     42 func Test_ex_shift_left()
     43  set shiftwidth=2
     44 
     45  call setline(1, range(1, 5))
     46  %>>>
     47 
     48  " left shift current line.
     49  2<
     50  3<<
     51  4<<<<<
     52  call assert_equal(['      1',
     53        \            '    2',
     54        \            '  3',
     55        \            '4',
     56        \            '      5'], getline(1, '$'))
     57 
     58  " shift right with range.
     59  call setline(1, range(1, 5))
     60  %>>>
     61  2,3<<
     62  call assert_equal(['      1',
     63        \            '  2',
     64        \            '  3',
     65        \            '      4',
     66        \            '      5'], getline(1, '$'))
     67 
     68  " shift right with range and count.
     69  call setline(1, range(1, 5))
     70  %>>>
     71  2<<3
     72  call assert_equal(['      1',
     73     \               '  2',
     74     \               '  3',
     75     \               '  4',
     76     \               '      5'], getline(1, '$'))
     77 
     78  bw!
     79  set shiftwidth&
     80 endfunc
     81 
     82 func Test_ex_shift_rightleft()
     83  CheckFeature rightleft
     84 
     85  set shiftwidth=2 rightleft
     86 
     87  call setline(1, range(1, 4))
     88  2,3<<
     89  call assert_equal(['1',
     90        \             '    2',
     91        \             '    3',
     92        \             '4'], getline(1, '$'))
     93 
     94  3,4>
     95  call assert_equal(['1',
     96        \            '    2',
     97        \            '  3',
     98        \            '4'], getline(1, '$'))
     99 
    100  bw!
    101  set rightleft& shiftwidth&
    102 endfunc
    103 
    104 func Test_ex_shift_errors()
    105  call assert_fails('><', 'E488:')
    106  call assert_fails('<>', 'E488:')
    107 
    108  call assert_fails('>!', 'E477:')
    109  call assert_fails('<!', 'E477:')
    110 
    111  call assert_fails('2,1>', 'E493:')
    112  call assert_fails('2,1<', 'E493:')
    113 endfunc
    114 
    115 " Test inserting a backspace at the start of a line.
    116 "
    117 " This is to verify the proper behavior of tabstop_start() as called from
    118 " ins_bs().
    119 "
    120 func Test_shift_ins_bs()
    121  set backspace=indent,start
    122  set softtabstop=11
    123 
    124  call setline(1, repeat(" ", 33) . "word")
    125  exe "norm! I\<BS>"
    126  call assert_equal(repeat(" ", 22) . "word", getline(1))
    127  call setline(1, repeat(" ", 23) . "word")
    128  exe "norm! I\<BS>"
    129  call assert_equal(repeat(" ", 22) . "word", getline(1))
    130  exe "norm! I\<BS>"
    131  call assert_equal(repeat(" ", 11) . "word", getline(1))
    132 
    133  set backspace& softtabstop&
    134  bw!
    135 endfunc
    136 
    137 " Test inserting a backspace at the start of a line, with 'varsofttabstop'.
    138 "
    139 func Test_shift_ins_bs_vartabs()
    140  CheckFeature vartabs
    141  set backspace=indent,start
    142  set varsofttabstop=13,11,7
    143 
    144  call setline(1, repeat(" ", 44) . "word")
    145  exe "norm! I\<BS>"
    146  call assert_equal(repeat(" ", 38) . "word", getline(1))
    147  call setline(1, repeat(" ", 39) . "word")
    148  exe "norm! I\<BS>"
    149  call assert_equal(repeat(" ", 38) . "word", getline(1))
    150  exe "norm! I\<BS>"
    151  call assert_equal(repeat(" ", 31) . "word", getline(1))
    152  exe "norm! I\<BS>"
    153  call assert_equal(repeat(" ", 24) . "word", getline(1))
    154  exe "norm! I\<BS>"
    155  call assert_equal(repeat(" ", 13) . "word", getline(1))
    156  exe "norm! I\<BS>"
    157  call assert_equal(                  "word", getline(1))
    158  exe "norm! I\<BS>"
    159  call assert_equal(                  "word", getline(1))
    160 
    161  set backspace& varsofttabstop&
    162  bw!
    163 endfunc
    164 
    165 " Test the >> and << normal-mode commands.
    166 "
    167 func Test_shift_norm()
    168  set expandtab                 " Don't want to worry about tabs vs. spaces in
    169                                " results.
    170 
    171  set shiftwidth=5
    172  set tabstop=7
    173 
    174  call setline(1, "  word")
    175 
    176  " Shift by 'shiftwidth' right and left.
    177 
    178  norm! >>
    179  call assert_equal(repeat(" ",  7) . "word", getline(1))
    180  norm! >>
    181  call assert_equal(repeat(" ",  12) . "word", getline(1))
    182  norm! >>
    183  call assert_equal(repeat(" ",  17) . "word", getline(1))
    184 
    185  norm! <<
    186  call assert_equal(repeat(" ",  12) . "word", getline(1))
    187  norm! <<
    188  call assert_equal(repeat(" ",  7) . "word", getline(1))
    189  norm! <<
    190  call assert_equal(repeat(" ",  2) . "word", getline(1))
    191  norm! <<
    192  call assert_equal(repeat(" ",  0) . "word", getline(1))
    193 
    194  " Shift by 'tabstop' right and left.
    195 
    196  set shiftwidth=0
    197  call setline(1, "  word")
    198 
    199  norm! >>
    200  call assert_equal(repeat(" ",  9) . "word", getline(1))
    201  norm! >>
    202  call assert_equal(repeat(" ",  16) . "word", getline(1))
    203  norm! >>
    204  call assert_equal(repeat(" ",  23) . "word", getline(1))
    205 
    206  norm! <<
    207  call assert_equal(repeat(" ",  16) . "word", getline(1))
    208  norm! <<
    209  call assert_equal(repeat(" ",  9) . "word", getline(1))
    210  norm! <<
    211  call assert_equal(repeat(" ",  2) . "word", getline(1))
    212  norm! <<
    213  call assert_equal(repeat(" ",  0) . "word", getline(1))
    214 
    215  set expandtab& shiftwidth& tabstop&
    216  bw!
    217 endfunc
    218 
    219 " Test the >> and << normal-mode commands, with 'vartabstop'.
    220 "
    221 func Test_shift_norm_vartabs()
    222  CheckFeature vartabs
    223  set expandtab                 " Don't want to worry about tabs vs. spaces in
    224                                " results.
    225 
    226  set shiftwidth=0
    227  set vartabstop=19,17,11
    228 
    229  " Shift by 'vartabstop' right and left.
    230 
    231  call setline(1, "  word")
    232 
    233  norm! >>
    234  call assert_equal(repeat(" ",  21) . "word", getline(1))
    235  norm! >>
    236  call assert_equal(repeat(" ",  38) . "word", getline(1))
    237  norm! >>
    238  call assert_equal(repeat(" ",  49) . "word", getline(1))
    239  norm! >>
    240  call assert_equal(repeat(" ",  60) . "word", getline(1))
    241 
    242  norm! <<
    243  call assert_equal(repeat(" ",  49) . "word", getline(1))
    244  norm! <<
    245  call assert_equal(repeat(" ",  38) . "word", getline(1))
    246  norm! <<
    247  call assert_equal(repeat(" ",  21) . "word", getline(1))
    248  norm! <<
    249  call assert_equal(repeat(" ",  2) . "word", getline(1))
    250  norm! <<
    251  call assert_equal(repeat(" ",  0) . "word", getline(1))
    252 
    253  set expandtab& shiftwidth& vartabstop&
    254  bw!
    255 endfunc
    256 
    257 " Test the >> and << normal-mode commands with 'shiftround'.
    258 "
    259 func Test_shift_norm_round()
    260  set expandtab                 " Don't want to worry about tabs vs. spaces in
    261                                " results.
    262 
    263  set shiftround
    264  set shiftwidth=5
    265  set tabstop=7
    266 
    267  call setline(1, "word")
    268 
    269  " Shift by 'shiftwidth' right and left.
    270 
    271  exe "norm! I  "
    272  norm! >>
    273  call assert_equal(repeat(" ",  5) . "word", getline(1))
    274  exe "norm! I  "
    275  norm! >>
    276  call assert_equal(repeat(" ",  10) . "word", getline(1))
    277  exe "norm! I  "
    278  norm! >>
    279  call assert_equal(repeat(" ",  15) . "word", getline(1))
    280  norm! >>
    281  call assert_equal(repeat(" ",  20) . "word", getline(1))
    282  norm! >>
    283  call assert_equal(repeat(" ",  25) . "word", getline(1))
    284 
    285  norm! <<
    286  call assert_equal(repeat(" ",  20) . "word", getline(1))
    287  norm! <<
    288  call assert_equal(repeat(" ",  15) . "word", getline(1))
    289  norm! <<
    290  call assert_equal(repeat(" ",  10) . "word", getline(1))
    291  exe "norm! I  "
    292  norm! <<
    293  call assert_equal(repeat(" ",  10) . "word", getline(1))
    294 
    295  call setline(1, repeat(" ", 7) . "word")
    296  norm! <<
    297  call assert_equal(repeat(" ",  5) . "word", getline(1))
    298  norm! <<
    299  call assert_equal(repeat(" ",  0) . "word", getline(1))
    300  norm! <<
    301  call assert_equal(repeat(" ",  0) . "word", getline(1))
    302  call setline(1, repeat(" ", 2) . "word")
    303  norm! <<
    304  call assert_equal(repeat(" ",  0) . "word", getline(1))
    305 
    306  " Shift by 'tabstop' right and left.
    307 
    308  set shiftwidth=0
    309  call setline(1, "word")
    310 
    311  exe "norm! I  "
    312  norm! >>
    313  call assert_equal(repeat(" ",  7) . "word", getline(1))
    314  exe "norm! I  "
    315  norm! >>
    316  call assert_equal(repeat(" ",  14) . "word", getline(1))
    317  exe "norm! I  "
    318  norm! >>
    319  call assert_equal(repeat(" ",  21) . "word", getline(1))
    320  norm! >>
    321  call assert_equal(repeat(" ",  28) . "word", getline(1))
    322  norm! >>
    323  call assert_equal(repeat(" ",  35) . "word", getline(1))
    324 
    325  norm! <<
    326  call assert_equal(repeat(" ",  28) . "word", getline(1))
    327  norm! <<
    328  call assert_equal(repeat(" ",  21) . "word", getline(1))
    329  norm! <<
    330  call assert_equal(repeat(" ",  14) . "word", getline(1))
    331  exe "norm! I  "
    332  norm! <<
    333  call assert_equal(repeat(" ",  14) . "word", getline(1))
    334 
    335  call setline(1, repeat(" ", 9) . "word")
    336  norm! <<
    337  call assert_equal(repeat(" ",  7) . "word", getline(1))
    338  norm! <<
    339  call assert_equal(repeat(" ",  0) . "word", getline(1))
    340  norm! <<
    341  call assert_equal(repeat(" ",  0) . "word", getline(1))
    342  call setline(1, repeat(" ", 2) . "word")
    343  norm! <<
    344  call assert_equal(repeat(" ",  0) . "word", getline(1))
    345 
    346  set expandtab& shiftround& shiftwidth& tabstop&
    347  bw!
    348 endfunc
    349 
    350 " Test the >> and << normal-mode commands with 'shiftround' and 'vartabstop'.
    351 "
    352 func Test_shift_norm_round_vartabs()
    353  CheckFeature vartabs
    354  set expandtab                 " Don't want to worry about tabs vs. spaces in
    355                                " results.
    356 
    357  set shiftround
    358  set shiftwidth=0
    359  set vartabstop=19,17,11
    360 
    361  " Shift by 'vartabstop' right and left.
    362 
    363  call setline(1, "word")
    364 
    365  exe "norm! I  "
    366  norm! >>
    367  call assert_equal(repeat(" ",  19) . "word", getline(1))
    368  exe "norm! I  "
    369  norm! >>
    370  call assert_equal(repeat(" ",  36) . "word", getline(1))
    371  exe "norm! I  "
    372  norm! >>
    373  call assert_equal(repeat(" ",  47) . "word", getline(1))
    374  exe "norm! I  "
    375  norm! >>
    376  call assert_equal(repeat(" ",  58) . "word", getline(1))
    377 
    378  exe "norm! I  "
    379  norm! <<
    380  call assert_equal(repeat(" ",  58) . "word", getline(1))
    381  norm! <<
    382  call assert_equal(repeat(" ",  47) . "word", getline(1))
    383  norm! <<
    384  call assert_equal(repeat(" ",  36) . "word", getline(1))
    385  norm! <<
    386  call assert_equal(repeat(" ",  19) . "word", getline(1))
    387  exe "norm! I  "
    388  norm! <<
    389  call assert_equal(repeat(" ",  19) . "word", getline(1))
    390  norm! <<
    391  call assert_equal(repeat(" ",  0) . "word", getline(1))
    392  exe "norm! I  "
    393  call assert_equal(repeat(" ",  2) . "word", getline(1))
    394  norm! <<
    395  call assert_equal(repeat(" ",  0) . "word", getline(1))
    396  norm! <<
    397  call assert_equal(repeat(" ",  0) . "word", getline(1))
    398 
    399  set expandtab& shiftround& shiftwidth& vartabstop&
    400  bw!
    401 endfunc
    402 
    403 " Test the V> and V< visual-mode commands.
    404 "
    405 " See ":help v_<" and ":help v_>".  See also the last paragraph of "3. Simple
    406 " changes", ":help simple-change", immediately above "4. Complex changes",
    407 " ":help complex-change".
    408 "
    409 func Test_shift_vis()
    410  set expandtab                 " Don't want to worry about tabs vs. spaces in
    411                                " results.
    412 
    413  set shiftwidth=5
    414  set tabstop=7
    415 
    416  call setline(1, "  word")
    417 
    418  " Shift by 'shiftwidth' right and left.
    419 
    420  norm! V>
    421  call assert_equal(repeat(" ",  7) . "word", getline(1))
    422  norm! V2>
    423  call assert_equal(repeat(" ",  17) . "word", getline(1))
    424  norm! V3>
    425  call assert_equal(repeat(" ",  32) . "word", getline(1))
    426 
    427  norm! V<
    428  call assert_equal(repeat(" ",  27) . "word", getline(1))
    429  norm! V2<
    430  call assert_equal(repeat(" ",  17) . "word", getline(1))
    431  norm! V3<
    432  call assert_equal(repeat(" ",  2) . "word", getline(1))
    433  norm! V<
    434  call assert_equal(repeat(" ",  0) . "word", getline(1))
    435  norm! V3<
    436  call assert_equal(repeat(" ",  0) . "word", getline(1))
    437 
    438  " Shift by 'tabstop' right and left.
    439 
    440  set shiftwidth=0
    441  call setline(1, "  word")
    442 
    443  norm! V>
    444  call assert_equal(repeat(" ",  9) . "word", getline(1))
    445  norm! V2>
    446  call assert_equal(repeat(" ",  23) . "word", getline(1))
    447  norm! V3>
    448  call assert_equal(repeat(" ",  44) . "word", getline(1))
    449 
    450  norm! V<
    451  call assert_equal(repeat(" ",  37) . "word", getline(1))
    452  norm! V2<
    453  call assert_equal(repeat(" ",  23) . "word", getline(1))
    454  norm! V3<
    455  call assert_equal(repeat(" ",  2) . "word", getline(1))
    456  norm! V<
    457  call assert_equal(repeat(" ",  0) . "word", getline(1))
    458  norm! V3<
    459  call assert_equal(repeat(" ",  0) . "word", getline(1))
    460 
    461  set expandtab& shiftwidth& tabstop&
    462  bw!
    463 endfunc
    464 
    465 " Test the V> and V< visual-mode commands, with 'vartabstop'.
    466 "
    467 " See ":help v_<" and ":help v_>".  See also the last paragraph of "3. Simple
    468 " changes", ":help simple-change", immediately above "4. Complex changes",
    469 " ":help complex-change".
    470 "
    471 func Test_shift_vis_vartabs()
    472  CheckFeature vartabs
    473  set expandtab                 " Don't want to worry about tabs vs. spaces in
    474                                " results.
    475 
    476  set shiftwidth=0
    477  set vartabstop=19,17,11
    478 
    479  " Shift by 'vartabstop' right and left.
    480 
    481  call setline(1, "  word")
    482 
    483  norm! V>
    484  call assert_equal(repeat(" ",  21) . "word", getline(1))
    485  norm! V2>
    486  call assert_equal(repeat(" ",  49) . "word", getline(1))
    487  norm! V3>
    488  call assert_equal(repeat(" ",  82) . "word", getline(1))
    489 
    490  norm! V<
    491  call assert_equal(repeat(" ",  71) . "word", getline(1))
    492  norm! V2<
    493  call assert_equal(repeat(" ",  49) . "word", getline(1))
    494  norm! V3<
    495  call assert_equal(repeat(" ",  2) . "word", getline(1))
    496  norm! V<
    497  call assert_equal(repeat(" ",  0) . "word", getline(1))
    498  norm! V3<
    499  call assert_equal(repeat(" ",  0) . "word", getline(1))
    500 
    501  set expandtab& shiftwidth& vartabstop&
    502  bw!
    503 endfunc
    504 
    505 " Test the V> and V< visual-mode commands with 'shiftround'.
    506 "
    507 func Test_shift_vis_round()
    508  set expandtab                 " Don't want to worry about tabs vs. spaces in
    509                                " results.
    510 
    511  set shiftround
    512  set shiftwidth=5
    513  set tabstop=7
    514 
    515  call setline(1, "word")
    516 
    517  " Shift by 'shiftwidth' right and left.
    518 
    519  exe "norm! I  "
    520  norm! V>
    521  call assert_equal(repeat(" ",  5) . "word", getline(1))
    522  exe "norm! I  "
    523  norm! V2>
    524  call assert_equal(repeat(" ",  15) . "word", getline(1))
    525  exe "norm! I  "
    526  norm! V3>
    527  call assert_equal(repeat(" ",  30) . "word", getline(1))
    528 
    529  exe "norm! I  "
    530  norm! V2<
    531  call assert_equal(repeat(" ",  25) . "word", getline(1))
    532  norm! V3<
    533  call assert_equal(repeat(" ",  10) . "word", getline(1))
    534  norm! V<
    535  call assert_equal(repeat(" ",  5) . "word", getline(1))
    536  norm! V<
    537  call assert_equal(repeat(" ",  0) . "word", getline(1))
    538  norm! V3<
    539  call assert_equal(repeat(" ",  0) . "word", getline(1))
    540 
    541  " Shift by 'tabstop' right and left.
    542 
    543  set shiftwidth=0
    544  call setline(1, "word")
    545 
    546  exe "norm! I  "
    547  norm! V>
    548  call assert_equal(repeat(" ",  7) . "word", getline(1))
    549  exe "norm! I  "
    550  norm! V2>
    551  call assert_equal(repeat(" ",  21) . "word", getline(1))
    552  exe "norm! I  "
    553  norm! V3>
    554  call assert_equal(repeat(" ",  42) . "word", getline(1))
    555 
    556  exe "norm! I  "
    557  norm! V<
    558  call assert_equal(repeat(" ",  42) . "word", getline(1))
    559  norm! V<
    560  call assert_equal(repeat(" ",  35) . "word", getline(1))
    561  norm! V2<
    562  call assert_equal(repeat(" ",  21) . "word", getline(1))
    563  norm! V3<
    564  call assert_equal(repeat(" ",  0) . "word", getline(1))
    565  norm! V<
    566  call assert_equal(repeat(" ",  0) . "word", getline(1))
    567  norm! V3<
    568  call assert_equal(repeat(" ",  0) . "word", getline(1))
    569 
    570  call setline(1, "  word")
    571  norm! V<
    572  call assert_equal(repeat(" ",  0) . "word", getline(1))
    573 
    574 
    575  set expandtab& shiftround& shiftwidth& tabstop&
    576  bw!
    577 endfunc
    578 
    579 " Test the V> and V< visual-mode commands with 'shiftround' and 'vartabstop'.
    580 "
    581 func Test_shift_vis_round_vartabs()
    582  CheckFeature vartabs
    583  set expandtab                 " Don't want to worry about tabs vs. spaces in
    584                                " results.
    585 
    586  set shiftround
    587  set shiftwidth=0
    588  set vartabstop=19,17,11
    589 
    590  " Shift by 'vartabstop' right and left.
    591 
    592  call setline(1, "word")
    593 
    594  exe "norm! I  "
    595  norm! V>
    596  call assert_equal(repeat(" ",  19) . "word", getline(1))
    597  exe "norm! I  "
    598  norm! V3>
    599  call assert_equal(repeat(" ",  58) . "word", getline(1))
    600 
    601  exe "norm! I  "
    602  norm! V2<
    603  call assert_equal(repeat(" ",  47) . "word", getline(1))
    604  exe "norm! I  "
    605  norm! V3<
    606  call assert_equal(repeat(" ",  19) . "word", getline(1))
    607  exe "norm! I  "
    608  norm! V3<
    609  call assert_equal(repeat(" ",  0) . "word", getline(1))
    610  exe "norm! I  "
    611  norm! V<
    612  call assert_equal(repeat(" ",  0) . "word", getline(1))
    613 
    614  set expandtab& shiftround& shiftwidth& vartabstop&
    615  bw!
    616 endfunc
    617 
    618 " Test the :> and :< ex-mode commands.
    619 "
    620 func Test_shift_ex()
    621  set expandtab                 " Don't want to worry about tabs vs. spaces in
    622                                " results.
    623 
    624  set shiftwidth=5
    625  set tabstop=7
    626 
    627  call setline(1, "  word")
    628 
    629  " Shift by 'shiftwidth' right and left.
    630 
    631  >
    632  call assert_equal(repeat(" ",  7) . "word", getline(1))
    633  >>
    634  call assert_equal(repeat(" ",  17) . "word", getline(1))
    635  >>>
    636  call assert_equal(repeat(" ",  32) . "word", getline(1))
    637 
    638  <<<<
    639  call assert_equal(repeat(" ",  12) . "word", getline(1))
    640  <
    641  call assert_equal(repeat(" ",  7) . "word", getline(1))
    642  <
    643  call assert_equal(repeat(" ",  2) . "word", getline(1))
    644  <
    645  call assert_equal(repeat(" ",  0) . "word", getline(1))
    646 
    647  " Shift by 'tabstop' right and left.
    648 
    649  set shiftwidth=0
    650  call setline(1, "  word")
    651 
    652  >
    653  call assert_equal(repeat(" ",  9) . "word", getline(1))
    654  >>
    655  call assert_equal(repeat(" ",  23) . "word", getline(1))
    656  >>>
    657  call assert_equal(repeat(" ",  44) . "word", getline(1))
    658 
    659  <<<<
    660  call assert_equal(repeat(" ",  16) . "word", getline(1))
    661  <<
    662  call assert_equal(repeat(" ",  2) . "word", getline(1))
    663  <
    664  call assert_equal(repeat(" ",  0) . "word", getline(1))
    665 
    666  set expandtab& shiftwidth& tabstop&
    667  bw!
    668 endfunc
    669 
    670 " Test the :> and :< ex-mode commands, with vartabstop.
    671 "
    672 func Test_shift_ex_vartabs()
    673  CheckFeature vartabs
    674  set expandtab                 " Don't want to worry about tabs vs. spaces in
    675                                " results.
    676 
    677  set shiftwidth=0
    678  set vartabstop=19,17,11
    679 
    680  " Shift by 'vartabstop' right and left.
    681 
    682  call setline(1, "  word")
    683 
    684  >
    685  call assert_equal(repeat(" ",  21) . "word", getline(1))
    686  >>
    687  call assert_equal(repeat(" ",  49) . "word", getline(1))
    688  >>>
    689  call assert_equal(repeat(" ",  82) . "word", getline(1))
    690 
    691  <<<<
    692  call assert_equal(repeat(" ",  38) . "word", getline(1))
    693  <<
    694  call assert_equal(repeat(" ",  2) . "word", getline(1))
    695  <
    696  call assert_equal(repeat(" ",  0) . "word", getline(1))
    697 
    698  set expandtab& shiftwidth& vartabstop&
    699  bw!
    700 endfunc
    701 
    702 " Test the :> and :< ex-mode commands with 'shiftround'.
    703 "
    704 func Test_shift_ex_round()
    705  set expandtab                 " Don't want to worry about tabs vs. spaces in
    706                                " results.
    707 
    708  set shiftround
    709  set shiftwidth=5
    710  set tabstop=7
    711 
    712  call setline(1, "word")
    713 
    714  " Shift by 'shiftwidth' right and left.
    715 
    716  exe "norm! I  "
    717  >
    718  call assert_equal(repeat(" ",  5) . "word", getline(1))
    719  exe "norm! I  "
    720  >>
    721  call assert_equal(repeat(" ",  15) . "word", getline(1))
    722  exe "norm! I  "
    723  >>>
    724  call assert_equal(repeat(" ",  30) . "word", getline(1))
    725 
    726  exe "norm! I  "
    727  <<<<
    728  call assert_equal(repeat(" ",  15) . "word", getline(1))
    729  exe "norm! I  "
    730  <<
    731  call assert_equal(repeat(" ",  10) . "word", getline(1))
    732  <<
    733  call assert_equal(repeat(" ",  0) . "word", getline(1))
    734  >>
    735  <<<
    736  call assert_equal(repeat(" ",  0) . "word", getline(1))
    737 
    738  " Shift by 'tabstop' right and left.
    739 
    740  set shiftwidth=0
    741  call setline(1, "word")
    742 
    743  exe "norm! I  "
    744  >
    745  call assert_equal(repeat(" ",  7) . "word", getline(1))
    746  exe "norm! I  "
    747  >>
    748  call assert_equal(repeat(" ",  21) . "word", getline(1))
    749  exe "norm! I  "
    750  >>>
    751  call assert_equal(repeat(" ",  42) . "word", getline(1))
    752 
    753  exe "norm! I  "
    754  <<<<
    755  call assert_equal(repeat(" ",  21) . "word", getline(1))
    756  exe "norm! I  "
    757  <<
    758  call assert_equal(repeat(" ",  14) . "word", getline(1))
    759  exe "norm! I  "
    760  <<<
    761  call assert_equal(repeat(" ",  0) . "word", getline(1))
    762  >>
    763  <<<
    764  call assert_equal(repeat(" ",  0) . "word", getline(1))
    765 
    766  set expandtab& shiftround& shiftwidth& tabstop&
    767  bw!
    768 endfunc
    769 
    770 " Test the :> and :< ex-mode commands with 'shiftround' and 'vartabstop'.
    771 "
    772 func Test_shift_ex_round_vartabs()
    773  CheckFeature vartabs
    774  set expandtab                 " Don't want to worry about tabs vs. spaces in
    775                                " results.
    776 
    777  set shiftround
    778  set shiftwidth=0
    779  set vartabstop=19,17,11
    780 
    781  " Shift by 'vartabstop' right and left.
    782 
    783  call setline(1, "word")
    784 
    785  exe "norm! I  "
    786  >
    787  call assert_equal(repeat(" ",  19) . "word", getline(1))
    788  exe "norm! I  "
    789  >>
    790  call assert_equal(repeat(" ",  47) . "word", getline(1))
    791  >>>
    792  call assert_equal(repeat(" ",  80) . "word", getline(1))
    793 
    794  <<<<
    795  call assert_equal(repeat(" ",  36) . "word", getline(1))
    796  exe "norm! I  "
    797  <<
    798  call assert_equal(repeat(" ",  19) . "word", getline(1))
    799  exe "norm! I  "
    800  <<
    801  call assert_equal(repeat(" ",  0) . "word", getline(1))
    802  <
    803  call assert_equal(repeat(" ",  0) . "word", getline(1))
    804 
    805  set expandtab& shiftround& shiftwidth& vartabstop&
    806  bw!
    807 endfunc
    808 
    809 " Test shifting lines with <C-T> and <C-D>.
    810 "
    811 func Test_shift_ins()
    812  set expandtab                 " Don't want to worry about tabs vs. spaces in
    813                                " results.
    814 
    815  set shiftwidth=5
    816  set tabstop=7
    817 
    818  " Shift by 'shiftwidth' right and left.
    819 
    820  call setline(1, repeat(" ", 7) . "word")
    821  exe "norm! 9|i\<C-T>"
    822  call assert_equal(repeat(" ", 10) . "word", getline(1))
    823  exe "norm! A\<C-T>"
    824  call assert_equal(repeat(" ", 15) . "word", getline(1))
    825  exe "norm! I  \<C-T>"
    826  call assert_equal(repeat(" ", 20) . "word", getline(1))
    827 
    828  exe "norm! I  \<C-D>"
    829  call assert_equal(repeat(" ", 20) . "word", getline(1))
    830  exe "norm! I  "
    831  exe "norm! 24|i\<C-D>"
    832  call assert_equal(repeat(" ", 20) . "word", getline(1))
    833  exe "norm! A\<C-D>"
    834  call assert_equal(repeat(" ", 15) . "word", getline(1))
    835  exe "norm! I  "
    836  exe "norm! A\<C-D>\<C-D>"
    837  call assert_equal(repeat(" ", 10) . "word", getline(1))
    838  exe "norm! I\<C-D>\<C-D>\<C-D>"
    839  call assert_equal(repeat(" ", 0) . "word", getline(1))
    840  exe "norm! I\<C-D>"
    841  call assert_equal(repeat(" ", 0) . "word", getline(1))
    842 
    843  " Shift by 'tabstop' right and left.
    844 
    845  set shiftwidth=0
    846  call setline(1, "word")
    847 
    848  call setline(1, repeat(" ", 9) . "word")
    849  exe "norm! 11|i\<C-T>"
    850  call assert_equal(repeat(" ", 14) . "word", getline(1))
    851  exe "norm! A\<C-T>"
    852  call assert_equal(repeat(" ", 21) . "word", getline(1))
    853  exe "norm! I  \<C-T>"
    854  call assert_equal(repeat(" ", 28) . "word", getline(1))
    855 
    856  exe "norm! I  \<C-D>"
    857  call assert_equal(repeat(" ", 28) . "word", getline(1))
    858  exe "norm! I  "
    859  exe "norm! 32|i\<C-D>"
    860  call assert_equal(repeat(" ", 28) . "word", getline(1))
    861  exe "norm! A\<C-D>"
    862  call assert_equal(repeat(" ", 21) . "word", getline(1))
    863  exe "norm! I  "
    864  exe "norm! A\<C-D>\<C-D>"
    865  call assert_equal(repeat(" ", 14) . "word", getline(1))
    866  exe "norm! I\<C-D>\<C-D>\<C-D>"
    867  call assert_equal(repeat(" ", 0) . "word", getline(1))
    868  exe "norm! I\<C-D>"
    869  call assert_equal(repeat(" ", 0) . "word", getline(1))
    870 
    871  set expandtab& shiftwidth& tabstop&
    872  bw!
    873 endfunc
    874 
    875 " Test shifting lines with <C-T> and <C-D>, with 'vartabstop'.
    876 "
    877 func Test_shift_ins_vartabs()
    878  CheckFeature vartabs
    879  set expandtab                 " Don't want to worry about tabs vs. spaces in
    880                                " results.
    881 
    882  set shiftwidth=0
    883  set vartabstop=19,17,11
    884 
    885  " Shift by 'vartabstop' right and left.
    886 
    887  call setline(1, "word")
    888 
    889  call setline(1, repeat(" ", 9) . "word")
    890  exe "norm! 11|i\<C-T>"
    891  call assert_equal(repeat(" ", 19) . "word", getline(1))
    892  exe "norm! A\<C-T>"
    893  call assert_equal(repeat(" ", 36) . "word", getline(1))
    894  exe "norm! I  \<C-T>"
    895  call assert_equal(repeat(" ", 47) . "word", getline(1))
    896 
    897  exe "norm! I  \<C-D>"
    898  call assert_equal(repeat(" ", 47) . "word", getline(1))
    899  exe "norm! I  "
    900  exe "norm! 51|i\<C-D>"
    901  call assert_equal(repeat(" ", 47) . "word", getline(1))
    902  exe "norm! A\<C-D>"
    903  call assert_equal(repeat(" ", 36) . "word", getline(1))
    904  exe "norm! I  "
    905  exe "norm! A\<C-D>\<C-D>"
    906  call assert_equal(repeat(" ", 19) . "word", getline(1))
    907  exe "norm! I\<C-D>\<C-D>\<C-D>"
    908  call assert_equal(repeat(" ", 0) . "word", getline(1))
    909  exe "norm! I\<C-D>"
    910  call assert_equal(repeat(" ", 0) . "word", getline(1))
    911 
    912  set expandtab& shiftwidth& vartabstop&
    913  bw!
    914 endfunc
    915 
    916 " vim: shiftwidth=2 sts=2 expandtab