changeset 18223:8a86e518fa42 v8.1.2106

patch 8.1.2106: no tests for dragging the mouse beyond the window Commit: https://github.com/vim/vim/commit/b4367b7fb65f6a88f76ef99f79342341af0b1017 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Oct 1 14:19:07 2019 +0200 patch 8.1.2106: no tests for dragging the mouse beyond the window Problem: No tests for dragging the mouse beyond the window. Solution: Add a test. (Dominique Pelle, closes https://github.com/vim/vim/issues/5004)
author Bram Moolenaar <Bram@vim.org>
date Tue, 01 Oct 2019 14:30:03 +0200
parents 5ccb2d2ca9be
children 96632a3c3d90
files src/testdir/test_termcodes.vim src/version.c
diffstat 2 files changed, 91 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -166,12 +166,12 @@ func Test_xterm_mouse_ctrl_click()
     call MouseCtrlLeftClick(row, col)
     call MouseLeftRelease(row, col)
     call assert_match('usr_02.txt$', bufname('%'), msg)
-    call assert_equal('*usr_02.txt*', expand('<cWORD>'))
+    call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg)
 
     call MouseCtrlRightClick(row, col)
     call MouseRightRelease(row, col)
     call assert_match('help.txt$', bufname('%'), msg)
-    call assert_equal('|usr_02.txt|', expand('<cWORD>'))
+    call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg)
 
     helpclose
   endfor
@@ -267,6 +267,93 @@ func Test_1xterm_mouse_wheel()
   bwipe!
 endfunc
 
+" Test that dragging beyond the window (at the bottom and at the top)
+" scrolls window content by the number of of lines beyond the window.
+func Test_term_mouse_drag_beyond_window()
+  let save_mouse = &mouse
+  let save_term = &term
+  let save_ttymouse = &ttymouse
+  call test_override('no_query_mouse', 1)
+  set mouse=a term=xterm
+  let col = 1
+  call setline(1, range(1, 100))
+
+  " Split into 3 windows, and go into the middle window
+  " so we test dragging mouse below and above the window.
+  2split
+  wincmd j
+  2split
+
+  for ttymouse_val in s:ttymouse_values + s:ttymouse_dec
+    let msg = 'ttymouse=' .. ttymouse_val
+    exe 'set ttymouse=' .. ttymouse_val
+
+    " Line #10 at the top.
+    norm! 10zt
+    redraw
+    call assert_equal(10, winsaveview().topline, msg)
+    call assert_equal(2, winheight(0), msg)
+
+    let row = 4
+    call MouseLeftClick(row, col)
+    call assert_equal(10, winsaveview().topline, msg)
+
+    " Drag downwards. We're still in the window so topline should
+    " not change yet.
+    let row += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(10, winsaveview().topline, msg)
+
+    " We now leave the window at the bottom, so the window content should
+    " scroll by 1 line, then 2 lines (etc) as we drag further away.
+    let row += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(11, winsaveview().topline, msg)
+
+    let row += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(13, winsaveview().topline, msg)
+
+    " Now drag upwards.
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(14, winsaveview().topline, msg)
+
+    " We're now back in the window so the topline should not change.
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(14, winsaveview().topline, msg)
+
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(14, winsaveview().topline, msg)
+
+    " We now leave the window at the top so the window content should
+    " scroll by 1 line, then 2, then 3 (etc) in the opposite direction.
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(13, winsaveview().topline, msg)
+
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(11, winsaveview().topline, msg)
+
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(8, winsaveview().topline, msg)
+
+    call MouseLeftRelease(row, col)
+    call assert_equal(8, winsaveview().topline, msg)
+    call assert_equal(2, winheight(0), msg)
+  endfor
+
+  let &mouse = save_mouse
+  let &term = save_term
+  let &ttymouse = save_ttymouse
+  call test_override('no_query_mouse', 0)
+  bwipe!
+endfunc
+
 func Test_term_mouse_drag_window_separator()
   let save_mouse = &mouse
   let save_term = &term
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2106,
+/**/
     2105,
 /**/
     2104,