mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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.
515545e11f
This commit is contained in:
parent
95839a2358
commit
521e039f27
69
test/old/testdir/mouse.vim
Normal file
69
test/old/testdir/mouse.vim
Normal file
@ -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
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user