changeset 16300:f3d579f009d1 v8.1.1155

patch 8.1.1155: termcodes tests can be improved commit https://github.com/vim/vim/commit/3fbd2d7c316eaeea463b2f84f29b36d439306bf9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 11 23:56:16 2019 +0200 patch 8.1.1155: termcodes tests can be improved Problem: Termcodes tests can be improved. Solution: Add helper functions to simplify tests. Dragging statusline for xterm and sgr. (Dominique Pelle, closes #4237)
author Bram Moolenaar <Bram@vim.org>
date Fri, 12 Apr 2019 00:00:05 +0200
parents 5b592d4eb23a
children 1b88617761ef
files src/testdir/test_termcodes.vim src/version.c
diffstat 2 files changed, 135 insertions(+), 116 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -5,39 +5,61 @@ if has('gui_running') || !has('unix')
   finish
 endif
 
+" Helper function to emit a terminal escape code.
+func TerminalEscapeCode(code_xterm, code_sgr, row, col, m)
+  if &ttymouse ==# 'xterm'
+    " need to use byte encoding here.
+    let str = list2str([a:code_xterm, a:col + 0x20, a:row + 0x20])
+    if has('iconv')
+      let bytes = iconv(str, 'utf-8', 'latin1')
+    else
+      " Hopefully the numbers are not too big.
+      let bytes = str
+    endif
+    call feedkeys("\<Esc>[M" .. bytes, 'Lx!')
+  elseif &ttymouse ==# 'sgr'
+    call feedkeys(printf("\<Esc>[<%d;%d;%d%s", a:code_sgr, a:col, a:row, a:m), 'Lx!')
+  endif
+endfunc
+
+func MouseLeftClick(row, col)
+  call TerminalEscapeCode(0x20, 0, a:row, a:col, 'M')
+endfunc
+
+func MouseLeftRelease(row, col)
+  call TerminalEscapeCode(0x23, 3, a:row, a:col, 'm')
+endfunc
+
+func MouseLeftDrag(row, col)
+  call TerminalEscapeCode(0x43, 0x20, a:row, a:col, 'M')
+endfunc
+
+func MouseWheelUp(row, col)
+  call TerminalEscapeCode(0x40, 0x40, a:row, a:col, 'M')
+endfunc
+
+func MouseWheelDown(row, col)
+  call TerminalEscapeCode(0x41, 0x41, a:row, a:col, 'M')
+endfunc
+
 func Test_xterm_mouse_click()
   new
   let save_mouse = &mouse
   let save_term = &term
   let save_ttymouse = &ttymouse
-  set mouse=a
-  set term=xterm
+  set mouse=a term=xterm
   call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
-  redraw
-
-  " Xterm mouse click
-  set ttymouse=xterm
-  let button = 0x20  " left down
-  let row = 2 + 32
-  let col = 6 + 32
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
 
-  let button = 0x23  " release
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
-
-  call assert_equal([0, 2, 6, 0], getpos('.'))
-
-  " SGR mouse click
-  set ttymouse=sgr
-  let button = 0  " left down
-  let row = 3
-  let col = 9
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-
-  let button = 3  " release
-  call feedkeys(printf("\<Esc>[<%d;%d;%dm", button, col, row), 'Lx!')
-
-  call assert_equal([0, 3, 9, 0], getpos('.'))
+  for ttymouse_val in ['xterm', 'sgr']
+    exe 'set ttymouse=' . ttymouse_val
+    go
+    call assert_equal([0, 1, 1, 0], getpos('.'))
+    let row = 2
+    let col = 6
+    call MouseLeftClick(row, col)
+    call MouseLeftRelease(row, col)
+    call assert_equal([0, 2, 6, 0], getpos('.'))
+  endfor
 
   let &mouse = save_mouse
   let &term = save_term
@@ -50,61 +72,31 @@ func Test_xterm_mouse_wheel()
   let save_mouse = &mouse
   let save_term = &term
   let save_ttymouse = &ttymouse
-  set mouse=a
-  set term=xterm
+  set mouse=a term=xterm
   call setline(1, range(1, 100))
 
-  " Test Xterm mouse wheel.
-  set ttymouse=xterm
-  let button = 0x41 " wheel down.
-  let row = 1 + 32  " cursor position for mouse wheel is not relevant.
-  let col = 1 + 32
+  for ttymouse_val in ['xterm', 'sgr']
+    exe 'set ttymouse=' . ttymouse_val
+    go
+    call assert_equal(1, line('w0'))
+    call assert_equal([0, 1, 1, 0], getpos('.'))
 
-  call assert_equal(1, line('w0'))
-  call assert_equal([0, 1, 1, 0], getpos('.'))
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
-  call assert_equal(4, line('w0'))
-  call assert_equal([0, 4, 1, 0], getpos('.'))
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
-  call assert_equal(7, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
-
-  let button = 0x40  " wheel up.
-
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
-  call assert_equal(4, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
-  call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
-  call assert_equal(1, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
+    call MouseWheelDown(1, 1)
+    call assert_equal(4, line('w0'))
+    call assert_equal([0, 4, 1, 0], getpos('.'))
 
-  " Test SGR mouse wheel.
-  set ttymouse=sgr
-  go
-  let button = 0x41 " wheel down.
-  let row = 1       " cursor position for mouse wheel is not relevant.
-  let col = 1
+    call MouseWheelDown(1, 1)
+    call assert_equal(7, line('w0'))
+    call assert_equal([0, 7, 1, 0], getpos('.'))
 
-  call assert_equal(1, line('w0'))
-  call assert_equal([0, 1, 1, 0], getpos('.'))
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-  call assert_equal(4, line('w0'))
-  call assert_equal([0, 4, 1, 0], getpos('.'))
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-  call assert_equal(7, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
+    call MouseWheelUp(1, 1)
+    call assert_equal(4, line('w0'))
+    call assert_equal([0, 7, 1, 0], getpos('.'))
 
-  let button = 0x40  " wheel up.
-
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-  call assert_equal(4, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-  call assert_equal(1, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
-  call assert_equal(1, line('w0'))
-  call assert_equal([0, 7, 1, 0], getpos('.'))
+    call MouseWheelUp(1, 1)
+    call assert_equal(1, line('w0'))
+    call assert_equal([0, 7, 1, 0], getpos('.'))
+  endfor
 
   let &mouse = save_mouse
   let &term = save_term
@@ -116,56 +108,81 @@ func Test_xterm_mouse_drag_window_separa
   let save_mouse = &mouse
   let save_term = &term
   let save_ttymouse = &ttymouse
-  set mouse=a
-  set term=xterm
-  set ttymouse=sgr
+  set mouse=a term=xterm
 
-  " Split horizontally and test dragging the horizontal window separator.
-  split
-  let rowseparator = winheight(0) + 1
+  for ttymouse_val in ['xterm', 'sgr']
+    exe 'set ttymouse=' . ttymouse_val
 
-  let button = 0  " left down.
-  let row = rowseparator
-  let col = 1
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
+    " Split horizontally and test dragging the horizontal window separator.
+    split
+    let rowseparator = winheight(0) + 1
+    let row = rowseparator
+    let col = 1
+    call MouseLeftClick(row, col)
 
-  let drag = 32
-  let row -= 1
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
-  call assert_equal(rowseparator - 1, winheight(0) + 1)
-  let row += 1
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
-  call assert_equal(rowseparator, winheight(0) + 1)
-
-  let release = 3
-  call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
-  call assert_equal(rowseparator, winheight(0) + 1)
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(rowseparator - 1, winheight(0) + 1)
+    let row += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(rowseparator, winheight(0) + 1)
+    call MouseLeftRelease(row, col)
+    call assert_equal(rowseparator, winheight(0) + 1)
 
-  bwipe!
+    bwipe!
 
-  " Split vertically and test dragging the vertical window separator.
-  vsplit
-  let colseparator = winwidth(0) + 1
-
-  let button = 0
-  let row = 1
-  let col = colseparator
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
+    " Split vertically and test dragging the vertical window separator.
+    vsplit
+    let colseparator = winwidth(0) + 1
 
-  let drag = 32
-  let col -= 1
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
-  call assert_equal(colseparator - 1, winwidth(0) + 1)
-  let col += 1
-  call feedkeys(printf("\<Esc>[<%d;%d;%dM", drag, col, row), 'Lx!')
-  call assert_equal(colseparator, winwidth(0) + 1)
+    let row = 1
+    let col = colseparator
+    call MouseLeftClick(row, col)
+    let col -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(colseparator - 1, winwidth(0) + 1)
+    let col += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(colseparator, winwidth(0) + 1)
+    call MouseLeftRelease(row, col)
+    call assert_equal(colseparator, winwidth(0) + 1)
 
-  let release = 3
-  call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
-  call assert_equal(colseparator, winwidth(0) + 1)
+    bwipe!
+  endfor
 
-  bwipe!
   let &mouse = save_mouse
   let &term = save_term
   let &ttymouse = save_ttymouse
 endfunc
+
+func Test_xterm_mouse_drag_statusline()
+  let save_mouse = &mouse
+  let save_term = &term
+  let save_ttymouse = &ttymouse
+  set mouse=a term=xterm
+
+  for ttymouse_val in ['xterm', 'sgr']
+    exe 'set ttymouse=' . ttymouse_val
+
+    call assert_equal(1, &cmdheight)
+    let rowstatusline = winheight(0) + 1
+    let row = rowstatusline
+    let col = 1
+    call MouseLeftClick(row, col)
+    let row -= 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(2, &cmdheight)
+    call assert_equal(rowstatusline - 1, winheight(0) + 1)
+    let row += 1
+    call MouseLeftDrag(row, col)
+    call assert_equal(1, &cmdheight)
+    call assert_equal(rowstatusline, winheight(0) + 1)
+    call MouseLeftRelease(row, col)
+    call assert_equal(1, &cmdheight)
+    call assert_equal(rowstatusline, winheight(0) + 1)
+  endfor
+
+  let &mouse = save_mouse
+  let &term = save_term
+  let &ttymouse = save_ttymouse
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1155,
+/**/
     1154,
 /**/
     1153,