neovim

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

test_scrollbind.vim (7839B)


      1 " Test for 'scrollbind' causing an unexpected scroll of one of the windows.
      2 func Test_scrollbind()
      3  " We don't want the status line to cause problems:
      4  set laststatus=0
      5  let totalLines = &lines * 20
      6  let middle = totalLines / 2
      7  new | only
      8  for i in range(1, totalLines)
      9      call setline(i, 'LINE ' . i)
     10  endfor
     11  exe string(middle)
     12  normal zt
     13  normal M
     14  aboveleft vert new
     15  for i in range(1, totalLines)
     16      call setline(i, 'line ' . i)
     17  endfor
     18  exe string(middle)
     19  normal zt
     20  normal M
     21  " Execute the following two commands at once to reproduce the problem.
     22  setl scb | wincmd p
     23  setl scb
     24  wincmd w
     25  let topLineLeft = line('w0')
     26  wincmd p
     27  let topLineRight = line('w0')
     28  setl noscrollbind
     29  wincmd p
     30  setl noscrollbind
     31  call assert_equal(0, topLineLeft - topLineRight)
     32 endfunc
     33 
     34 " Test for 'scrollbind'
     35 func Test_scrollbind_opt()
     36  new | only
     37  set noscrollbind
     38  set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow
     39 
     40  " Insert the text used for the test
     41  append
     42 
     43 
     44 start of window 1
     45 . line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
     46 . line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
     47 . line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
     48 . line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
     49 . line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
     50 . line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
     51 . line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
     52 . line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
     53 . line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
     54 . line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
     55 . line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
     56 . line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
     57 . line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
     58 . line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
     59 . line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
     60 end of window 1
     61 
     62 
     63 start of window 2
     64 . line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
     65 . line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
     66 . line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
     67 . line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
     68 . line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
     69 . line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
     70 . line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
     71 . line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
     72 . line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
     73 . line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
     74 . line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
     75 . line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
     76 . line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
     77 . line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
     78 . line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
     79 . line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
     80 end of window 2
     81 
     82 .
     83 
     84  " Test using two windows open to one buffer, one extra empty window
     85  split
     86  new
     87  wincmd t
     88  resize 8
     89  call search('^start of window 1$')
     90  normal zt
     91  set scrollbind
     92  wincmd j
     93  resize 7
     94  call search('^start of window 2$')
     95  normal zt
     96  set scrollbind
     97 
     98  " -- start of tests --
     99  " Test scrolling down
    100  normal L5jHyy
    101  wincmd b | normal pr0
    102  wincmd t | normal Hyy
    103  wincmd b | normal pr1
    104  wincmd t | normal L6jHyy
    105  wincmd b | normal pr2
    106  wincmd k | normal Hyy
    107  wincmd b | normal pr3
    108 
    109  " Test scrolling up
    110  wincmd t | normal H4k
    111  wincmd j | normal H
    112  wincmd t | normal Hyy
    113  wincmd b | normal pr4
    114  wincmd k | normal Hyy
    115  wincmd b | normal pr5
    116  wincmd k | normal 3k
    117  wincmd t | normal H
    118  wincmd j | normal Hyy
    119  wincmd b | normal pr6
    120  wincmd t | normal Hyy
    121  wincmd b | normal pr7
    122 
    123  " Test horizontal scrolling
    124  set scrollopt+=hor
    125  normal gg"zyyG"zpG
    126  wincmd t | normal 015zly$
    127  wincmd b | normal p"zpG
    128  wincmd k | normal y$
    129  wincmd b | normal p"zpG
    130  wincmd k | normal 10jH7zhg0y$
    131  wincmd b | normal p"zpG
    132  wincmd t | normal Hg0y$
    133  wincmd b | normal p"zpG
    134  set scrollopt-=hor
    135 
    136  wincmd b
    137  call assert_equal([
    138       \ '',
    139       \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
    140       \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
    141       \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
    142       \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
    143       \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
    144       \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
    145       \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
    146       \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
    147       \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
    148       \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
    149       \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
    150       \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
    151       \ ''],  getline(1, '$'))
    152  enew!
    153 
    154  " ****** tests using two different buffers *****
    155  wincmd t | wincmd j | close
    156  wincmd t | set noscrollbind
    157  /start of window 2$/,/^end of window 2$/y
    158  new
    159  wincmd t | wincmd j | normal 4"zpGp
    160  wincmd t
    161  call search('^start of window 1$')
    162  normal zt
    163  set scrollbind
    164  wincmd j
    165  call search('^start of window 2$')
    166  normal zt
    167  set scrollbind
    168 
    169  " -- start of tests --
    170  " Test scrolling down
    171  normal L5jHyy
    172  wincmd b | normal pr0
    173  wincmd t | normal Hyy
    174  wincmd b | normal pr1
    175  wincmd t | normal L6jHyy
    176  wincmd b | normal pr2
    177  wincmd k | normal Hyy
    178  wincmd b | normal pr3
    179 
    180  " Test scrolling up
    181  wincmd t | normal H4k
    182  wincmd j | normal H
    183  wincmd t | normal Hyy
    184  wincmd b | normal pr4
    185  wincmd k | normal Hyy
    186  wincmd b | normal pr5
    187  wincmd k | normal 3k
    188  wincmd t | normal H
    189  wincmd j | normal Hyy
    190  wincmd b | normal pr6
    191  wincmd t | normal Hyy
    192  wincmd b | normal pr7
    193 
    194  " Test horizontal scrolling
    195  set scrollopt+=hor
    196  normal gg"zyyG"zpG
    197  wincmd t | normal 015zly$
    198  wincmd b | normal p"zpG
    199  wincmd k | normal y$
    200  wincmd b | normal p"zpG
    201  wincmd k | normal 10jH7zhg0y$
    202  wincmd b | normal p"zpG
    203  wincmd t | normal Hg0y$
    204  wincmd b | normal p"zpG
    205  set scrollopt-=hor
    206 
    207  wincmd b
    208  call assert_equal([
    209       \ '',
    210       \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
    211       \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
    212       \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
    213       \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
    214       \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
    215       \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
    216       \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
    217       \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
    218       \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
    219       \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
    220       \ '. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10',
    221       \ '. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10',
    222       \ ''],  getline(1, '$'))
    223  enew!
    224 
    225  " Test 'syncbind'
    226  wincmd t | set noscrollbind | normal ggL
    227  wincmd j | set noscrollbind | normal ggL
    228  set scrollbind
    229  wincmd t | set scrollbind | normal G
    230  wincmd j | normal G
    231  syncbind
    232  normal Hk
    233  wincmd t | normal H
    234  wincmd j | normal Hyy
    235  wincmd b | normal p
    236  wincmd t | normal yy
    237  wincmd b | normal p
    238  wincmd t | set noscrollbind | normal ggL
    239  wincmd j | set noscrollbind
    240  normal ggL
    241  set scrollbind
    242  wincmd t | set scrollbind
    243  wincmd t | normal G
    244  wincmd j | normal G
    245  wincmd t | syncbind | normal Hk
    246  wincmd j | normal H
    247  wincmd t | normal Hyy
    248  wincmd b | normal p
    249  wincmd t | wincmd j | normal yy
    250  wincmd b | normal p
    251  wincmd t | normal H3k
    252  wincmd j | normal H
    253  wincmd t | normal Hyy
    254  wincmd b | normal p
    255  wincmd t | wincmd j | normal yy
    256  wincmd b | normal p
    257 
    258  wincmd b
    259  call assert_equal([
    260       \ '',
    261       \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
    262       \ 'start of window 2',
    263       \ 'start of window 2',
    264       \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
    265       \ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15',
    266       \ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12',
    267       \ ],  getline(1, '$'))
    268  enew!
    269 
    270  new | only!
    271  set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow&
    272 endfunc