blob: 6c5488be05c912c95cbcdf945ffeea32c1583980 [file] [log] [blame]
Bram Moolenaar4a137b42017-08-04 22:37:11 +02001" Test for 'scrollbind' causing an unexpected scroll of one of the windows.
2func 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)
32endfunc
Bram Moolenaar999dc142019-05-19 21:44:08 +020033
34" Test for 'scrollbind'
35func 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
44start 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
60end of window 1
61
62
63start 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
80end 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 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
221 \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
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&
272endfunc