123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- " Test for Select-mode
- source check.vim
- " CheckNotGui
- " CheckUnix
- source shared.vim
- source mouse.vim
- " Test for select mode
- func Test_selectmode_basic()
- new
- call setline(1, range(1,100))
- 50
- norm! gHy
- call assert_equal('y51', getline('.'))
- call setline(1, range(1,100))
- 50
- exe ":norm! V9jo\<c-g>y"
- call assert_equal('y60', getline('.'))
- call setline(1, range(1,100))
- 50
- " call feedkeys(":set im\n\<c-o>gHc\<c-o>:set noim\n", 'tx')
- call feedkeys("i\<c-o>gHc\<esc>", 'tx')
- call assert_equal('c51', getline('.'))
- " clean up
- bw!
- endfunc
- " Test for starting selectmode
- func Test_selectmode_start()
- new
- set selectmode=key keymodel=startsel
- call setline(1, ['abc', 'def', 'ghi'])
- call cursor(1, 4)
- call feedkeys("A\<s-home>start\<esc>", 'txin')
- call assert_equal(['startdef', 'ghi'], getline(1, '$'))
- " start select mode again with gv
- set selectmode=cmd
- call feedkeys('gvabc', 'xt')
- call assert_equal('abctdef', getline(1))
- " arrow keys without shift should not start selection
- call feedkeys("A\<Home>\<Right>\<Left>ro", 'xt')
- call assert_equal('roabctdef', getline(1))
- set selectmode= keymodel=
- bw!
- endfunc
- " Test for characterwise select mode
- func Test_characterwise_select_mode()
- new
- " Select mode maps
- snoremap <lt>End> <End>
- snoremap <lt>Down> <Down>
- snoremap <lt>Del> <Del>
- " characterwise select mode: delete middle line
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal Gkkgh\<End>\<Del>"
- call assert_equal(['', 'b', 'c'], getline(1, '$'))
- " characterwise select mode: delete middle two lines
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal Gkkgh\<Down>\<End>\<Del>"
- call assert_equal(['', 'c'], getline(1, '$'))
- " characterwise select mode: delete last line
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal Ggh\<End>\<Del>"
- call assert_equal(['', 'a', 'b', ''], getline(1, '$'))
- " characterwise select mode: delete last two lines
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal Gkgh\<Down>\<End>\<Del>"
- call assert_equal(['', 'a', ''], getline(1, '$'))
- " CTRL-H in select mode behaves like 'x'
- call setline(1, 'abcdef')
- exe "normal! gggh\<Right>\<Right>\<Right>\<C-H>"
- call assert_equal('ef', getline(1))
- " CTRL-O in select mode switches to visual mode for one command
- call setline(1, 'abcdef')
- exe "normal! gggh\<C-O>3lm"
- call assert_equal('mef', getline(1))
- sunmap <lt>End>
- sunmap <lt>Down>
- sunmap <lt>Del>
- bwipe!
- endfunc
- " Test for linewise select mode
- func Test_linewise_select_mode()
- new
- " linewise select mode: delete middle line
- call append('$', ['a', 'b', 'c'])
- exe "normal GkkgH\<Del>"
- call assert_equal(['', 'b', 'c'], getline(1, '$'))
- " linewise select mode: delete middle two lines
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal GkkgH\<Down>\<Del>"
- call assert_equal(['', 'c'], getline(1, '$'))
- " linewise select mode: delete last line
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal GgH\<Del>"
- call assert_equal(['', 'a', 'b'], getline(1, '$'))
- " linewise select mode: delete last two lines
- call deletebufline('', 1, '$')
- call append('$', ['a', 'b', 'c'])
- exe "normal GkgH\<Down>\<Del>"
- call assert_equal(['', 'a'], getline(1, '$'))
- bwipe!
- endfunc
- " Test for blockwise select mode (g CTRL-H)
- func Test_blockwise_select_mode()
- new
- call setline(1, ['foo', 'bar'])
- call feedkeys("g\<BS>\<Right>\<Down>mm", 'xt')
- call assert_equal(['mmo', 'mmr'], getline(1, '$'))
- close!
- endfunc
- " Test for using visual mode maps in select mode
- func Test_select_mode_map()
- new
- vmap <buffer> <F2> 3l
- call setline(1, 'Test line')
- call feedkeys("gh\<F2>map", 'xt')
- call assert_equal('map line', getline(1))
- vmap <buffer> <F2> ygV
- call feedkeys("0gh\<Right>\<Right>\<F2>cwabc", 'xt')
- call assert_equal('abc line', getline(1))
- vmap <buffer> <F2> :<C-U>let v=100<CR>
- call feedkeys("gggh\<Right>\<Right>\<F2>foo", 'xt')
- call assert_equal('foo line', getline(1))
- " reselect the select mode using gv from a visual mode map
- vmap <buffer> <F2> gv
- set selectmode=cmd
- call feedkeys("0gh\<F2>map", 'xt')
- call assert_equal('map line', getline(1))
- set selectmode&
- 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)
- " 'mousetime' must be sufficiently large, or else the test is flaky when
- " using a ssh connection with X forwarding; i.e. ssh -X.
- " set mouse=a term=xterm mousetime=1000
- set mouse=a mousetime=1000
- set selectmode=mouse
- new
- 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'])
- 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
- " Default behavior: use unnamed register
- call setline(1, 'foo')
- call setreg('"', 'bar')
- call setreg('a', 'baz')
- exe ":norm! v\<c-g>a"
- call assert_equal(getline('.'), 'aoo')
- call assert_equal('f', getreg('"'))
- call assert_equal('baz', getreg('a'))
- " Use the black hole register
- call setline(1, 'foo')
- call setreg('"', 'bar')
- call setreg('a', 'baz')
- exe ":norm! v\<c-g>\<c-r>_a"
- call assert_equal(getline('.'), 'aoo')
- call assert_equal('bar', getreg('"'))
- call assert_equal('baz', getreg('a'))
- " Invalid register: use unnamed register
- call setline(1, 'foo')
- call setreg('"', 'bar')
- call setreg('a', 'baz')
- exe ":norm! v\<c-g>\<c-r>?a"
- call assert_equal(getline('.'), 'aoo')
- call assert_equal('f', getreg('"'))
- call assert_equal('baz', getreg('a'))
- " Use unnamed register
- call setline(1, 'foo')
- call setreg('"', 'bar')
- call setreg('a', 'baz')
- exe ":norm! v\<c-g>\<c-r>\"a"
- call assert_equal(getline('.'), 'aoo')
- call assert_equal('f', getreg('"'))
- call assert_equal('baz', getreg('a'))
- " use specicifed register, unnamed register is also written
- call setline(1, 'foo')
- call setreg('"', 'bar')
- call setreg('a', 'baz')
- exe ":norm! v\<c-g>\<c-r>aa"
- call assert_equal(getline('.'), 'aoo')
- call assert_equal('f', getreg('"'))
- call assert_equal('f', getreg('a'))
- bw!
- endfunc
- func Test_ins_ctrl_o_in_insert_mode_resets_selectmode()
- new
- " ctrl-o in insert mode resets restart_VIsual_select
- call setline(1, 'abcdef')
- call cursor(1, 1)
- exe "norm! \<c-v>\<c-g>\<c-o>c\<c-o>\<c-v>\<right>\<right>IABC"
- call assert_equal('ABCbcdef', getline(1))
- bwipe!
- endfunc
- " Test that an :lmap mapping for a printable keypad key is applied when typing
- " it in Select mode.
- func Test_selectmode_keypad_lmap()
- new
- lnoremap <buffer> <kPoint> ???
- lnoremap <buffer> <kEnter> !!!
- setlocal iminsert=1
- call setline(1, 'abcdef')
- call feedkeys("gH\<kPoint>\<Esc>", 'tx')
- call assert_equal(['???'], getline(1, '$'))
- call feedkeys("gH\<kEnter>\<Esc>", 'tx')
- call assert_equal(['!!!'], getline(1, '$'))
- bwipe!
- endfunc
- " vim: shiftwidth=2 sts=2 expandtab
|