mirror of
https://github.com/vim/vim
synced 2025-07-15 16:51:57 +00:00
Problem: tests: testdir is a bit messy Solution: move test scripts into testdir/util/ directory src/testdir/ has become a dumping ground mixing test cases with utility functions. Let's fix this by moving all utility functions into the testdir/util/ directory Also a few related changes had to be done: - Update Filelist - update README.txt and mention the new directory layout - fix shadowbuild by linking the util directory into the shadow dir closes: #17677 Signed-off-by: Christian Brabandt <cb@256bit.org>
406 lines
13 KiB
VimL
406 lines
13 KiB
VimL
" 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
|