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