blob: e4bd10079b7dfb1bd2e9bd5082ea683b66a10206 [file] [log] [blame]
Bram Moolenaarf8eb9c52017-01-02 17:31:24 +01001" Tests for various Visual mode.
Bram Moolenaar019b9c62016-03-05 17:26:00 +01002if !has('visual')
3 finish
4endif
5
Bram Moolenaarc3c766e2017-03-08 22:55:19 +01006set belloff=all
7
Bram Moolenaar019b9c62016-03-05 17:26:00 +01008func Test_block_shift_multibyte()
Bram Moolenaarf8eb9c52017-01-02 17:31:24 +01009 " Uses double-wide character.
10 if !has('multi_byte')
11 return
12 endif
Bram Moolenaar019b9c62016-03-05 17:26:00 +010013 split
14 call setline(1, ['xヹxxx', 'ヹxxx'])
15 exe "normal 1G0l\<C-V>jl>"
16 call assert_equal('x ヹxxx', getline(1))
17 call assert_equal(' ヹxxx', getline(2))
18 q!
19endfunc
Bram Moolenaarf8eb9c52017-01-02 17:31:24 +010020
Bram Moolenaarbae5a172017-08-06 15:42:06 +020021func Test_block_shift_overflow()
22 " This used to cause a multiplication overflow followed by a crash.
23 new
24 normal ii
25 exe "normal \<C-V>876543210>"
26 q!
27endfunc
28
Bram Moolenaarf8eb9c52017-01-02 17:31:24 +010029func Test_dotregister_paste()
30 new
31 exe "norm! ihello world\<esc>"
32 norm! 0ve".p
33 call assert_equal('hello world world', getline(1))
34 q!
35endfunc
Bram Moolenaar23fa81d2017-02-01 21:50:21 +010036
37func Test_Visual_ctrl_o()
38 new
39 call setline(1, ['one', 'two', 'three'])
40 call cursor(1,2)
41 set noshowmode
42 set tw=0
43 call feedkeys("\<c-v>jjlIa\<c-\>\<c-o>:set tw=88\<cr>\<esc>", 'tx')
44 call assert_equal(['oane', 'tawo', 'tahree'], getline(1, 3))
45 call assert_equal(88, &tw)
46 set tw&
47 bw!
48endfu
Bram Moolenaar84b2a382017-02-17 11:40:00 +010049
50func Test_Visual_vapo()
51 new
52 normal oxx
53 normal vapo
54 bwipe!
55endfunc
Bram Moolenaar46522af2017-02-18 23:12:01 +010056
57func Test_Visual_inner_quote()
58 new
59 normal oxX
60 normal vki'
61 bwipe!
62endfunc
Bram Moolenaar75373f32017-08-07 22:02:30 +020063
64" Test for Visual mode not being reset causing E315 error.
65func TriggerTheProblem()
66 " At this point there is no visual selection because :call reset it.
67 " Let's restore the selection:
68 normal gv
69 '<,'>del _
70 try
71 exe "normal \<Esc>"
72 catch /^Vim\%((\a\+)\)\=:E315/
73 echom 'Snap! E315 error!'
74 let g:msg='Snap! E315 error!'
75 endtry
76endfunc
77
78func Test_visual_mode_reset()
79 set belloff=all
80 enew
81 let g:msg="Everything's fine."
82 enew
83 setl buftype=nofile
84 call append(line('$'), 'Delete this line.')
85
86 " NOTE: this has to be done by a call to a function because executing :del
87 " the ex-way will require the colon operator which resets the visual mode
88 " thus preventing the problem:
89 exe "normal! GV:call TriggerTheProblem()\<CR>"
90 call assert_equal("Everything's fine.", g:msg)
91
92 set belloff&
93endfunc