14a137b45SBram Moolenaar" Test for 'scrollbind' causing an unexpected scroll of one of the windows.
2*6d91bcb4SBram Moolenaar
34a137b45SBram Moolenaarfunc Test_scrollbind()
44a137b45SBram Moolenaar  " We don't want the status line to cause problems:
54a137b45SBram Moolenaar  set laststatus=0
64a137b45SBram Moolenaar  let totalLines = &lines * 20
74a137b45SBram Moolenaar  let middle = totalLines / 2
84a137b45SBram Moolenaar  new | only
94a137b45SBram Moolenaar  for i in range(1, totalLines)
104a137b45SBram Moolenaar      call setline(i, 'LINE ' . i)
114a137b45SBram Moolenaar  endfor
124a137b45SBram Moolenaar  exe string(middle)
134a137b45SBram Moolenaar  normal zt
144a137b45SBram Moolenaar  normal M
154a137b45SBram Moolenaar  aboveleft vert new
164a137b45SBram Moolenaar  for i in range(1, totalLines)
174a137b45SBram Moolenaar      call setline(i, 'line ' . i)
184a137b45SBram Moolenaar  endfor
194a137b45SBram Moolenaar  exe string(middle)
204a137b45SBram Moolenaar  normal zt
214a137b45SBram Moolenaar  normal M
224a137b45SBram Moolenaar  " Execute the following two commands at once to reproduce the problem.
234a137b45SBram Moolenaar  setl scb | wincmd p
244a137b45SBram Moolenaar  setl scb
254a137b45SBram Moolenaar  wincmd w
264a137b45SBram Moolenaar  let topLineLeft = line('w0')
274a137b45SBram Moolenaar  wincmd p
284a137b45SBram Moolenaar  let topLineRight = line('w0')
294a137b45SBram Moolenaar  setl noscrollbind
304a137b45SBram Moolenaar  wincmd p
314a137b45SBram Moolenaar  setl noscrollbind
324a137b45SBram Moolenaar  call assert_equal(0, topLineLeft - topLineRight)
334a137b45SBram Moolenaarendfunc
34999dc146SBram Moolenaar
35999dc146SBram Moolenaar" Test for 'scrollbind'
36999dc146SBram Moolenaarfunc Test_scrollbind_opt()
37999dc146SBram Moolenaar  new | only
38999dc146SBram Moolenaar  set noscrollbind
39999dc146SBram Moolenaar  set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow
40999dc146SBram Moolenaar
41999dc146SBram Moolenaar  " Insert the text used for the test
42999dc146SBram Moolenaar  append
43999dc146SBram Moolenaar
44999dc146SBram Moolenaar
45999dc146SBram Moolenaarstart of window 1
46999dc146SBram Moolenaar. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
47999dc146SBram Moolenaar. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
48999dc146SBram Moolenaar. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
49999dc146SBram Moolenaar. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
50999dc146SBram Moolenaar. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
51999dc146SBram Moolenaar. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
52999dc146SBram Moolenaar. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
53999dc146SBram Moolenaar. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
54999dc146SBram Moolenaar. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
55999dc146SBram Moolenaar. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
56999dc146SBram Moolenaar. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
57999dc146SBram Moolenaar. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
58999dc146SBram Moolenaar. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
59999dc146SBram Moolenaar. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
60999dc146SBram Moolenaar. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
61999dc146SBram Moolenaarend of window 1
62999dc146SBram Moolenaar
63999dc146SBram Moolenaar
64999dc146SBram Moolenaarstart of window 2
65999dc146SBram Moolenaar. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
66999dc146SBram Moolenaar. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
67999dc146SBram Moolenaar. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
68999dc146SBram Moolenaar. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
69999dc146SBram Moolenaar. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
70999dc146SBram Moolenaar. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
71999dc146SBram Moolenaar. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
72999dc146SBram Moolenaar. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
73999dc146SBram Moolenaar. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
74999dc146SBram Moolenaar. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
75999dc146SBram Moolenaar. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
76999dc146SBram Moolenaar. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
77999dc146SBram Moolenaar. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
78999dc146SBram Moolenaar. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
79999dc146SBram Moolenaar. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
80999dc146SBram Moolenaar. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
81999dc146SBram Moolenaarend of window 2
82999dc146SBram Moolenaar
83999dc146SBram Moolenaar.
84999dc146SBram Moolenaar
85999dc146SBram Moolenaar  " Test using two windows open to one buffer, one extra empty window
86999dc146SBram Moolenaar  split
87999dc146SBram Moolenaar  new
88999dc146SBram Moolenaar  wincmd t
89999dc146SBram Moolenaar  resize 8
90999dc146SBram Moolenaar  call search('^start of window 1$')
91999dc146SBram Moolenaar  normal zt
92999dc146SBram Moolenaar  set scrollbind
93999dc146SBram Moolenaar  wincmd j
94999dc146SBram Moolenaar  resize 7
95999dc146SBram Moolenaar  call search('^start of window 2$')
96999dc146SBram Moolenaar  normal zt
97999dc146SBram Moolenaar  set scrollbind
98999dc146SBram Moolenaar
99999dc146SBram Moolenaar  " -- start of tests --
100999dc146SBram Moolenaar  " Test scrolling down
101999dc146SBram Moolenaar  normal L5jHyy
102999dc146SBram Moolenaar  wincmd b | normal pr0
103999dc146SBram Moolenaar  wincmd t | normal Hyy
104999dc146SBram Moolenaar  wincmd b | normal pr1
105999dc146SBram Moolenaar  wincmd t | normal L6jHyy
106999dc146SBram Moolenaar  wincmd b | normal pr2
107999dc146SBram Moolenaar  wincmd k | normal Hyy
108999dc146SBram Moolenaar  wincmd b | normal pr3
109999dc146SBram Moolenaar
110999dc146SBram Moolenaar  " Test scrolling up
111999dc146SBram Moolenaar  wincmd t | normal H4k
112999dc146SBram Moolenaar  wincmd j | normal H
113999dc146SBram Moolenaar  wincmd t | normal Hyy
114999dc146SBram Moolenaar  wincmd b | normal pr4
115999dc146SBram Moolenaar  wincmd k | normal Hyy
116999dc146SBram Moolenaar  wincmd b | normal pr5
117999dc146SBram Moolenaar  wincmd k | normal 3k
118999dc146SBram Moolenaar  wincmd t | normal H
119999dc146SBram Moolenaar  wincmd j | normal Hyy
120999dc146SBram Moolenaar  wincmd b | normal pr6
121999dc146SBram Moolenaar  wincmd t | normal Hyy
122999dc146SBram Moolenaar  wincmd b | normal pr7
123999dc146SBram Moolenaar
124999dc146SBram Moolenaar  " Test horizontal scrolling
125999dc146SBram Moolenaar  set scrollopt+=hor
126999dc146SBram Moolenaar  normal gg"zyyG"zpG
127999dc146SBram Moolenaar  wincmd t | normal 015zly$
128999dc146SBram Moolenaar  wincmd b | normal p"zpG
129999dc146SBram Moolenaar  wincmd k | normal y$
130999dc146SBram Moolenaar  wincmd b | normal p"zpG
131999dc146SBram Moolenaar  wincmd k | normal 10jH7zhg0y$
132999dc146SBram Moolenaar  wincmd b | normal p"zpG
133999dc146SBram Moolenaar  wincmd t | normal Hg0y$
134999dc146SBram Moolenaar  wincmd b | normal p"zpG
135999dc146SBram Moolenaar  set scrollopt-=hor
136999dc146SBram Moolenaar
137999dc146SBram Moolenaar  wincmd b
138999dc146SBram Moolenaar  call assert_equal([
139999dc146SBram Moolenaar	      \ '',
140999dc146SBram Moolenaar	      \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
141999dc146SBram Moolenaar	      \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
142999dc146SBram Moolenaar	      \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
143999dc146SBram Moolenaar	      \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
144999dc146SBram Moolenaar	      \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
145999dc146SBram Moolenaar	      \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
146999dc146SBram Moolenaar	      \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
147999dc146SBram Moolenaar	      \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
148999dc146SBram Moolenaar	      \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
149999dc146SBram Moolenaar	      \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
150999dc146SBram Moolenaar	      \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
151999dc146SBram Moolenaar	      \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
152999dc146SBram Moolenaar	      \ ''],  getline(1, '$'))
153999dc146SBram Moolenaar  enew!
154999dc146SBram Moolenaar
155999dc146SBram Moolenaar  " ****** tests using two different buffers *****
156999dc146SBram Moolenaar  wincmd t | wincmd j | close
157999dc146SBram Moolenaar  wincmd t | set noscrollbind
158999dc146SBram Moolenaar  /start of window 2$/,/^end of window 2$/y
159999dc146SBram Moolenaar  new
160999dc146SBram Moolenaar  wincmd t | wincmd j | normal 4"zpGp
161999dc146SBram Moolenaar  wincmd t
162999dc146SBram Moolenaar  call search('^start of window 1$')
163999dc146SBram Moolenaar  normal zt
164999dc146SBram Moolenaar  set scrollbind
165999dc146SBram Moolenaar  wincmd j
166999dc146SBram Moolenaar  call search('^start of window 2$')
167999dc146SBram Moolenaar  normal zt
168999dc146SBram Moolenaar  set scrollbind
169999dc146SBram Moolenaar
170999dc146SBram Moolenaar  " -- start of tests --
171999dc146SBram Moolenaar  " Test scrolling down
172999dc146SBram Moolenaar  normal L5jHyy
173999dc146SBram Moolenaar  wincmd b | normal pr0
174999dc146SBram Moolenaar  wincmd t | normal Hyy
175999dc146SBram Moolenaar  wincmd b | normal pr1
176999dc146SBram Moolenaar  wincmd t | normal L6jHyy
177999dc146SBram Moolenaar  wincmd b | normal pr2
178999dc146SBram Moolenaar  wincmd k | normal Hyy
179999dc146SBram Moolenaar  wincmd b | normal pr3
180999dc146SBram Moolenaar
181999dc146SBram Moolenaar  " Test scrolling up
182999dc146SBram Moolenaar  wincmd t | normal H4k
183999dc146SBram Moolenaar  wincmd j | normal H
184999dc146SBram Moolenaar  wincmd t | normal Hyy
185999dc146SBram Moolenaar  wincmd b | normal pr4
186999dc146SBram Moolenaar  wincmd k | normal Hyy
187999dc146SBram Moolenaar  wincmd b | normal pr5
188999dc146SBram Moolenaar  wincmd k | normal 3k
189999dc146SBram Moolenaar  wincmd t | normal H
190999dc146SBram Moolenaar  wincmd j | normal Hyy
191999dc146SBram Moolenaar  wincmd b | normal pr6
192999dc146SBram Moolenaar  wincmd t | normal Hyy
193999dc146SBram Moolenaar  wincmd b | normal pr7
194999dc146SBram Moolenaar
195999dc146SBram Moolenaar  " Test horizontal scrolling
196999dc146SBram Moolenaar  set scrollopt+=hor
197999dc146SBram Moolenaar  normal gg"zyyG"zpG
198999dc146SBram Moolenaar  wincmd t | normal 015zly$
199999dc146SBram Moolenaar  wincmd b | normal p"zpG
200999dc146SBram Moolenaar  wincmd k | normal y$
201999dc146SBram Moolenaar  wincmd b | normal p"zpG
202999dc146SBram Moolenaar  wincmd k | normal 10jH7zhg0y$
203999dc146SBram Moolenaar  wincmd b | normal p"zpG
204999dc146SBram Moolenaar  wincmd t | normal Hg0y$
205999dc146SBram Moolenaar  wincmd b | normal p"zpG
206999dc146SBram Moolenaar  set scrollopt-=hor
207999dc146SBram Moolenaar
208999dc146SBram Moolenaar  wincmd b
209999dc146SBram Moolenaar  call assert_equal([
210999dc146SBram Moolenaar	      \ '',
211999dc146SBram Moolenaar	      \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
212999dc146SBram Moolenaar	      \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
213999dc146SBram Moolenaar	      \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
214999dc146SBram Moolenaar	      \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
215999dc146SBram Moolenaar	      \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
216999dc146SBram Moolenaar	      \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
217999dc146SBram Moolenaar	      \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
218999dc146SBram Moolenaar	      \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
219999dc146SBram Moolenaar	      \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
220999dc146SBram Moolenaar	      \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
221999dc146SBram Moolenaar	      \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
222999dc146SBram Moolenaar	      \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
223999dc146SBram Moolenaar	      \ ''],  getline(1, '$'))
224999dc146SBram Moolenaar  enew!
225999dc146SBram Moolenaar
226999dc146SBram Moolenaar  " Test 'syncbind'
227999dc146SBram Moolenaar  wincmd t | set noscrollbind | normal ggL
228999dc146SBram Moolenaar  wincmd j | set noscrollbind | normal ggL
229999dc146SBram Moolenaar  set scrollbind
230999dc146SBram Moolenaar  wincmd t | set scrollbind | normal G
231999dc146SBram Moolenaar  wincmd j | normal G
232999dc146SBram Moolenaar  syncbind
233999dc146SBram Moolenaar  normal Hk
234999dc146SBram Moolenaar  wincmd t | normal H
235999dc146SBram Moolenaar  wincmd j | normal Hyy
236999dc146SBram Moolenaar  wincmd b | normal p
237999dc146SBram Moolenaar  wincmd t | normal yy
238999dc146SBram Moolenaar  wincmd b | normal p
239999dc146SBram Moolenaar  wincmd t | set noscrollbind | normal ggL
240999dc146SBram Moolenaar  wincmd j | set noscrollbind
241999dc146SBram Moolenaar  normal ggL
242999dc146SBram Moolenaar  set scrollbind
243999dc146SBram Moolenaar  wincmd t | set scrollbind
244999dc146SBram Moolenaar  wincmd t | normal G
245999dc146SBram Moolenaar  wincmd j | normal G
246999dc146SBram Moolenaar  wincmd t | syncbind | normal Hk
247999dc146SBram Moolenaar  wincmd j | normal H
248999dc146SBram Moolenaar  wincmd t | normal Hyy
249999dc146SBram Moolenaar  wincmd b | normal p
250999dc146SBram Moolenaar  wincmd t | wincmd j | normal yy
251999dc146SBram Moolenaar  wincmd b | normal p
252999dc146SBram Moolenaar  wincmd t | normal H3k
253999dc146SBram Moolenaar  wincmd j | normal H
254999dc146SBram Moolenaar  wincmd t | normal Hyy
255999dc146SBram Moolenaar  wincmd b | normal p
256999dc146SBram Moolenaar  wincmd t | wincmd j | normal yy
257999dc146SBram Moolenaar  wincmd b | normal p
258999dc146SBram Moolenaar
259999dc146SBram Moolenaar  wincmd b
260999dc146SBram Moolenaar  call assert_equal([
261999dc146SBram Moolenaar	      \ '',
262999dc146SBram Moolenaar	      \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
263999dc146SBram Moolenaar	      \ 'start of window 2',
264999dc146SBram Moolenaar	      \ 'start of window 2',
265999dc146SBram Moolenaar	      \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
266999dc146SBram Moolenaar	      \ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15',
267999dc146SBram Moolenaar	      \ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12',
268999dc146SBram Moolenaar	      \ ],  getline(1, '$'))
269999dc146SBram Moolenaar  enew!
270999dc146SBram Moolenaar
271999dc146SBram Moolenaar  new | only!
272999dc146SBram Moolenaar  set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow&
273999dc146SBram Moolenaarendfunc
274*6d91bcb4SBram Moolenaar
275*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
276