blob: 281c2486741a6d3c67c0beec1dd65c22179a2ca8 [file] [log] [blame]
Bram Moolenaar515545e2020-03-22 14:08:59 +01001" Test for modeless selection
2
3" This only works for Unix in a terminal
4source check.vim
5CheckNotGui
6CheckUnix
7
Bram Moolenaarc255b782022-11-26 19:16:48 +00008source shared.vim
Bram Moolenaar515545e2020-03-22 14:08:59 +01009source mouse.vim
10
11" Test for modeless characterwise selection (single click)
12func Test_modeless_characterwise_selection()
13 CheckFeature clipboard_working
14 let save_mouse = &mouse
15 let save_term = &term
16 let save_ttymouse = &ttymouse
17 call test_override('no_query_mouse', 1)
18 set mouse=a term=xterm mousetime=200
Bram Moolenaarc255b782022-11-26 19:16:48 +000019 call WaitForResponses()
20
Bram Moolenaar515545e2020-03-22 14:08:59 +010021 new
22 call setline(1, ['one two three', 'foo bar baz'])
23 redraw!
24
Bram Moolenaarc255b782022-11-26 19:16:48 +000025 " Wait a bit for any terminal responses to get processed.
26 sleep 50m
27
Bram Moolenaar515545e2020-03-22 14:08:59 +010028 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
29 let msg = 'ttymouse=' .. ttymouse_val
30 exe 'set ttymouse=' .. ttymouse_val
31
32 " select multiple characters within a line
Bram Moolenaar91689ea2020-05-11 22:04:53 +020033 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +010034 call MouseRightClick(1, 1)
35 call MouseRightRelease(1, 1)
36 let keys = ":"
37 let keys ..= MouseLeftClickCode(1, 6)
38 let keys ..= MouseLeftDragCode(1, 10)
39 let keys ..= MouseLeftReleaseCode(1, 10)
40 let keys ..= "\<C-Y>\<CR>"
41 call feedkeys(keys, "x")
42 call assert_equal("wo th", @*, msg)
43
44 " select multiple characters including the end of line
Bram Moolenaar91689ea2020-05-11 22:04:53 +020045 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +010046 call MouseRightClick(1, 1)
47 call MouseRightRelease(1, 1)
48 let keys = ":"
49 let keys ..= MouseLeftClickCode(1, 11)
50 let keys ..= MouseLeftDragCode(1, 16)
51 let keys ..= MouseLeftReleaseCode(1, 16)
52 let keys ..= "\<C-Y>\<CR>"
53 call feedkeys(keys, "x")
54 call assert_equal("ree\n", @*, msg)
55
56 " extend a selection using right mouse click
Bram Moolenaar91689ea2020-05-11 22:04:53 +020057 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +010058 call MouseRightClick(1, 1)
59 call MouseRightRelease(1, 1)
60 set mousemodel=extend
61 let keys = ":"
62 let keys ..= MouseLeftClickCode(1, 2)
63 let keys ..= MouseLeftDragCode(1, 5)
64 let keys ..= MouseLeftReleaseCode(1, 5)
65 let keys ..= MouseRightClickCode(1, 10)
66 let keys ..= MouseRightReleaseCode(1, 10)
67 let keys ..= "\<C-Y>\<CR>"
68 call feedkeys(keys, "x")
69 call assert_equal("ne two th", @*, msg)
70 set mousemodel&
71
72 " extend a selection backwards using right mouse click
Bram Moolenaar91689ea2020-05-11 22:04:53 +020073 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +010074 call MouseRightClick(1, 1)
75 call MouseRightRelease(1, 1)
76 set mousemodel=extend
77 let keys = ":"
78 let keys ..= MouseLeftClickCode(1, 7)
79 let keys ..= MouseLeftDragCode(1, 11)
80 let keys ..= MouseLeftReleaseCode(1, 11)
81 let keys ..= MouseRightClickCode(1, 3)
82 let keys ..= MouseRightReleaseCode(1, 3)
83 let keys ..= "\<C-Y>\<CR>"
84 call feedkeys(keys, "x")
85 call assert_equal("e two thr", @*, msg)
86 set mousemodel&
87
88 " select multiple characters within a line backwards
Bram Moolenaar91689ea2020-05-11 22:04:53 +020089 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +010090 call MouseRightClick(1, 1)
91 call MouseRightRelease(1, 1)
92 let keys = ":"
93 let keys ..= MouseLeftClickCode(1, 9)
94 let keys ..= MouseLeftDragCode(1, 3)
95 let keys ..= MouseLeftReleaseCode(1, 3)
96 let keys ..= "\<C-Y>\<CR>"
97 call feedkeys(keys, "x")
98 call assert_equal("e two t", @*, msg)
99
100 " select multiple characters across lines with (end row > start row) and
101 " (end column < start column)
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200102 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100103 call MouseRightClick(1, 1)
104 call MouseRightRelease(1, 1)
105 let keys = ":"
106 let keys ..= MouseLeftClickCode(1, 9)
107 let keys ..= MouseLeftDragCode(2, 3)
108 let keys ..= MouseLeftReleaseCode(2, 3)
109 let keys ..= "\<C-Y>\<CR>"
110 call feedkeys(keys, "x")
111 call assert_equal("three\nfoo", @*, msg)
112
113 " select multiple characters across lines with (end row > start row) and
114 " (end column > start column)
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200115 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100116 call MouseRightClick(1, 1)
117 call MouseRightRelease(1, 1)
118 let keys = ":"
119 let keys ..= MouseLeftClickCode(1, 4)
120 let keys ..= MouseLeftDragCode(2, 8)
121 let keys ..= MouseLeftReleaseCode(2, 8)
122 let keys ..= "\<C-Y>\<CR>"
123 call feedkeys(keys, "x")
124 call assert_equal(" two three\nfoo bar ", @*, msg)
125
126 " select multiple characters across lines with (end row < start row) and
127 " (end column < start column)
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200128 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100129 call MouseRightClick(1, 1)
130 call MouseRightRelease(1, 1)
131 let keys = ":"
132 let keys ..= MouseLeftClickCode(2, 7)
133 let keys ..= MouseLeftDragCode(1, 5)
134 let keys ..= MouseLeftReleaseCode(1, 5)
135 let keys ..= "\<C-Y>\<CR>"
136 call feedkeys(keys, "x")
137 call assert_equal("two three\nfoo bar", @*, msg)
138
139 " select multiple characters across lines with (end row < start row) and
140 " (end column > start column)
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200141 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100142 call MouseRightClick(1, 1)
143 call MouseRightRelease(1, 1)
144 let keys = ":"
145 let keys ..= MouseLeftClickCode(2, 11)
146 let keys ..= MouseLeftDragCode(1, 13)
147 let keys ..= MouseLeftReleaseCode(1, 13)
148 let keys ..= "\<C-Y>\<CR>"
149 call feedkeys(keys, "x")
150 call assert_equal("e\nfoo bar baz", @*, msg)
151
152 " select multiple characters across lines with (end row < start row) and
153 " the end column is greater than the line length
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200154 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100155 call MouseRightClick(1, 1)
156 call MouseRightRelease(1, 1)
157 let keys = ":"
158 let keys ..= MouseLeftClickCode(2, 7)
159 let keys ..= MouseLeftDragCode(1, 16)
160 let keys ..= MouseLeftReleaseCode(1, 16)
161 let keys ..= "\<C-Y>\<CR>"
162 call feedkeys(keys, "x")
163 call assert_equal("\nfoo bar", @*, msg)
164
165 " select multiple characters across lines with start/end row and start/end
166 " column outside the lines in the buffer
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200167 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100168 call MouseRightClick(1, 1)
169 call MouseRightRelease(1, 1)
170 let keys = ":"
171 let keys ..= MouseLeftClickCode(4, 3)
172 let keys ..= MouseLeftDragCode(3, 2)
173 let keys ..= MouseLeftReleaseCode(3, 2)
174 let keys ..= "\<C-Y>\<CR>"
175 call feedkeys(keys, "x")
176 call assert_equal("\n~ ", @*, msg)
177
178 " change selection using right mouse click within the selected text
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200179 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100180 call MouseRightClick(1, 1)
181 call MouseRightRelease(1, 1)
182 set mousemodel=extend
183 let keys = ":"
184 let keys ..= MouseLeftClickCode(1, 5)
185 let keys ..= MouseLeftDragCode(1, 13)
186 let keys ..= MouseLeftReleaseCode(1, 13)
187 let keys ..= MouseRightClickCode(1, 7)
188 let keys ..= MouseRightReleaseCode(1, 7)
189 let keys ..= MouseRightClickCode(1, 11)
190 let keys ..= MouseRightReleaseCode(1, 11)
191 let keys ..= "\<C-Y>\<CR>"
192 call feedkeys(keys, "x")
193 call assert_equal("o thr", @*, msg)
194 set mousemodel&
195
196 " select text multiple times at different places
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200197 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100198 call MouseRightClick(1, 1)
199 call MouseRightRelease(1, 1)
200 let keys = ":"
201 let keys ..= MouseLeftClickCode(1, 3)
202 let keys ..= MouseLeftDragCode(1, 5)
203 let keys ..= MouseLeftReleaseCode(1, 5)
204 let keys ..= MouseLeftClickCode(2, 7)
205 let keys ..= MouseLeftDragCode(2, 9)
206 let keys ..= MouseLeftReleaseCode(2, 9)
207 let keys ..= "\<C-Y>\<CR>"
208 call feedkeys(keys, "x")
209 call assert_equal("r b", @*, msg)
210
211 " Test for 'clipboard' set to 'autoselectml' to automatically copy the
212 " modeless selection to the clipboard
213 set clipboard=autoselectml
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200214 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100215 let keys = ":"
216 let keys ..= MouseLeftClickCode(2, 5)
217 let keys ..= MouseLeftDragCode(2, 7)
218 let keys ..= MouseLeftReleaseCode(2, 7)
219 let keys ..= "\<CR>"
220 call feedkeys(keys, "x")
221 call assert_equal("bar", @*)
222 set clipboard&
223
224 " quadruple click should start characterwise selectmode
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200225 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100226 call MouseRightClick(1, 1)
227 call MouseRightRelease(1, 1)
228 let keys = ":"
229 let keys ..= MouseLeftClickCode(1, 10)
230 let keys ..= MouseLeftReleaseCode(1, 10)
231 let keys ..= MouseLeftClickCode(1, 10)
232 let keys ..= MouseLeftReleaseCode(1, 10)
233 let keys ..= MouseLeftClickCode(1, 10)
234 let keys ..= MouseLeftReleaseCode(1, 10)
235 let keys ..= MouseLeftClickCode(1, 10)
236 let keys ..= MouseLeftDragCode(1, 11)
237 let keys ..= MouseLeftReleaseCode(1, 11)
238 let keys ..= "\<C-Y>\<CR>"
239 call feedkeys(keys, "x")
240 call assert_equal("hree", @*, msg)
241 endfor
242
243 let &mouse = save_mouse
244 let &term = save_term
245 let &ttymouse = save_ttymouse
246 set mousetime&
247 call test_override('no_query_mouse', 0)
248 close!
249endfunc
250
251" Test for modeless word selection (double click)
252func Test_modeless_word_selection()
253 CheckFeature clipboard_working
254 let save_mouse = &mouse
255 let save_term = &term
256 let save_ttymouse = &ttymouse
257 call test_override('no_query_mouse', 1)
258 set mouse=a term=xterm mousetime=200
Bram Moolenaarc255b782022-11-26 19:16:48 +0000259 call WaitForResponses()
260
Bram Moolenaar515545e2020-03-22 14:08:59 +0100261 new
262 call setline(1, ['one two three', 'foo bar baz'])
263 redraw!
264
265 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
266 let msg = 'ttymouse=' .. ttymouse_val
267 exe 'set ttymouse=' .. ttymouse_val
268
269 " select multiple words within a line
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200270 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100271 call MouseRightClick(1, 1)
272 call MouseRightRelease(1, 1)
273 let keys = ":"
274 let keys ..= MouseLeftClickCode(1, 6)
275 let keys ..= MouseLeftReleaseCode(1, 6)
276 let keys ..= MouseLeftClickCode(1, 6)
277 let keys ..= MouseLeftDragCode(1, 10)
278 let keys ..= MouseLeftReleaseCode(1, 10)
279 let keys ..= "\<C-Y>\<CR>"
280 call feedkeys(keys, "x")
281 call assert_equal("two three", @*, msg)
282
283 " select a single word
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200284 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100285 call MouseRightClick(1, 1)
286 call MouseRightRelease(1, 1)
287 let keys = ":"
288 let keys ..= MouseLeftClickCode(2, 6)
289 let keys ..= MouseLeftReleaseCode(2, 6)
290 let keys ..= MouseLeftClickCode(2, 6)
291 let keys ..= MouseLeftReleaseCode(2, 6)
292 let keys ..= "\<C-Y>\<CR>"
293 call feedkeys(keys, "x")
294 call assert_equal("bar", @*, msg)
295
296 " select multiple words backwards within a line
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200297 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100298 call MouseRightClick(1, 1)
299 call MouseRightRelease(1, 1)
300 let keys = ":"
301 let keys ..= MouseLeftClickCode(2, 11)
302 let keys ..= MouseLeftReleaseCode(2, 11)
303 let keys ..= MouseLeftClickCode(2, 11)
304 let keys ..= MouseLeftDragCode(2, 7)
305 let keys ..= MouseLeftReleaseCode(2, 7)
306 let keys ..= "\<C-Y>\<CR>"
307 call feedkeys(keys, "x")
308 call assert_equal("bar baz", @*, msg)
309
310 " select multiple words backwards across lines
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200311 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100312 call MouseRightClick(1, 1)
313 call MouseRightRelease(1, 1)
314 let keys = ":"
315 let keys ..= MouseLeftClickCode(2, 7)
316 let keys ..= MouseLeftReleaseCode(2, 7)
317 let keys ..= MouseLeftClickCode(2, 7)
318 let keys ..= MouseLeftDragCode(1, 6)
319 let keys ..= MouseLeftReleaseCode(1, 6)
320 let keys ..= "\<C-Y>\<CR>"
321 call feedkeys(keys, "x")
322 call assert_equal("two three\nfoo bar", @*, msg)
323 endfor
324
325 let &mouse = save_mouse
326 let &term = save_term
327 let &ttymouse = save_ttymouse
328 set mousetime&
329 call test_override('no_query_mouse', 0)
330 close!
331endfunc
332
333" Test for modeless line selection (triple click)
334func Test_modeless_line_selection()
335 CheckFeature clipboard_working
336 let save_mouse = &mouse
337 let save_term = &term
338 let save_ttymouse = &ttymouse
339 call test_override('no_query_mouse', 1)
340 set mouse=a term=xterm mousetime=200
Bram Moolenaarc255b782022-11-26 19:16:48 +0000341 call WaitForResponses()
342
Bram Moolenaar515545e2020-03-22 14:08:59 +0100343 new
344 call setline(1, ['one two three', 'foo bar baz'])
345 redraw!
346
347 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
348 let msg = 'ttymouse=' .. ttymouse_val
349 exe 'set ttymouse=' .. ttymouse_val
350
351 " select single line
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200352 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100353 call MouseRightClick(1, 1)
354 call MouseRightRelease(1, 1)
355 let keys = ":"
356 let keys ..= MouseLeftClickCode(2, 6)
357 let keys ..= MouseLeftReleaseCode(2, 6)
358 let keys ..= MouseLeftClickCode(2, 6)
359 let keys ..= MouseLeftReleaseCode(2, 6)
360 let keys ..= MouseLeftClickCode(2, 6)
361 let keys ..= MouseLeftReleaseCode(2, 6)
362 let keys ..= "\<C-Y>\<CR>"
363 call feedkeys(keys, "x")
364 call assert_equal("foo bar baz\n", @*, msg)
365
366 " select multiple lines
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200367 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100368 call MouseRightClick(1, 1)
369 call MouseRightRelease(1, 1)
370 let keys = ":"
371 let keys ..= MouseLeftClickCode(1, 6)
372 let keys ..= MouseLeftReleaseCode(1, 6)
373 let keys ..= MouseLeftClickCode(1, 6)
374 let keys ..= MouseLeftReleaseCode(1, 6)
375 let keys ..= MouseLeftClickCode(1, 6)
376 let keys ..= MouseLeftDragCode(2, 12)
377 let keys ..= MouseLeftReleaseCode(2, 12)
378 let keys ..= "\<C-Y>\<CR>"
379 call feedkeys(keys, "x")
380 call assert_equal("one two three\nfoo bar baz\n", @*, msg)
381
382 " select multiple lines backwards
Bram Moolenaar91689ea2020-05-11 22:04:53 +0200383 let @* = 'clean'
Bram Moolenaar515545e2020-03-22 14:08:59 +0100384 call MouseRightClick(1, 1)
385 call MouseRightRelease(1, 1)
386 let keys = ":"
387 let keys ..= MouseLeftClickCode(2, 10)
388 let keys ..= MouseLeftReleaseCode(2, 10)
389 let keys ..= MouseLeftClickCode(2, 10)
390 let keys ..= MouseLeftReleaseCode(2, 10)
391 let keys ..= MouseLeftClickCode(2, 10)
392 let keys ..= MouseLeftDragCode(1, 3)
393 let keys ..= MouseLeftReleaseCode(1, 3)
394 let keys ..= "\<C-Y>\<CR>"
395 call feedkeys(keys, "x")
396 call assert_equal("one two three\nfoo bar baz\n", @*, msg)
397 endfor
398
399 let &mouse = save_mouse
400 let &term = save_term
401 let &ttymouse = save_ttymouse
402 set mousetime&
403 call test_override('no_query_mouse', 0)
404 close!
405endfunc
406
407" vim: shiftwidth=2 sts=2 expandtab