1" Tests for 'virtualedit'.
2
3func Test_yank_move_change()
4  new
5  call setline(1, [
6	\ "func foo() error {",
7	\ "\tif n, err := bar();",
8	\ "\terr != nil {",
9	\ "\t\treturn err",
10	\ "\t}",
11	\ "\tn = n * n",
12	\ ])
13  set virtualedit=all
14  set ts=4
15  function! MoveSelectionDown(count) abort
16    normal! m`
17    silent! exe "'<,'>move'>+".a:count
18    norm! ``
19  endfunction
20
21  xmap ]e :<C-U>call MoveSelectionDown(v:count1)<CR>
22  2
23  normal 2gg
24  normal J
25  normal jVj
26  normal ]e
27  normal ce
28  bwipe!
29  set virtualedit=
30  set ts=8
31endfunc
32
33func Test_paste_end_of_line()
34  new
35  set virtualedit=all
36  call setline(1, ['456', '123'])
37  normal! gg0"ay$
38  exe "normal! 2G$lllA\<C-O>:normal! \"agP\r"
39  call assert_equal('123456', getline(2))
40
41  bwipe!
42  set virtualedit=
43endfunc
44
45func Test_replace_end_of_line()
46  new
47  set virtualedit=all
48  call setline(1, range(20))
49  exe "normal! gg2jv10lr-"
50  call assert_equal(["1", "-----------", "3"], getline(2,4))
51  call setline(1, range(20))
52  exe "normal! gg2jv10lr\<c-k>hh"
53  call assert_equal(["1", "───────────", "3"], getline(2,4))
54
55  bwipe!
56  set virtualedit=
57endfunc
58
59func Test_edit_CTRL_G()
60  new
61  set virtualedit=insert
62  call setline(1, ['123', '1', '12'])
63  exe "normal! ggA\<c-g>jx\<c-g>jx"
64  call assert_equal(['123', '1  x', '12 x'], getline(1,'$'))
65
66  set virtualedit=all
67  %d_
68  call setline(1, ['1', '12'])
69  exe "normal! ggllix\<c-g>jx"
70  call assert_equal(['1 x', '12x'], getline(1,'$'))
71
72
73  bwipe!
74  set virtualedit=
75endfunc
76
77func Test_edit_change()
78  new
79  set virtualedit=all
80  call setline(1, "\t⒌")
81  normal Cx
82  call assert_equal('x', getline(1))
83  bwipe!
84  set virtualedit=
85endfunc
86
87" Tests for pasting at the beginning, end and middle of a tab character
88" in virtual edit mode.
89func Test_paste_in_tab()
90  new
91  call append(0, '')
92  set virtualedit=all
93
94  " Tests for pasting a register with characterwise mode type
95  call setreg('"', 'xyz', 'c')
96
97  " paste (p) unnamed register at the beginning of a tab
98  call setline(1, "a\tb")
99  call cursor(1, 2, 0)
100  normal p
101  call assert_equal('a xyz      b', getline(1))
102
103  " paste (P) unnamed register at the beginning of a tab
104  call setline(1, "a\tb")
105  call cursor(1, 2, 0)
106  normal P
107  call assert_equal("axyz\tb", getline(1))
108
109  " paste (p) unnamed register at the end of a tab
110  call setline(1, "a\tb")
111  call cursor(1, 2, 6)
112  normal p
113  call assert_equal("a\txyzb", getline(1))
114
115  " paste (P) unnamed register at the end of a tab
116  call setline(1, "a\tb")
117  call cursor(1, 2, 6)
118  normal P
119  call assert_equal('a      xyz b', getline(1))
120
121  " Tests for pasting a register with blockwise mode type
122  call setreg('"', 'xyz', 'b')
123
124  " paste (p) unnamed register at the beginning of a tab
125  call setline(1, "a\tb")
126  call cursor(1, 2, 0)
127  normal p
128  call assert_equal('a xyz      b', getline(1))
129
130  " paste (P) unnamed register at the beginning of a tab
131  call setline(1, "a\tb")
132  call cursor(1, 2, 0)
133  normal P
134  call assert_equal("axyz\tb", getline(1))
135
136  " paste (p) unnamed register at the end of a tab
137  call setline(1, "a\tb")
138  call cursor(1, 2, 6)
139  normal p
140  call assert_equal("a\txyzb", getline(1))
141
142  " paste (P) unnamed register at the end of a tab
143  call setline(1, "a\tb")
144  call cursor(1, 2, 6)
145  normal P
146  call assert_equal('a      xyz b', getline(1))
147
148  " Tests for pasting with gp and gP in virtual edit mode
149
150  " paste (gp) unnamed register at the beginning of a tab
151  call setline(1, "a\tb")
152  call cursor(1, 2, 0)
153  normal gp
154  call assert_equal('a xyz      b', getline(1))
155  call assert_equal([0, 1, 12, 0, 12], getcurpos())
156
157  " paste (gP) unnamed register at the beginning of a tab
158  call setline(1, "a\tb")
159  call cursor(1, 2, 0)
160  normal gP
161  call assert_equal("axyz\tb", getline(1))
162  call assert_equal([0, 1, 5, 0, 5], getcurpos())
163
164  " paste (gp) unnamed register at the end of a tab
165  call setline(1, "a\tb")
166  call cursor(1, 2, 6)
167  normal gp
168  call assert_equal("a\txyzb", getline(1))
169  call assert_equal([0, 1, 6, 0, 12], getcurpos())
170
171  " paste (gP) unnamed register at the end of a tab
172  call setline(1, "a\tb")
173  call cursor(1, 2, 6)
174  normal gP
175  call assert_equal('a      xyz b', getline(1))
176  call assert_equal([0, 1, 12, 0, 12], getcurpos())
177
178  " Tests for pasting a named register
179  let @r = 'xyz'
180
181  " paste (gp) named register in the middle of a tab
182  call setline(1, "a\tb")
183  call cursor(1, 2, 2)
184  normal "rgp
185  call assert_equal('a   xyz    b', getline(1))
186  call assert_equal([0, 1, 8, 0, 8], getcurpos())
187
188  " paste (gP) named register in the middle of a tab
189  call setline(1, "a\tb")
190  call cursor(1, 2, 2)
191  normal "rgP
192  call assert_equal('a  xyz     b', getline(1))
193  call assert_equal([0, 1, 7, 0, 7], getcurpos())
194
195  bwipe!
196  set virtualedit=
197endfunc
198
199" Test for yanking a few spaces within a tab to a register
200func Test_yank_in_tab()
201  new
202  let @r = ''
203  call setline(1, "a\tb")
204  set virtualedit=all
205  call cursor(1, 2, 2)
206  normal "ry5l
207  call assert_equal('     ', @r)
208
209  bwipe!
210  set virtualedit=
211endfunc
212
213" vim: shiftwidth=2 sts=2 expandtab
214