diff options
-rw-r--r-- | test/old/testdir/mouse.vim | 4 | ||||
-rw-r--r-- | test/old/testdir/setup.vim | 1 | ||||
-rw-r--r-- | test/old/testdir/test_selectmode.vim | 11 | ||||
-rw-r--r-- | test/old/testdir/test_termcodes.vim | 788 |
4 files changed, 798 insertions, 6 deletions
diff --git a/test/old/testdir/mouse.vim b/test/old/testdir/mouse.vim index 119f4725cf..a3b0ddd008 100644 --- a/test/old/testdir/mouse.vim +++ b/test/old/testdir/mouse.vim @@ -1,5 +1,9 @@ " Helper functions for generating mouse events +let g:Ttymouse_values = ['sgr'] +let g:Ttymouse_dec = [] +let g:Ttymouse_netterm = [] + func MouseLeftClick(row, col) call nvim_input_mouse('left', 'press', '', 0, a:row - 1, a:col - 1) call getchar(1) diff --git a/test/old/testdir/setup.vim b/test/old/testdir/setup.vim index 473c7c7510..9c53c0466d 100644 --- a/test/old/testdir/setup.vim +++ b/test/old/testdir/setup.vim @@ -12,6 +12,7 @@ if exists('s:did_load') set laststatus=1 set listchars=eol:$ set joinspaces + set mousemodel=extend set nohidden nosmarttab noautoindent noautoread noruler noshowcmd set nohlsearch noincsearch set nrformats=bin,octal,hex diff --git a/test/old/testdir/test_selectmode.vim b/test/old/testdir/test_selectmode.vim index c72e345efd..d1afd5204f 100644 --- a/test/old/testdir/test_selectmode.vim +++ b/test/old/testdir/test_selectmode.vim @@ -163,7 +163,7 @@ 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_term = &term " let save_ttymouse = &ttymouse " call test_override('no_query_mouse', 1) " set mouse=a term=xterm mousetime=200 @@ -171,10 +171,9 @@ func Test_term_mouse_multiple_clicks_to_select_mode() 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 = '' + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val " Single-click and drag should 'select' the characters call setline(1, ['foo [foo bar] foo', 'foo']) @@ -247,7 +246,7 @@ func Test_term_mouse_multiple_clicks_to_select_mode() call assert_equal("\<c-s>", mode(), msg) norm! x call assert_equal(['axaa', 'bxbb'], getline(1, '$'), msg) - " endfor + endfor let &mouse = save_mouse " let &term = save_term diff --git a/test/old/testdir/test_termcodes.vim b/test/old/testdir/test_termcodes.vim index 99bc2d1d37..4c65add5cf 100644 --- a/test/old/testdir/test_termcodes.vim +++ b/test/old/testdir/test_termcodes.vim @@ -1,4 +1,792 @@ +source check.vim +" CheckNotGui +" CheckUnix + +source shared.vim +source mouse.vim +source view_util.vim +source term_util.vim + +func Test_term_mouse_left_click() + new + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + go + call assert_equal([0, 1, 1, 0], getpos('.'), msg) + let row = 2 + let col = 6 + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + call assert_equal([0, 2, 6, 0], getpos('.'), msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + bwipe! +endfunc + +func Test_xterm_mouse_right_click_extends_visual() + if has('mac') + " throw "Skipped: test right click in visual mode does not work on macOs (why?)" + endif + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + + for visual_mode in ["v", "V", "\<C-V>"] + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'visual=' .. visual_mode .. ' ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + + call setline(1, repeat([repeat('-', 7)], 7)) + call MouseLeftClick(4, 4) + call MouseLeftRelease(4, 4) + exe "norm! " .. visual_mode + + " Right click extends top left of visual area. + call MouseRightClick(2, 2) + call MouseRightRelease(2, 2) + + " Right click extends bottom bottom right of visual area. + call MouseRightClick(6, 6) + call MouseRightRelease(6, 6) + norm! r1gv + + " Right click shrinks top left of visual area. + call MouseRightClick(3, 3) + call MouseRightRelease(3, 3) + + " Right click shrinks bottom right of visual area. + call MouseRightClick(5, 5) + call MouseRightRelease(5, 5) + norm! r2 + + if visual_mode ==# 'v' + call assert_equal(['-------', + \ '-111111', + \ '1122222', + \ '2222222', + \ '2222211', + \ '111111-', + \ '-------'], getline(1, '$'), msg) + elseif visual_mode ==# 'V' + call assert_equal(['-------', + \ '1111111', + \ '2222222', + \ '2222222', + \ '2222222', + \ '1111111', + \ '-------'], getline(1, '$'), msg) + else + call assert_equal(['-------', + \ '-11111-', + \ '-12221-', + \ '-12221-', + \ '-12221-', + \ '-11111-', + \ '-------'], getline(1, '$'), msg) + endif + endfor + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + bwipe! +endfunc + +" Test that <C-LeftMouse> jumps to help tag and <C-RightMouse> jumps back. +func Test_xterm_mouse_ctrl_click() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " set mouse=a term=xterm + set mouse=a + + for ttymouse_val in g:Ttymouse_values + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + " help + help usr_toc.txt + /usr_02.txt + norm! zt + let row = 1 + let col = 1 + call MouseCtrlLeftClick(row, col) + call MouseLeftRelease(row, col) + call assert_match('usr_02.txt$', bufname('%'), msg) + call assert_equal('*usr_02.txt*', expand('<cWORD>'), msg) + + call MouseCtrlRightClick(row, col) + call MouseRightRelease(row, col) + " call assert_match('help.txt$', bufname('%'), msg) + call assert_match('usr_toc.txt$', bufname('%'), msg) + call assert_equal('|usr_02.txt|', expand('<cWORD>'), msg) + + helpclose + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse +endfunc + +func Test_term_mouse_middle_click() + CheckFeature clipboard_working + + new + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + let save_quotestar = @* + let @* = 'abc' + " set mouse=a term=xterm + set mouse=a + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + call setline(1, ['123456789', '123456789']) + + " Middle-click in the middle of the line pastes text where clicked. + let row = 1 + let col = 6 + call MouseMiddleClick(row, col) + call MouseMiddleRelease(row, col) + call assert_equal(['12345abc6789', '123456789'], getline(1, '$'), msg) + + " Middle-click beyond end of the line pastes text at the end of the line. + let col = 20 + call MouseMiddleClick(row, col) + call MouseMiddleRelease(row, col) + call assert_equal(['12345abc6789abc', '123456789'], getline(1, '$'), msg) + + " Middle-click beyond the last line pastes in the last line. + let row = 5 + let col = 3 + call MouseMiddleClick(row, col) + call MouseMiddleRelease(row, col) + call assert_equal(['12345abc6789abc', '12abc3456789'], getline(1, '$'), msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + let @* = save_quotestar + bwipe! +endfunc + +" TODO: for unclear reasons this test fails if it comes after +" Test_xterm_mouse_ctrl_click() +func Test_1xterm_mouse_wheel() + new + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " set mouse=a term=xterm + set mouse=a + call setline(1, range(1, 100)) + + for ttymouse_val in g:Ttymouse_values + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + go + call assert_equal(1, line('w0'), msg) + call assert_equal([0, 1, 1, 0], getpos('.'), msg) + + call MouseWheelDown(1, 1) + call assert_equal(4, line('w0'), msg) + call assert_equal([0, 4, 1, 0], getpos('.'), msg) + + call MouseWheelDown(1, 1) + call assert_equal(7, line('w0'), msg) + call assert_equal([0, 7, 1, 0], getpos('.'), msg) + + call MouseWheelUp(1, 1) + call assert_equal(4, line('w0'), msg) + call assert_equal([0, 7, 1, 0], getpos('.'), msg) + + call MouseWheelUp(1, 1) + call assert_equal(1, line('w0'), msg) + call assert_equal([0, 7, 1, 0], getpos('.'), msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + bwipe! +endfunc + +" Test that dragging beyond the window (at the bottom and at the top) +" scrolls window content by the number of of lines beyond the window. +func Test_term_mouse_drag_beyond_window() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + let col = 1 + call setline(1, range(1, 100)) + + " Split into 3 windows, and go into the middle window + " so we test dragging mouse below and above the window. + 2split + wincmd j + 2split + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + + " Line #10 at the top. + norm! 10zt + redraw + call assert_equal(10, winsaveview().topline, msg) + call assert_equal(2, winheight(0), msg) + + let row = 4 + call MouseLeftClick(row, col) + call assert_equal(10, winsaveview().topline, msg) + + " Drag downwards. We're still in the window so topline should + " not change yet. + let row += 1 + call MouseLeftDrag(row, col) + call assert_equal(10, winsaveview().topline, msg) + + " We now leave the window at the bottom, so the window content should + " scroll by 1 line, then 2 lines (etc) as we drag further away. + let row += 1 + call MouseLeftDrag(row, col) + call assert_equal(11, winsaveview().topline, msg) + + let row += 1 + call MouseLeftDrag(row, col) + call assert_equal(13, winsaveview().topline, msg) + + " Now drag upwards. + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(14, winsaveview().topline, msg) + + " We're now back in the window so the topline should not change. + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(14, winsaveview().topline, msg) + + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(14, winsaveview().topline, msg) + + " We now leave the window at the top so the window content should + " scroll by 1 line, then 2, then 3 (etc) in the opposite direction. + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(13, winsaveview().topline, msg) + + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(11, winsaveview().topline, msg) + + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(8, winsaveview().topline, msg) + + call MouseLeftRelease(row, col) + call assert_equal(8, winsaveview().topline, msg) + call assert_equal(2, winheight(0), msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + bwipe! +endfunc + +func Test_term_mouse_drag_window_separator() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " 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 + + " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. + if ttymouse_val !=# 'xterm2' || row <= 223 + call MouseLeftClick(row, col) + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(rowseparator - 1, winheight(0) + 1, msg) + let row += 1 + call MouseLeftDrag(row, col) + call assert_equal(rowseparator, winheight(0) + 1, msg) + call MouseLeftRelease(row, col) + call assert_equal(rowseparator, winheight(0) + 1, msg) + endif + bwipe! + + " Split vertically and test dragging the vertical window separator. + vsplit + let colseparator = winwidth(0) + 1 + let row = 1 + let col = colseparator + + " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. + if ttymouse_val !=# 'xterm2' || col <= 223 + call MouseLeftClick(row, col) + let col -= 1 + call MouseLeftDrag(row, col) + call assert_equal(colseparator - 1, winwidth(0) + 1, msg) + let col += 1 + call MouseLeftDrag(row, col) + call assert_equal(colseparator, winwidth(0) + 1, msg) + call MouseLeftRelease(row, col) + call assert_equal(colseparator, winwidth(0) + 1, msg) + endif + bwipe! + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) +endfunc + +func Test_term_mouse_drag_statusline() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + let save_laststatus = &laststatus + " set mouse=a term=xterm laststatus=2 + set mouse=a laststatus=2 + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + + call assert_equal(1, &cmdheight, msg) + let rowstatusline = winheight(0) + 1 + let row = rowstatusline + let col = 1 + + if ttymouse_val ==# 'xterm2' && row > 223 + " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. + continue + endif + + call MouseLeftClick(row, col) + let row -= 1 + call MouseLeftDrag(row, col) + call assert_equal(2, &cmdheight, msg) + call assert_equal(rowstatusline - 1, winheight(0) + 1, msg) + let row += 1 + call MouseLeftDrag(row, col) + call assert_equal(1, &cmdheight, msg) + call assert_equal(rowstatusline, winheight(0) + 1, msg) + call MouseLeftRelease(row, col) + call assert_equal(1, &cmdheight, msg) + call assert_equal(rowstatusline, winheight(0) + 1, msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + let &laststatus = save_laststatus +endfunc + +func Test_term_mouse_click_tab() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + let row = 1 + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + e Xfoo + tabnew Xbar + + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xfoo', + \ 'Tab page 2', + \ '> Xbar'], a, msg) + + " Test clicking on tab names in the tabline at the top. + let col = 2 + redraw + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '> Xfoo', + \ 'Tab page 2', + \ '# Xbar'], a, msg) + + let col = 9 + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xfoo', + \ 'Tab page 2', + \ '> Xbar'], a, msg) + + %bwipe! + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) +endfunc + +func Test_term_mouse_click_X_to_close_tab() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " set mouse=a term=xterm + set mouse=a + let row = 1 + let col = &columns + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm + if ttymouse_val ==# 'xterm2' && col > 223 + " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. + continue + endif + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + e Xtab1 + tabnew Xtab2 + tabnew Xtab3 + tabn 2 + + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ ' Xtab1', + \ 'Tab page 2', + \ '> Xtab2', + \ 'Tab page 3', + \ '# Xtab3'], a, msg) + + " Click on "X" in tabline to close current tab i.e. Xtab2. + redraw + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ ' Xtab1', + \ 'Tab page 2', + \ '> Xtab3'], a, msg) + + %bwipe! + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) +endfunc + +func Test_term_mouse_drag_to_move_tab() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop + " set mouse=a term=xterm mousetime=1 + set mouse=a mousetime=0 + let row = 1 + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + e Xtab1 + tabnew Xtab2 + + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xtab1', + \ 'Tab page 2', + \ '> Xtab2'], a, msg) + redraw + + " Click in tab2 and drag it to tab1. + " Check getcharmod() to verify that click is not + " interpreted as a spurious double-click. + call MouseLeftClick(row, 10) + call assert_equal(0, getcharmod(), msg) + for col in [9, 8, 7, 6] + call MouseLeftDrag(row, col) + endfor + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '> Xtab2', + \ 'Tab page 2', + \ '# Xtab1'], a, msg) + + " Switch to tab1 + tabnext + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xtab2', + \ 'Tab page 2', + \ '> Xtab1'], a, msg) + + " Click in tab2 and drag it to tab1. + " This time it is non-current tab. + call MouseLeftClick(row, 6) + call assert_equal(0, getcharmod(), msg) + for col in [7, 8, 9, 10] + call MouseLeftDrag(row, col) + endfor + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xtab1', + \ 'Tab page 2', + \ '> Xtab2'], a, msg) + + " Click elsewhere so that click in next iteration is not + " interpreted as unwanted double-click. + call MouseLeftClick(row, 11) + call MouseLeftRelease(row, 11) + + %bwipe! + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + set mousetime& +endfunc + +func Test_term_mouse_double_click_to_create_tab() + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + " call test_override('no_query_mouse', 1) + " Set 'mousetime' to a small value, so that double-click works but we don't + " have to wait long to avoid a triple-click. + " set mouse=a term=xterm mousetime=200 + set mouse=a mousetime=200 + let row = 1 + let col = 10 + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + e Xtab1 + tabnew Xtab2 + + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ '# Xtab1', + \ 'Tab page 2', + \ '> Xtab2'], a, msg) + + redraw + call MouseLeftClick(row, col) + " Check getcharmod() to verify that first click is not + " interpreted as a spurious double-click. + call assert_equal(0, getcharmod(), msg) + call MouseLeftRelease(row, col) + call MouseLeftClick(row, col) + call assert_equal(32, getcharmod(), msg) " double-click + call MouseLeftRelease(row, col) + let a = split(execute(':tabs'), "\n") + call assert_equal(['Tab page 1', + \ ' Xtab1', + \ 'Tab page 2', + \ '> [No Name]', + \ 'Tab page 3', + \ '# Xtab2'], a, msg) + + " Click elsewhere so that click in next iteration is not + " interpreted as unwanted double click. + call MouseLeftClick(row, col + 1) + call MouseLeftRelease(row, col + 1) + + %bwipe! + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + " call test_override('no_query_mouse', 0) + set mousetime& +endfunc + +" Test double/triple/quadruple click in normal mode to visually select. +func Test_term_mouse_multiple_clicks_to_visually_select() + 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 + new + + for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + let msg = 'ttymouse=' .. ttymouse_val + " exe 'set ttymouse=' .. ttymouse_val + call setline(1, ['foo [foo bar] foo', 'foo']) + + " Double-click on word should visually select the word. + 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('v', mode(), msg) + norm! r1 + call assert_equal(['111 [foo bar] foo', 'foo'], getline(1, '$'), msg) + + " Double-click on opening square bracket should visually + " select the whole [foo bar]. + 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('v', mode(), msg) + norm! r2 + call assert_equal(['111 222222222 foo', 'foo'], getline(1, '$'), msg) + + " Triple-click should visually select the whole line. + 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('V', mode(), msg) + norm! r3 + call assert_equal(['33333333333333333', 'foo'], getline(1, '$'), msg) + + " Quadruple-click should start visual block select. + 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 MouseLeftRelease(1, 2) + call assert_equal("\<c-v>", mode(), msg) + norm! r4 + call assert_equal(['34333333333333333', 'foo'], getline(1, '$'), msg) + endfor + + let &mouse = save_mouse + " let &term = save_term + " let &ttymouse = save_ttymouse + set mousetime& + " call test_override('no_query_mouse', 0) + bwipe! +endfunc + +func Test_xterm_mouse_click_in_fold_columns() + new + let save_mouse = &mouse + let save_term = &term + " let save_ttymouse = &ttymouse + let save_foldcolumn = &foldcolumn + " set mouse=a term=xterm foldcolumn=3 ttymouse=xterm2 + set mouse=a foldcolumn=3 + + " Create 2 nested folds. + call setline(1, range(1, 7)) + 2,6fold + norm! zR + 4,5fold + call assert_equal([-1, -1, -1, 4, 4, -1, -1], + \ map(range(1, 7), 'foldclosed(v:val)')) + + " Click in "+" of inner fold in foldcolumn should open it. + redraw + let row = 4 + let col = 2 + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + call assert_equal([-1, -1, -1, -1, -1, -1, -1], + \ map(range(1, 7), 'foldclosed(v:val)')) + + " Click in "-" of outer fold in foldcolumn should close it. + redraw + let row = 2 + let col = 1 + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + call assert_equal([-1, 2, 2, 2, 2, 2, -1], + \ map(range(1, 7), 'foldclosed(v:val)')) + norm! zR + + " Click in "|" of inner fold in foldcolumn should close it. + redraw + let row = 5 + let col = 2 + call MouseLeftClick(row, col) + call MouseLeftRelease(row, col) + call assert_equal([-1, -1, -1, 4, 4, -1, -1], + \ map(range(1, 7), 'foldclosed(v:val)')) + + let &foldcolumn = save_foldcolumn + " Redraw at the end of the test to avoid interfering with other tests. + defer execute('redraw') + " let &ttymouse = save_ttymouse + " let &term = save_term + let &mouse = save_mouse + bwipe! +endfunc + " Test for translation of special key codes (<xF1>, <xF2>, etc.) func Test_Keycode_Translation() let keycodes = [ |