1" Test for 'scrollbind' causing an unexpected scroll of one of the windows.
2
3func 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
34
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
274
275" vim: shiftwidth=2 sts=2 expandtab
276