1" 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
33
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
273