diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-28 12:44:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-28 12:44:11 +0800 |
commit | 521e039f27dea42653a31a89f2496a0a9e62c43b (patch) | |
tree | 64191f0d13832c1f360fdbfbb7ade123a0178b80 | |
parent | 95839a23581ad678e6dc34bc2935d78f516639e7 (diff) | |
download | rneovim-521e039f27dea42653a31a89f2496a0a9e62c43b.tar.gz rneovim-521e039f27dea42653a31a89f2496a0a9e62c43b.tar.bz2 rneovim-521e039f27dea42653a31a89f2496a0a9e62c43b.zip |
vim-patch:partial:8.2.0425: code for modeless selection not sufficiently tested (#23362)
Problem: Code for modeless selection not sufficiently tested.
Solution: Add tests. Move mouse code functionality to a common script file.
(Yegappan Lakshmanan, closes vim/vim#5821)
Add some mouse.vim functions that can be made to work in Nvim.
https://github.com/vim/vim/commit/515545e11f523d14343b1e588dc0b9bd3d362bc2
-rw-r--r-- | test/old/testdir/mouse.vim | 69 | ||||
-rw-r--r-- | test/old/testdir/test_selectmode.vim | 103 |
2 files changed, 172 insertions, 0 deletions
diff --git a/test/old/testdir/mouse.vim b/test/old/testdir/mouse.vim new file mode 100644 index 0000000000..119f4725cf --- /dev/null +++ b/test/old/testdir/mouse.vim @@ -0,0 +1,69 @@ +" Helper functions for generating mouse events + +func MouseLeftClick(row, col) + call nvim_input_mouse('left', 'press', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseMiddleClick(row, col) + call nvim_input_mouse('middle', 'press', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseRightClick(row, col) + call nvim_input_mouse('right', 'press', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseCtrlLeftClick(row, col) + call nvim_input_mouse('left', 'press', 'C', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseCtrlRightClick(row, col) + call nvim_input_mouse('right', 'press', 'C', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseLeftRelease(row, col) + call nvim_input_mouse('left', 'release', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseMiddleRelease(row, col) + call nvim_input_mouse('middle', 'release', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseRightRelease(row, col) + call nvim_input_mouse('right', 'release', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseLeftDrag(row, col) + call nvim_input_mouse('left', 'drag', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseWheelUp(row, col) + call nvim_input_mouse('wheel', 'up', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +func MouseWheelDown(row, col) + call nvim_input_mouse('wheel', 'down', '', 0, a:row - 1, a:col - 1) + call getchar(1) + call feedkeys('', 'x!') +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/test/old/testdir/test_selectmode.vim b/test/old/testdir/test_selectmode.vim index 041f0592f1..c72e345efd 100644 --- a/test/old/testdir/test_selectmode.vim +++ b/test/old/testdir/test_selectmode.vim @@ -1,6 +1,11 @@ " Test for Select-mode +source check.vim +" CheckNotGui +" CheckUnix + source shared.vim +source mouse.vim " Test for select mode func Test_selectmode_basic() @@ -155,6 +160,104 @@ func Test_select_mode_map() close! endfunc +" Test double/triple/quadruple click to start 'select' mode +func Test_term_mouse_multiple_clicks_to_select_mode() + let save_mouse = &mouse + " let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm mousetime=200 + set mouse=a mousetime=200 + set selectmode=mouse + new + + " for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + " let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + let msg = '' + + " Single-click and drag should 'select' the characters + call setline(1, ['foo [foo bar] foo', 'foo']) + call MouseLeftClick(1, 3) + call assert_equal(0, getcharmod(), msg) + call MouseLeftDrag(1, 13) + call MouseLeftRelease(1, 13) + norm! o + call assert_equal(['foo foo', 'foo'], getline(1, '$'), msg) + + " Double-click on word should visually 'select' the word. + call setline(1, ['foo [foo bar] foo', 'foo']) + call MouseLeftClick(1, 2) + call assert_equal(0, getcharmod(), msg) + call MouseLeftRelease(1, 2) + call MouseLeftClick(1, 2) + call assert_equal(32, getcharmod(), msg) " double-click + call MouseLeftRelease(1, 2) + call assert_equal('s', mode(), msg) + norm! bar + call assert_equal(['bar [foo bar] foo', 'foo'], getline(1, '$'), msg) + + " Double-click on opening square bracket should visually + " 'select' the whole [foo bar]. + call setline(1, ['foo [foo bar] foo', 'foo']) + call MouseLeftClick(1, 5) + call assert_equal(0, getcharmod(), msg) + call MouseLeftRelease(1, 5) + call MouseLeftClick(1, 5) + call assert_equal(32, getcharmod(), msg) " double-click + call MouseLeftRelease(1, 5) + call assert_equal('s', mode(), msg) + norm! bar + call assert_equal(['foo bar foo', 'foo'], getline(1, '$'), msg) + + " To guarantee that the next click is not counted as a triple click + call MouseRightClick(1, 1) + call MouseRightRelease(1, 1) + + " Triple-click should visually 'select' the whole line. + call setline(1, ['foo [foo bar] foo', 'foo']) + call MouseLeftClick(1, 3) + call assert_equal(0, getcharmod(), msg) + call MouseLeftRelease(1, 3) + call MouseLeftClick(1, 3) + call assert_equal(32, getcharmod(), msg) " double-click + call MouseLeftRelease(1, 3) + call MouseLeftClick(1, 3) + call assert_equal(64, getcharmod(), msg) " triple-click + call MouseLeftRelease(1, 3) + call assert_equal('S', mode(), msg) + norm! baz + call assert_equal(['bazfoo'], getline(1, '$'), msg) + + " Quadruple-click should start visual block 'select'. + call setline(1, ['aaaaaa', 'bbbbbb']) + call MouseLeftClick(1, 2) + call assert_equal(0, getcharmod(), msg) + call MouseLeftRelease(1, 2) + call MouseLeftClick(1, 2) + call assert_equal(32, getcharmod(), msg) " double-click + call MouseLeftRelease(1, 2) + call MouseLeftClick(1, 2) + call assert_equal(64, getcharmod(), msg) " triple-click + call MouseLeftRelease(1, 2) + call MouseLeftClick(1, 2) + call assert_equal(96, getcharmod(), msg) " quadruple-click + call MouseLeftDrag(2, 4) + call MouseLeftRelease(2, 4) + call assert_equal("\<c-s>", mode(), msg) + norm! x + call assert_equal(['axaa', 'bxbb'], getline(1, '$'), msg) + " endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + set mousetime& + set selectmode& + " call test_override('no_query_mouse', 0) + bwipe! +endfunc + " Test for selecting a register with CTRL-R func Test_selectmode_register() new |