Patch 8.1.1155
Problem: Termcodes tests can be improved.
Solution: Add helper functions to simplify tests. Dragging statusline for
xterm and sgr. (Dominique Pelle, closes #4237)
Files: src/testdir/test_termcodes.vim
*** ../vim-8.1.1154/src/testdir/test_termcodes.vim 2019-04-09
21:51:59.177300145 +0200
--- src/testdir/test_termcodes.vim 2019-04-11 23:53:26.777268934 +0200
***************
*** 5,43 ****
finish
endif
func Test_xterm_mouse_click()
new
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
! set mouse=a
! set 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('.'))
let &mouse = save_mouse
let &term = save_term
--- 5,65 ----
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 term=xterm
call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
! 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,110 ****
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
! set mouse=a
! set 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
!
! 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('.'))
!
! " 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 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('.'))
!
! 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('.'))
let &mouse = save_mouse
let &term = save_term
--- 72,102 ----
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
! set mouse=a term=xterm
call setline(1, range(1, 100))
! 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 MouseWheelDown(1, 1)
! call assert_equal(4, line('w0'))
! call assert_equal([0, 4, 1, 0], getpos('.'))
!
! call MouseWheelDown(1, 1)
! 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('.'))
!
! 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,170 ****
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
! set mouse=a
! set term=xterm
! set ttymouse=sgr
!
! " Split horizontally and test dragging the horizontal window separator.
! split
! let rowseparator = winheight(0) + 1
!
! let button = 0 " left down.
! let row = rowseparator
! let col = 1
! call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
!
! 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)
! 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!')
!
! 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 release = 3
! call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
! call assert_equal(colseparator, winwidth(0) + 1)
- bwipe!
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse
--- 108,187 ----
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
! " 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 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!
!
! " Split vertically and test dragging the vertical window separator.
! vsplit
! let 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)
!
! bwipe!
! endfor
!
! 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
*** ../vim-8.1.1154/src/version.c 2019-04-11 20:14:52.448664389 +0200
--- src/version.c 2019-04-11 23:02:25.131500056 +0200
***************
*** 773,774 ****
--- 773,776 ----
{ /* Add new patch number below this line */
+ /**/
+ 1155,
/**/
--
Did you hear about the new 3 million dollar West Virginia State Lottery?
The winner gets 3 dollars a year for a million years.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.