" Test for 'scrollbind' causing an unexpected scroll of one of the windows.

func Test_scrollbind()
  " We don't want the status line to cause problems:
  set laststatus=0
  let totalLines = &lines * 20
  let middle = totalLines / 2
  new | only
  for i in range(1, totalLines)
      call setline(i, 'LINE ' . i)
  endfor
  exe string(middle)
  normal zt
  normal M
  aboveleft vert new
  for i in range(1, totalLines)
      call setline(i, 'line ' . i)
  endfor
  exe string(middle)
  normal zt
  normal M
  " Execute the following two commands at once to reproduce the problem.
  setl scb | wincmd p
  setl scb
  wincmd w
  let topLineLeft = line('w0')
  wincmd p
  let topLineRight = line('w0')
  setl noscrollbind
  wincmd p
  setl noscrollbind
  call assert_equal(0, topLineLeft - topLineRight)
endfunc

" Test for 'scrollbind'
func Test_scrollbind_opt()
  new | only
  set noscrollbind
  set scrollopt=ver,jump scrolloff=2 nowrap noequalalways splitbelow

  " Insert the text used for the test
  append


start of window 1
. line 01 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 01
. line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02
. line 03 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 03
. line 04 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 04
. line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05
. line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06
. line 07 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 07
. line 08 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 08
. line 09 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 09
. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10
. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11
. line 12 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 12
. line 13 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 13
. line 14 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 14
. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15
end of window 1


start of window 2
. line 01 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 01
. line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02
. line 03 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 03
. line 04 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 04
. line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05
. line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06
. line 07 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 07
. line 08 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 08
. line 09 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 09
. line 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10
. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11
. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12
. line 13 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 13
. line 14 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 14
. line 15 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 15
. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16
end of window 2

.

  " Test using two windows open to one buffer, one extra empty window
  split
  new
  wincmd t
  resize 8
  call search('^start of window 1$')
  normal zt
  set scrollbind
  wincmd j
  resize 7
  call search('^start of window 2$')
  normal zt
  set scrollbind

  " -- start of tests --
  " Test scrolling down
  normal L5jHyy
  wincmd b | normal pr0
  wincmd t | normal Hyy
  wincmd b | normal pr1
  wincmd t | normal L6jHyy
  wincmd b | normal pr2
  wincmd k | normal Hyy
  wincmd b | normal pr3

  " Test scrolling up
  wincmd t | normal H4k
  wincmd j | normal H
  wincmd t | normal Hyy
  wincmd b | normal pr4
  wincmd k | normal Hyy
  wincmd b | normal pr5
  wincmd k | normal 3k
  wincmd t | normal H
  wincmd j | normal Hyy
  wincmd b | normal pr6
  wincmd t | normal Hyy
  wincmd b | normal pr7

  " Test horizontal scrolling
  set scrollopt+=hor
  normal gg"zyyG"zpG
  wincmd t | normal 015zly$
  wincmd b | normal p"zpG
  wincmd k | normal y$
  wincmd b | normal p"zpG
  wincmd k | normal 10jH7zhg0y$
  wincmd b | normal p"zpG
  wincmd t | normal Hg0y$
  wincmd b | normal p"zpG
  set scrollopt-=hor

  wincmd b
  call assert_equal([
	      \ '',
	      \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
	      \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
	      \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
	      \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
	      \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
	      \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
	      \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
	      \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
	      \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
	      \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
	      \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
	      \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
	      \ ''],  getline(1, '$'))
  enew!

  " ****** tests using two different buffers *****
  wincmd t | wincmd j | close
  wincmd t | set noscrollbind
  /start of window 2$/,/^end of window 2$/y
  new
  wincmd t | wincmd j | normal 4"zpGp
  wincmd t
  call search('^start of window 1$')
  normal zt
  set scrollbind
  wincmd j
  call search('^start of window 2$')
  normal zt
  set scrollbind

  " -- start of tests --
  " Test scrolling down
  normal L5jHyy
  wincmd b | normal pr0
  wincmd t | normal Hyy
  wincmd b | normal pr1
  wincmd t | normal L6jHyy
  wincmd b | normal pr2
  wincmd k | normal Hyy
  wincmd b | normal pr3

  " Test scrolling up
  wincmd t | normal H4k
  wincmd j | normal H
  wincmd t | normal Hyy
  wincmd b | normal pr4
  wincmd k | normal Hyy
  wincmd b | normal pr5
  wincmd k | normal 3k
  wincmd t | normal H
  wincmd j | normal Hyy
  wincmd b | normal pr6
  wincmd t | normal Hyy
  wincmd b | normal pr7

  " Test horizontal scrolling
  set scrollopt+=hor
  normal gg"zyyG"zpG
  wincmd t | normal 015zly$
  wincmd b | normal p"zpG
  wincmd k | normal y$
  wincmd b | normal p"zpG
  wincmd k | normal 10jH7zhg0y$
  wincmd b | normal p"zpG
  wincmd t | normal Hg0y$
  wincmd b | normal p"zpG
  set scrollopt-=hor

  wincmd b
  call assert_equal([
	      \ '',
	      \ '0 line 05 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 05',
	      \ '1 line 05 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 05',
	      \ '2 line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
	      \ '3 line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
	      \ '4 line 06 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 06',
	      \ '5 line 06 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 06',
	      \ '6 line 02 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 02',
	      \ '7 line 02 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
	      \ '56789ABCDEFGHIJKLMNOPQRSTUVWXYZ 02',
	      \ 'UTSRQPONMLKJIHGREDCBA9876543210 02',
	      \ '. line 11 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 11',
	      \ '. line 11 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 11',
	      \ ''],  getline(1, '$'))
  enew!

  " Test 'syncbind'
  wincmd t | set noscrollbind | normal ggL
  wincmd j | set noscrollbind | normal ggL
  set scrollbind
  wincmd t | set scrollbind | normal G
  wincmd j | normal G
  syncbind
  normal Hk
  wincmd t | normal H
  wincmd j | normal Hyy
  wincmd b | normal p
  wincmd t | normal yy
  wincmd b | normal p
  wincmd t | set noscrollbind | normal ggL
  wincmd j | set noscrollbind
  normal ggL
  set scrollbind
  wincmd t | set scrollbind
  wincmd t | normal G
  wincmd j | normal G
  wincmd t | syncbind | normal Hk
  wincmd j | normal H
  wincmd t | normal Hyy
  wincmd b | normal p
  wincmd t | wincmd j | normal yy
  wincmd b | normal p
  wincmd t | normal H3k
  wincmd j | normal H
  wincmd t | normal Hyy
  wincmd b | normal p
  wincmd t | wincmd j | normal yy
  wincmd b | normal p

  wincmd b
  call assert_equal([
	      \ '',
	      \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
	      \ 'start of window 2',
	      \ 'start of window 2',
	      \ '. line 16 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 16',
	      \ '. line 15 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 15',
	      \ '. line 12 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 12',
	      \ ],  getline(1, '$'))
  enew!

  new | only!
  set scrollbind& scrollopt& scrolloff& wrap& equalalways& splitbelow&
endfunc

" vim: shiftwidth=2 sts=2 expandtab
