" Tests for various Visual mode. if !has('visual') finish endif set belloff=all func Test_block_shift_multibyte() " Uses double-wide character. if !has('multi_byte') return endif split call setline(1, ['xヹxxx', 'ヹxxx']) exe "normal 1G0l\jl>" call assert_equal('x ヹxxx', getline(1)) call assert_equal(' ヹxxx', getline(2)) q! endfunc func Test_block_shift_overflow() " This used to cause a multiplication overflow followed by a crash. new normal ii exe "normal \876543210>" q! endfunc func Test_dotregister_paste() new exe "norm! ihello world\" norm! 0ve".p call assert_equal('hello world world', getline(1)) q! endfunc func Test_Visual_ctrl_o() new call setline(1, ['one', 'two', 'three']) call cursor(1,2) set noshowmode set tw=0 call feedkeys("\jjlIa\\:set tw=88\\", 'tx') call assert_equal(['oane', 'tawo', 'tahree'], getline(1, 3)) call assert_equal(88, &tw) set tw& bw! endfu func Test_Visual_vapo() new normal oxx normal vapo bwipe! endfunc func Test_Visual_inner_quote() new normal oxX normal vki' bwipe! endfunc " Test for Visual mode not being reset causing E315 error. func TriggerTheProblem() " At this point there is no visual selection because :call reset it. " Let's restore the selection: normal gv '<,'>del _ try exe "normal \" catch /^Vim\%((\a\+)\)\=:E315/ echom 'Snap! E315 error!' let g:msg='Snap! E315 error!' endtry endfunc func Test_visual_mode_reset() set belloff=all enew let g:msg="Everything's fine." enew setl buftype=nofile call append(line('$'), 'Delete this line.') " NOTE: this has to be done by a call to a function because executing :del " the ex-way will require the colon operator which resets the visual mode " thus preventing the problem: exe "normal! GV:call TriggerTheProblem()\" call assert_equal("Everything's fine.", g:msg) set belloff& endfunc