1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063 |
- 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 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_wrap = &wrap
- " let save_ttymouse = &ttymouse
- " set mouse=a term=xterm nowrap
- set mouse=a nowrap
- call setline(1, range(100000000000000, 100000000000100))
- 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)
- call MouseWheelRight(1, 1)
- call assert_equal(7, 1 + virtcol(".") - wincol(), msg)
- call assert_equal([0, 7, 7, 0], getpos('.'), msg)
- call MouseWheelRight(1, 1)
- call assert_equal(13, 1 + virtcol(".") - wincol(), msg)
- call assert_equal([0, 7, 13, 0], getpos('.'), msg)
- call MouseWheelLeft(1, 1)
- call assert_equal(7, 1 + virtcol(".") - wincol(), msg)
- call assert_equal([0, 7, 13, 0], getpos('.'), msg)
- call MouseWheelLeft(1, 1)
- call assert_equal(1, 1 + virtcol(".") - wincol(), msg)
- call assert_equal([0, 7, 13, 0], getpos('.'), msg)
- endfor
- let &mouse = save_mouse
- " let &term = save_term
- let &wrap = save_wrap
- " 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 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)
- " 'mousetime' must be sufficiently large, or else the test is flaky when
- " using a ssh connection with X forwarding; i.e. ssh -X (issue #7563).
- " set mouse=a term=xterm mousetime=600
- set mouse=a mousetime=600
- 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)
- " Double-click on a space character should visually select all the
- " consecutive space characters.
- %d
- call setline(1, ' one two')
- call MouseLeftClick(1, 2)
- call MouseLeftRelease(1, 2)
- call MouseLeftClick(1, 2)
- call MouseLeftRelease(1, 2)
- call assert_equal('v', mode(), msg)
- norm! r1
- call assert_equal(['1111one two'], getline(1, '$'), msg)
- " Double-click on a word with exclusive selection
- set selection=exclusive
- let @" = ''
- call MouseLeftClick(1, 10)
- call MouseLeftRelease(1, 10)
- call MouseLeftClick(1, 10)
- call MouseLeftRelease(1, 10)
- norm! y
- call assert_equal('two', @", msg)
- " Double click to select a block of text with exclusive selection
- %d
- call setline(1, 'one (two) three')
- call MouseLeftClick(1, 5)
- call MouseLeftRelease(1, 5)
- call MouseLeftClick(1, 5)
- call MouseLeftRelease(1, 5)
- norm! y
- call assert_equal(5, col("'<"), msg)
- call assert_equal(10, col("'>"), msg)
- call MouseLeftClick(1, 9)
- call MouseLeftRelease(1, 9)
- call MouseLeftClick(1, 9)
- call MouseLeftRelease(1, 9)
- norm! y
- call assert_equal(5, col("'<"), msg)
- call assert_equal(10, col("'>"), msg)
- set selection&
- " Click somewhere else so that the clicks above is not combined with the
- " clicks in the next iteration.
- call MouseRightClick(3, 10)
- call MouseRightRelease(3, 10)
- endfor
- let &mouse = save_mouse
- " let &term = save_term
- " let &ttymouse = save_ttymouse
- set mousetime&
- " call test_override('no_query_mouse', 0)
- bwipe!
- endfunc
- " Test for selecting text in visual blockwise mode using Alt-LeftClick
- func Test_mouse_alt_leftclick()
- 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 mousemodel=popup
- new
- call setline(1, 'one (two) three')
- for ttymouse_val in g:Ttymouse_values
- let msg = 'ttymouse=' .. ttymouse_val
- " exe 'set ttymouse=' .. ttymouse_val
- " Left click with the Alt modifier key should extend the selection in
- " blockwise visual mode.
- let @" = ''
- call MouseLeftClick(1, 3)
- call MouseLeftRelease(1, 3)
- call MouseAltLeftClick(1, 11)
- call MouseLeftRelease(1, 11)
- call assert_equal("\<C-V>", mode(), msg)
- normal! y
- call assert_equal('e (two) t', @")
- endfor
- let &mouse = save_mouse
- " let &term = save_term
- " let &ttymouse = save_ttymouse
- set mousetime& mousemodel&
- " call test_override('no_query_mouse', 0)
- close!
- 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 the 'h' flag in the 'mouse' option. Using mouse in the help window.
- func Test_term_mouse_help_window()
- let save_mouse = &mouse
- let save_term = &term
- " let save_ttymouse = &ttymouse
- " call test_override('no_query_mouse', 1)
- " set mouse=h term=xterm mousetime=200
- set mouse=h mousetime=200
- for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
- let msg = 'ttymouse=' .. ttymouse_val
- " exe 'set ttymouse=' .. ttymouse_val
- help
- let @" = ''
- call MouseLeftClick(2, 5)
- call MouseLeftRelease(2, 5)
- call MouseLeftClick(1, 1)
- call MouseLeftDrag(1, 10)
- call MouseLeftRelease(1, 10)
- norm! y
- call assert_equal('*help.txt*', @", msg)
- helpclose
- " Click somewhere else to make sure the left click above is not combined
- " with the next left click and treated as a double click
- call MouseRightClick(5, 10)
- call MouseRightRelease(5, 10)
- endfor
- let &mouse = save_mouse
- " let &term = save_term
- " let &ttymouse = save_ttymouse
- set mousetime&
- " call test_override('no_query_mouse', 0)
- %bw!
- endfunc
- " Test for the translation of various mouse terminal codes
- func Test_mouse_termcodes()
- 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
- new
- for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec + g:Ttymouse_netterm
- let msg = 'ttymouse=' .. ttymouse_val
- " exe 'set ttymouse=' .. ttymouse_val
- let mouse_codes = [
- \ ["\<LeftMouse>", "<LeftMouse>"],
- \ ["\<MiddleMouse>", "<MiddleMouse>"],
- \ ["\<RightMouse>", "<RightMouse>"],
- \ ["\<S-LeftMouse>", "<S-LeftMouse>"],
- \ ["\<S-MiddleMouse>", "<S-MiddleMouse>"],
- \ ["\<S-RightMouse>", "<S-RightMouse>"],
- \ ["\<C-LeftMouse>", "<C-LeftMouse>"],
- \ ["\<C-MiddleMouse>", "<C-MiddleMouse>"],
- \ ["\<C-RightMouse>", "<C-RightMouse>"],
- \ ["\<M-LeftMouse>", "<M-LeftMouse>"],
- \ ["\<M-MiddleMouse>", "<M-MiddleMouse>"],
- \ ["\<M-RightMouse>", "<M-RightMouse>"],
- \ ["\<2-LeftMouse>", "<2-LeftMouse>"],
- \ ["\<2-MiddleMouse>", "<2-MiddleMouse>"],
- \ ["\<2-RightMouse>", "<2-RightMouse>"],
- \ ["\<3-LeftMouse>", "<3-LeftMouse>"],
- \ ["\<3-MiddleMouse>", "<3-MiddleMouse>"],
- \ ["\<3-RightMouse>", "<3-RightMouse>"],
- \ ["\<4-LeftMouse>", "<4-LeftMouse>"],
- \ ["\<4-MiddleMouse>", "<4-MiddleMouse>"],
- \ ["\<4-RightMouse>", "<4-RightMouse>"],
- \ ["\<LeftDrag>", "<LeftDrag>"],
- \ ["\<MiddleDrag>", "<MiddleDrag>"],
- \ ["\<RightDrag>", "<RightDrag>"],
- \ ["\<LeftRelease>", "<LeftRelease>"],
- \ ["\<MiddleRelease>", "<MiddleRelease>"],
- \ ["\<RightRelease>", "<RightRelease>"],
- \ ["\<ScrollWheelUp>", "<ScrollWheelUp>"],
- \ ["\<S-ScrollWheelUp>", "<S-ScrollWheelUp>"],
- \ ["\<C-ScrollWheelUp>", "<C-ScrollWheelUp>"],
- \ ["\<ScrollWheelDown>", "<ScrollWheelDown>"],
- \ ["\<S-ScrollWheelDown>", "<S-ScrollWheelDown>"],
- \ ["\<C-ScrollWheelDown>", "<C-ScrollWheelDown>"],
- \ ["\<ScrollWheelLeft>", "<ScrollWheelLeft>"],
- \ ["\<S-ScrollWheelLeft>", "<S-ScrollWheelLeft>"],
- \ ["\<C-ScrollWheelLeft>", "<C-ScrollWheelLeft>"],
- \ ["\<ScrollWheelRight>", "<ScrollWheelRight>"],
- \ ["\<S-ScrollWheelRight>", "<S-ScrollWheelRight>"],
- \ ["\<C-ScrollWheelRight>", "<C-ScrollWheelRight>"]
- \ ]
- for [code, outstr] in mouse_codes
- exe "normal ggC\<C-K>" . code
- call assert_equal(outstr, getline(1), msg)
- endfor
- endfor
- let &mouse = save_mouse
- " let &term = save_term
- " let &ttymouse = save_ttymouse
- set mousetime&
- " call test_override('no_query_mouse', 0)
- %bw!
- endfunc
- " Test for translation of special key codes (<xF1>, <xF2>, etc.)
- func Test_Keycode_Translation()
- let keycodes = [
- \ ["<xUp>", "<Up>"],
- \ ["<xDown>", "<Down>"],
- \ ["<xLeft>", "<Left>"],
- \ ["<xRight>", "<Right>"],
- \ ["<xHome>", "<Home>"],
- \ ["<xEnd>", "<End>"],
- \ ["<zHome>", "<Home>"],
- \ ["<zEnd>", "<End>"],
- \ ["<xF1>", "<F1>"],
- \ ["<xF2>", "<F2>"],
- \ ["<xF3>", "<F3>"],
- \ ["<xF4>", "<F4>"],
- \ ["<S-xF1>", "<S-F1>"],
- \ ["<S-xF2>", "<S-F2>"],
- \ ["<S-xF3>", "<S-F3>"],
- \ ["<S-xF4>", "<S-F4>"]]
- for [k1, k2] in keycodes
- exe "nnoremap " .. k1 .. " 2wx"
- call assert_true(maparg(k1, 'n', 0, 1).lhs == k2)
- exe "nunmap " .. k1
- endfor
- endfunc
- " Test for terminal keycodes that doesn't have termcap entries
- func Test_special_term_keycodes()
- new
- " Test for <xHome>, <S-xHome> and <C-xHome>
- " send <K_SPECIAL> <KS_EXTRA> keycode
- call feedkeys("i\<C-K>\x80\xfd\x3f\n", 'xt')
- " send <K_SPECIAL> <KS_MODIFIER> bitmap <K_SPECIAL> <KS_EXTRA> keycode
- call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3f\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3f\n", 'xt')
- " Test for <xEnd>, <S-xEnd> and <C-xEnd>
- call feedkeys("i\<C-K>\x80\xfd\x3d\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3d\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3d\n", 'xt')
- " Test for <zHome>, <S-zHome> and <C-zHome>
- call feedkeys("i\<C-K>\x80\xfd\x40\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x40\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x40\n", 'xt')
- " Test for <zEnd>, <S-zEnd> and <C-zEnd>
- call feedkeys("i\<C-K>\x80\xfd\x3e\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x2\x80\xfd\x3e\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfc\x4\x80\xfd\x3e\n", 'xt')
- " Test for <xUp>, <xDown>, <xLeft> and <xRight>
- call feedkeys("i\<C-K>\x80\xfd\x41\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfd\x42\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfd\x43\n", 'xt')
- call feedkeys("i\<C-K>\x80\xfd\x44\n", 'xt')
- call assert_equal(['<Home>', '<S-Home>', '<C-Home>',
- \ '<End>', '<S-End>', '<C-End>',
- \ '<Home>', '<S-Home>', '<C-Home>',
- \ '<End>', '<S-End>', '<C-End>',
- \ '<Up>', '<Down>', '<Left>', '<Right>', ''], getline(1, '$'))
- bw!
- endfunc
- " vim: shiftwidth=2 sts=2 expandtab
|