To: vim_dev@googlegroups.com Subject: Patch 8.1.1155 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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("\[M" .. list2str([button, col, row]), 'Lx!') - - let button = 0x23 " release - call feedkeys("\[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("\[<%d;%d;%dM", button, col, row), 'Lx!') - - let button = 3 " release - call feedkeys(printf("\[<%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("\[M" .. bytes, 'Lx!') + elseif &ttymouse ==# 'sgr' + call feedkeys(printf("\[<%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("\[M" .. list2str([button, col, row]), 'Lx!') ! call assert_equal(4, line('w0')) ! call assert_equal([0, 4, 1, 0], getpos('.')) ! call feedkeys("\[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("\[M" .. list2str([button, col, row]), 'Lx!') ! call assert_equal(4, line('w0')) ! call assert_equal([0, 7, 1, 0], getpos('.')) ! call feedkeys("\[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("\[<%d;%d;%dM", button, col, row), 'Lx!') ! call assert_equal(4, line('w0')) ! call assert_equal([0, 4, 1, 0], getpos('.')) ! call feedkeys(printf("\[<%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("\[<%d;%d;%dM", button, col, row), 'Lx!') ! call assert_equal(4, line('w0')) ! call assert_equal([0, 7, 1, 0], getpos('.')) ! call feedkeys(printf("\[<%d;%d;%dM", button, col, row), 'Lx!') ! call assert_equal(1, line('w0')) ! call assert_equal([0, 7, 1, 0], getpos('.')) ! call feedkeys(printf("\[<%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("\[<%d;%d;%dM", button, col, row), 'Lx!') ! ! let drag = 32 ! let row -= 1 ! call feedkeys(printf("\[<%d;%d;%dM", drag, col, row), 'Lx!') ! call assert_equal(rowseparator - 1, winheight(0) + 1) ! let row += 1 ! call feedkeys(printf("\[<%d;%d;%dM", drag, col, row), 'Lx!') ! call assert_equal(rowseparator, winheight(0) + 1) ! ! let release = 3 ! call feedkeys(printf("\[<%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("\[<%d;%d;%dM", button, col, row), 'Lx!') ! ! let drag = 32 ! let col -= 1 ! call feedkeys(printf("\[<%d;%d;%dM", drag, col, row), 'Lx!') ! call assert_equal(colseparator - 1, winwidth(0) + 1) ! let col += 1 ! call feedkeys(printf("\[<%d;%d;%dM", drag, col, row), 'Lx!') ! call assert_equal(colseparator, winwidth(0) + 1) ! ! let release = 3 ! call feedkeys(printf("\[<%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 -- Bram@Moolenaar.net -- 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 ///