summaryrefslogtreecommitdiff
path: root/src/testdir/test_termcodes.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-04-11 23:56:16 +0200
committerBram Moolenaar <Bram@vim.org>2019-04-11 23:56:16 +0200
commit3fbd2d7c316eaeea463b2f84f29b36d439306bf9 (patch)
treeff48c9162c1884e9511def5e9901af94dfd11fcf /src/testdir/test_termcodes.vim
parent496555fd18219cb902d7683b3f08dd2e47cbdc1a (diff)
downloadvim-git-3fbd2d7c316eaeea463b2f84f29b36d439306bf9.tar.gz
patch 8.1.1155: termcodes tests can be improvedv8.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)
Diffstat (limited to 'src/testdir/test_termcodes.vim')
-rw-r--r--src/testdir/test_termcodes.vim267
1 files changed, 142 insertions, 125 deletions
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index ac846a4ad..633e0216f 100644
--- 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
-
- 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('.'))
+ 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,55 +108,80 @@ func Test_xterm_mouse_drag_window_separator()
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!')
+ 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 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 &mouse = save_mouse
+ let &term = save_term
+ let &ttymouse = save_ttymouse
+endfunc
- let release = 3
- call feedkeys(printf("\<Esc>[<%d;%d;%dm", release, col, row), 'Lx!')
- call assert_equal(colseparator, winwidth(0) + 1)
+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
- bwipe!
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse