blob: ef597ada18d4fd2f200740ba069d5b44595c4a62 [file] [log] [blame] [edit]
" Test for modeless selection
" This only works for Unix in a terminal
CheckNotGui
CheckUnix
source util/mouse.vim
" Test for modeless characterwise selection (single click)
func Test_modeless_characterwise_selection()
CheckFeature clipboard_working
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
call WaitForResponses()
new
call setline(1, ['one two three', 'foo bar baz'])
redraw!
" Wait a bit for any terminal responses to get processed.
sleep 50m
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
let msg = 'ttymouse=' .. ttymouse_val
exe 'set ttymouse=' .. ttymouse_val
" select multiple characters within a line
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftDragCode(1, 10)
let keys ..= MouseLeftReleaseCode(1, 10)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("wo th", @*, msg)
" select multiple characters including the end of line
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 11)
let keys ..= MouseLeftDragCode(1, 16)
let keys ..= MouseLeftReleaseCode(1, 16)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("ree\n", @*, msg)
" extend a selection using right mouse click
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
set mousemodel=extend
let keys = ":"
let keys ..= MouseLeftClickCode(1, 2)
let keys ..= MouseLeftDragCode(1, 5)
let keys ..= MouseLeftReleaseCode(1, 5)
let keys ..= MouseRightClickCode(1, 10)
let keys ..= MouseRightReleaseCode(1, 10)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("ne two th", @*, msg)
set mousemodel&
" extend a selection backwards using right mouse click
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
set mousemodel=extend
let keys = ":"
let keys ..= MouseLeftClickCode(1, 7)
let keys ..= MouseLeftDragCode(1, 11)
let keys ..= MouseLeftReleaseCode(1, 11)
let keys ..= MouseRightClickCode(1, 3)
let keys ..= MouseRightReleaseCode(1, 3)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("e two thr", @*, msg)
set mousemodel&
" select multiple characters within a line backwards
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 9)
let keys ..= MouseLeftDragCode(1, 3)
let keys ..= MouseLeftReleaseCode(1, 3)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("e two t", @*, msg)
" select multiple characters across lines with (end row > start row) and
" (end column < start column)
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 9)
let keys ..= MouseLeftDragCode(2, 3)
let keys ..= MouseLeftReleaseCode(2, 3)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("three\nfoo", @*, msg)
" select multiple characters across lines with (end row > start row) and
" (end column > start column)
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 4)
let keys ..= MouseLeftDragCode(2, 8)
let keys ..= MouseLeftReleaseCode(2, 8)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal(" two three\nfoo bar ", @*, msg)
" select multiple characters across lines with (end row < start row) and
" (end column < start column)
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 7)
let keys ..= MouseLeftDragCode(1, 5)
let keys ..= MouseLeftReleaseCode(1, 5)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("two three\nfoo bar", @*, msg)
" select multiple characters across lines with (end row < start row) and
" (end column > start column)
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 11)
let keys ..= MouseLeftDragCode(1, 13)
let keys ..= MouseLeftReleaseCode(1, 13)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("e\nfoo bar baz", @*, msg)
" select multiple characters across lines with (end row < start row) and
" the end column is greater than the line length
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 7)
let keys ..= MouseLeftDragCode(1, 16)
let keys ..= MouseLeftReleaseCode(1, 16)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("\nfoo bar", @*, msg)
" select multiple characters across lines with start/end row and start/end
" column outside the lines in the buffer
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(4, 3)
let keys ..= MouseLeftDragCode(3, 2)
let keys ..= MouseLeftReleaseCode(3, 2)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("\n~ ", @*, msg)
" change selection using right mouse click within the selected text
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
set mousemodel=extend
let keys = ":"
let keys ..= MouseLeftClickCode(1, 5)
let keys ..= MouseLeftDragCode(1, 13)
let keys ..= MouseLeftReleaseCode(1, 13)
let keys ..= MouseRightClickCode(1, 7)
let keys ..= MouseRightReleaseCode(1, 7)
let keys ..= MouseRightClickCode(1, 11)
let keys ..= MouseRightReleaseCode(1, 11)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("o thr", @*, msg)
set mousemodel&
" select text multiple times at different places
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 3)
let keys ..= MouseLeftDragCode(1, 5)
let keys ..= MouseLeftReleaseCode(1, 5)
let keys ..= MouseLeftClickCode(2, 7)
let keys ..= MouseLeftDragCode(2, 9)
let keys ..= MouseLeftReleaseCode(2, 9)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("r b", @*, msg)
" Test for 'clipboard' set to 'autoselectml' to automatically copy the
" modeless selection to the clipboard
set clipboard=autoselectml
let @* = 'clean'
let keys = ":"
let keys ..= MouseLeftClickCode(2, 5)
let keys ..= MouseLeftDragCode(2, 7)
let keys ..= MouseLeftReleaseCode(2, 7)
let keys ..= "\<CR>"
call feedkeys(keys, "x")
call assert_equal("bar", @*)
set clipboard&
" quadruple click should start characterwise selectmode
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 10)
let keys ..= MouseLeftReleaseCode(1, 10)
let keys ..= MouseLeftClickCode(1, 10)
let keys ..= MouseLeftReleaseCode(1, 10)
let keys ..= MouseLeftClickCode(1, 10)
let keys ..= MouseLeftReleaseCode(1, 10)
let keys ..= MouseLeftClickCode(1, 10)
let keys ..= MouseLeftDragCode(1, 11)
let keys ..= MouseLeftReleaseCode(1, 11)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("hree", @*, msg)
endfor
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse
set mousetime&
call test_override('no_query_mouse', 0)
close!
endfunc
" Test for modeless word selection (double click)
func Test_modeless_word_selection()
CheckFeature clipboard_working
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
call WaitForResponses()
new
call setline(1, ['one two three', 'foo bar baz'])
redraw!
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
let msg = 'ttymouse=' .. ttymouse_val
exe 'set ttymouse=' .. ttymouse_val
" select multiple words within a line
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftReleaseCode(1, 6)
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftDragCode(1, 10)
let keys ..= MouseLeftReleaseCode(1, 10)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("two three", @*, msg)
" select a single word
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 6)
let keys ..= MouseLeftReleaseCode(2, 6)
let keys ..= MouseLeftClickCode(2, 6)
let keys ..= MouseLeftReleaseCode(2, 6)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("bar", @*, msg)
" select multiple words backwards within a line
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 11)
let keys ..= MouseLeftReleaseCode(2, 11)
let keys ..= MouseLeftClickCode(2, 11)
let keys ..= MouseLeftDragCode(2, 7)
let keys ..= MouseLeftReleaseCode(2, 7)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("bar baz", @*, msg)
" select multiple words backwards across lines
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 7)
let keys ..= MouseLeftReleaseCode(2, 7)
let keys ..= MouseLeftClickCode(2, 7)
let keys ..= MouseLeftDragCode(1, 6)
let keys ..= MouseLeftReleaseCode(1, 6)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("two three\nfoo bar", @*, msg)
endfor
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse
set mousetime&
call test_override('no_query_mouse', 0)
close!
endfunc
" Test for modeless line selection (triple click)
func Test_modeless_line_selection()
CheckFeature clipboard_working
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
call WaitForResponses()
new
call setline(1, ['one two three', 'foo bar baz'])
redraw!
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
let msg = 'ttymouse=' .. ttymouse_val
exe 'set ttymouse=' .. ttymouse_val
" select single line
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 6)
let keys ..= MouseLeftReleaseCode(2, 6)
let keys ..= MouseLeftClickCode(2, 6)
let keys ..= MouseLeftReleaseCode(2, 6)
let keys ..= MouseLeftClickCode(2, 6)
let keys ..= MouseLeftReleaseCode(2, 6)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("foo bar baz\n", @*, msg)
" select multiple lines
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftReleaseCode(1, 6)
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftReleaseCode(1, 6)
let keys ..= MouseLeftClickCode(1, 6)
let keys ..= MouseLeftDragCode(2, 12)
let keys ..= MouseLeftReleaseCode(2, 12)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("one two three\nfoo bar baz\n", @*, msg)
" select multiple lines backwards
let @* = 'clean'
call MouseRightClick(1, 1)
call MouseRightRelease(1, 1)
let keys = ":"
let keys ..= MouseLeftClickCode(2, 10)
let keys ..= MouseLeftReleaseCode(2, 10)
let keys ..= MouseLeftClickCode(2, 10)
let keys ..= MouseLeftReleaseCode(2, 10)
let keys ..= MouseLeftClickCode(2, 10)
let keys ..= MouseLeftDragCode(1, 3)
let keys ..= MouseLeftReleaseCode(1, 3)
let keys ..= "\<C-Y>\<CR>"
call feedkeys(keys, "x")
call assert_equal("one two three\nfoo bar baz\n", @*, msg)
endfor
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse
set mousetime&
call test_override('no_query_mouse', 0)
close!
endfunc
" vim: shiftwidth=2 sts=2 expandtab