| " Test for 'scrollbind' causing an unexpected scroll of one of the windows. |
| |
| func Test_scrollbind() |
| " We don't want the status line to cause problems: |
| set laststatus=0 |
| let totalLines = &lines * 20 |
| let middle = totalLines / 2 |
| new | only |
| for i in range(1, totalLines) |
| call setline(i, 'LINE ' . i) |
| endfor |
| exe string(middle) |
| normal zt |
| normal M |
| aboveleft vert new |
| for i in range(1, totalLines) |
| call setline(i, 'line ' . i) |
| endfor |
| exe string(middle) |
| normal zt |
| normal M |
| " Execute the following two commands at once to reproduce the problem. |
| setl scb | wincmd p |
| setl scb |
| wincmd w |
| let topLineLeft = line('w0') |
| wincmd p |
| let topLineRight = line('w0') |
| setl noscrollbind |
| wincmd p |
| setl noscrollbind |
| call assert_equal(0, topLineLeft - topLineRight) |
| endfunc |
| |
| " Test for 'scrollbind' |
| func Test_scrollbind_opt() |
| new | only |
| set noscrollbind |
| set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow |
| |
| " Insert the text used for the test |
| append |
| |
| |
| start of window 1 |
| . line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01 |
| . line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02 |
| . line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03 |
| . line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04 |
| . line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05 |
| . line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06 |
| . line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07 |
| . line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08 |
| . line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09 |
| . line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10 |
| . line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11 |
| . line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12 |
| . line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13 |
| . line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14 |
| . line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15 |
| end of window 1 |
| |
| |
| start of window 2 |
| . line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01 |
| . line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02 |
| . line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03 |
| . line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04 |
| . line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05 |
| . line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06 |
| . line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07 |
| . line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08 |
| . line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09 |
| . line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10 |
| . line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11 |
| . line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12 |
| . line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13 |
| . line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14 |
| . line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15 |
| . line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16 |
| end of window 2 |
| |
| . |
| |
| " Test using two windows open to one buffer, one extra empty window |
| split |
| new |
| wincmd t |
| resize 8 |
| call search('^start of window 1$') |
| normal zt |
| set scrollbind |
| wincmd j |
| resize 7 |
| call search('^start of window 2$') |
| normal zt |
| set scrollbind |
| |
| " -- start of tests -- |
| " Test scrolling down |
| normal L5jHyy |
| wincmd b | normal pr0 |
| wincmd t | normal Hyy |
| wincmd b | normal pr1 |
| wincmd t | normal L6jHyy |
| wincmd b | normal pr2 |
| wincmd k | normal Hyy |
| wincmd b | normal pr3 |
| |
| " Test scrolling up |
| wincmd t | normal H4k |
| wincmd j | normal H |
| wincmd t | normal Hyy |
| wincmd b | normal pr4 |
| wincmd k | normal Hyy |
| wincmd b | normal pr5 |
| wincmd k | normal 3k |
| wincmd t | normal H |
| wincmd j | normal Hyy |
| wincmd b | normal pr6 |
| wincmd t | normal Hyy |
| wincmd b | normal pr7 |
| |
| " Test horizontal scrolling |
| set scrollopt+=hor |
| normal gg"zyyG"zpG |
| wincmd t | normal 015zly$ |
| wincmd b | normal p"zpG |
| wincmd k | normal y$ |
| wincmd b | normal p"zpG |
| wincmd k | normal 10jH7zhg0y$ |
| wincmd b | normal p"zpG |
| wincmd t | normal Hg0y$ |
| wincmd b | normal p"zpG |
| set scrollopt-=hor |
| |
| wincmd b |
| call assert_equal([ |
| \ '', |
| \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05', |
| \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05', |
| \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', |
| \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', |
| \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06', |
| \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06', |
| \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02', |
| \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', |
| \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', |
| \ 'UTSRQPONMLKJIHGREDCBA9876543210 02', |
| \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', |
| \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', |
| \ ''], getline(1, '$')) |
| enew! |
| |
| " ****** tests using two different buffers ***** |
| wincmd t | wincmd j | close |
| wincmd t | set noscrollbind |
| /start of window 2$/,/^end of window 2$/y |
| new |
| wincmd t | wincmd j | normal 4"zpGp |
| wincmd t |
| call search('^start of window 1$') |
| normal zt |
| set scrollbind |
| wincmd j |
| call search('^start of window 2$') |
| normal zt |
| set scrollbind |
| |
| " -- start of tests -- |
| " Test scrolling down |
| normal L5jHyy |
| wincmd b | normal pr0 |
| wincmd t | normal Hyy |
| wincmd b | normal pr1 |
| wincmd t | normal L6jHyy |
| wincmd b | normal pr2 |
| wincmd k | normal Hyy |
| wincmd b | normal pr3 |
| |
| " Test scrolling up |
| wincmd t | normal H4k |
| wincmd j | normal H |
| wincmd t | normal Hyy |
| wincmd b | normal pr4 |
| wincmd k | normal Hyy |
| wincmd b | normal pr5 |
| wincmd k | normal 3k |
| wincmd t | normal H |
| wincmd j | normal Hyy |
| wincmd b | normal pr6 |
| wincmd t | normal Hyy |
| wincmd b | normal pr7 |
| |
| " Test horizontal scrolling |
| set scrollopt+=hor |
| normal gg"zyyG"zpG |
| wincmd t | normal 015zly$ |
| wincmd b | normal p"zpG |
| wincmd k | normal y$ |
| wincmd b | normal p"zpG |
| wincmd k | normal 10jH7zhg0y$ |
| wincmd b | normal p"zpG |
| wincmd t | normal Hg0y$ |
| wincmd b | normal p"zpG |
| set scrollopt-=hor |
| |
| wincmd b |
| call assert_equal([ |
| \ '', |
| \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05', |
| \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05', |
| \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11', |
| \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11', |
| \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06', |
| \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06', |
| \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02', |
| \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', |
| \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02', |
| \ 'UTSRQPONMLKJIHGREDCBA9876543210 02', |
| \ '. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10', |
| \ '. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10', |
| \ ''], getline(1, '$')) |
| enew! |
| |
| " Test 'syncbind' |
| wincmd t | set noscrollbind | normal ggL |
| wincmd j | set noscrollbind | normal ggL |
| set scrollbind |
| wincmd t | set scrollbind | normal G |
| wincmd j | normal G |
| syncbind |
| normal Hk |
| wincmd t | normal H |
| wincmd j | normal Hyy |
| wincmd b | normal p |
| wincmd t | normal yy |
| wincmd b | normal p |
| wincmd t | set noscrollbind | normal ggL |
| wincmd j | set noscrollbind |
| normal ggL |
| set scrollbind |
| wincmd t | set scrollbind |
| wincmd t | normal G |
| wincmd j | normal G |
| wincmd t | syncbind | normal Hk |
| wincmd j | normal H |
| wincmd t | normal Hyy |
| wincmd b | normal p |
| wincmd t | wincmd j | normal yy |
| wincmd b | normal p |
| wincmd t | normal H3k |
| wincmd j | normal H |
| wincmd t | normal Hyy |
| wincmd b | normal p |
| wincmd t | wincmd j | normal yy |
| wincmd b | normal p |
| |
| wincmd b |
| call assert_equal([ |
| \ '', |
| \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16', |
| \ 'start of window 2', |
| \ 'start of window 2', |
| \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16', |
| \ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15', |
| \ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12', |
| \ ], getline(1, '$')) |
| enew! |
| |
| new | only! |
| set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow& |
| endfunc |
| |
| " vim: shiftwidth=2 sts=2 expandtab |