view src/testdir/test_scrollbind.vim @ 34780:54890be01c00 v9.1.0265

patch 9.1.0265: console dialog cannot save unnamed buffers Commit: https://github.com/vim/vim/commit/df46115fc839c8912ed60646e86a412e5180ba1d Author: glepnir <glephunter@gmail.com> Date: Thu Apr 4 22:23:29 2024 +0200 patch 9.1.0265: console dialog cannot save unnamed buffers Problem: console dialog cannot save unnamed buffers Solution: set bufname before save (glepnir). Define dialog_con_gui to test for GUI+Console dialog support, use it to skip the test when the GUI feature has been defined. Note: The dialog_changed() function will also try to call the browse_save_fname() function, when FEAT_BROWSE is defined (which is only defined in a GUI build of Vim). This will eventually lead to a call of do_browse(), which causes an error message if a GUI is not currently running (see the TODO: in do_browse()) and will then lead to a failure in Test_goto_buf_with_onfirm(). Therefore, we must disable the Test_goto_buf_with_onfirm(), when the dialog_con_gui feature is enabled (which basically means dialog feature for GUI and Console builds, in contrast to the dialog_con and dialog_gui feature). (Previously this wasn't a problem, because the test aborted in the YES case for the :confirm :b XgotoConf case and did therefore not run into the browse function call) closes: #14398 Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 04 Apr 2024 23:45:02 +0200
parents d8fdafc4b390
children
line wrap: on
line source

" 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 10 ZYXWVUTSRQPONMLKJIHGREDCBA9876543210 10',
	      \ '. line 10 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 10',
	      \ ''],  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