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