blob: 8074fdae4b5602c952654c291551b0abe29a548e [file] [log] [blame]
Bram Moolenaar4a137b42017-08-04 22:37:11 +02001" Test for 'scrollbind' causing an unexpected scroll of one of the windows.
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02002
Bram Moolenaar4a137b42017-08-04 22:37:11 +02003func 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)
33endfunc
Bram Moolenaar999dc142019-05-19 21:44:08 +020034
35" Test for 'scrollbind'
36func 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
45start 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
61end of window 1
62
63
64start 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
81end 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&
273endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200274
275" vim: shiftwidth=2 sts=2 expandtab