Mercurial > vim
comparison src/testdir/test_modeless.vim @ 19738:0208534b8a84 v8.2.0425
patch 8.2.0425: code for modeless selection not sufficiently tested
Commit: https://github.com/vim/vim/commit/515545e11f523d14343b1e588dc0b9bd3d362bc2
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 22 14:08:59 2020 +0100
patch 8.2.0425: code for modeless selection not sufficiently tested
Problem: Code for modeless selection not sufficiently tested.
Solution: Add tests. Move mouse code functionality to a common script file.
(Yegappan Lakshmanan, closes #5821)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 22 Mar 2020 14:15:04 +0100 |
parents | |
children | 6bcd12791bf1 |
comparison
equal
deleted
inserted
replaced
19737:5591829276ff | 19738:0208534b8a84 |
---|---|
1 " Test for modeless selection | |
2 | |
3 " This only works for Unix in a terminal | |
4 source check.vim | |
5 CheckNotGui | |
6 CheckUnix | |
7 | |
8 source mouse.vim | |
9 | |
10 " Test for modeless characterwise selection (single click) | |
11 func Test_modeless_characterwise_selection() | |
12 CheckFeature clipboard_working | |
13 let save_mouse = &mouse | |
14 let save_term = &term | |
15 let save_ttymouse = &ttymouse | |
16 call test_override('no_query_mouse', 1) | |
17 set mouse=a term=xterm mousetime=200 | |
18 new | |
19 call setline(1, ['one two three', 'foo bar baz']) | |
20 redraw! | |
21 | |
22 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec | |
23 let msg = 'ttymouse=' .. ttymouse_val | |
24 exe 'set ttymouse=' .. ttymouse_val | |
25 | |
26 " select multiple characters within a line | |
27 let @* = '' | |
28 call MouseRightClick(1, 1) | |
29 call MouseRightRelease(1, 1) | |
30 let keys = ":" | |
31 let keys ..= MouseLeftClickCode(1, 6) | |
32 let keys ..= MouseLeftDragCode(1, 10) | |
33 let keys ..= MouseLeftReleaseCode(1, 10) | |
34 let keys ..= "\<C-Y>\<CR>" | |
35 call feedkeys(keys, "x") | |
36 call assert_equal("wo th", @*, msg) | |
37 | |
38 " select multiple characters including the end of line | |
39 let @* = '' | |
40 call MouseRightClick(1, 1) | |
41 call MouseRightRelease(1, 1) | |
42 let keys = ":" | |
43 let keys ..= MouseLeftClickCode(1, 11) | |
44 let keys ..= MouseLeftDragCode(1, 16) | |
45 let keys ..= MouseLeftReleaseCode(1, 16) | |
46 let keys ..= "\<C-Y>\<CR>" | |
47 call feedkeys(keys, "x") | |
48 call assert_equal("ree\n", @*, msg) | |
49 | |
50 " extend a selection using right mouse click | |
51 let @* = '' | |
52 call MouseRightClick(1, 1) | |
53 call MouseRightRelease(1, 1) | |
54 set mousemodel=extend | |
55 let keys = ":" | |
56 let keys ..= MouseLeftClickCode(1, 2) | |
57 let keys ..= MouseLeftDragCode(1, 5) | |
58 let keys ..= MouseLeftReleaseCode(1, 5) | |
59 let keys ..= MouseRightClickCode(1, 10) | |
60 let keys ..= MouseRightReleaseCode(1, 10) | |
61 let keys ..= "\<C-Y>\<CR>" | |
62 call feedkeys(keys, "x") | |
63 call assert_equal("ne two th", @*, msg) | |
64 set mousemodel& | |
65 | |
66 " extend a selection backwards using right mouse click | |
67 let @* = '' | |
68 call MouseRightClick(1, 1) | |
69 call MouseRightRelease(1, 1) | |
70 set mousemodel=extend | |
71 let keys = ":" | |
72 let keys ..= MouseLeftClickCode(1, 7) | |
73 let keys ..= MouseLeftDragCode(1, 11) | |
74 let keys ..= MouseLeftReleaseCode(1, 11) | |
75 let keys ..= MouseRightClickCode(1, 3) | |
76 let keys ..= MouseRightReleaseCode(1, 3) | |
77 let keys ..= "\<C-Y>\<CR>" | |
78 call feedkeys(keys, "x") | |
79 call assert_equal("e two thr", @*, msg) | |
80 set mousemodel& | |
81 | |
82 " select multiple characters within a line backwards | |
83 let @* = '' | |
84 call MouseRightClick(1, 1) | |
85 call MouseRightRelease(1, 1) | |
86 let keys = ":" | |
87 let keys ..= MouseLeftClickCode(1, 9) | |
88 let keys ..= MouseLeftDragCode(1, 3) | |
89 let keys ..= MouseLeftReleaseCode(1, 3) | |
90 let keys ..= "\<C-Y>\<CR>" | |
91 call feedkeys(keys, "x") | |
92 call assert_equal("e two t", @*, msg) | |
93 | |
94 " select multiple characters across lines with (end row > start row) and | |
95 " (end column < start column) | |
96 let @* = '' | |
97 call MouseRightClick(1, 1) | |
98 call MouseRightRelease(1, 1) | |
99 let keys = ":" | |
100 let keys ..= MouseLeftClickCode(1, 9) | |
101 let keys ..= MouseLeftDragCode(2, 3) | |
102 let keys ..= MouseLeftReleaseCode(2, 3) | |
103 let keys ..= "\<C-Y>\<CR>" | |
104 call feedkeys(keys, "x") | |
105 call assert_equal("three\nfoo", @*, msg) | |
106 | |
107 " select multiple characters across lines with (end row > start row) and | |
108 " (end column > start column) | |
109 let @* = '' | |
110 call MouseRightClick(1, 1) | |
111 call MouseRightRelease(1, 1) | |
112 let keys = ":" | |
113 let keys ..= MouseLeftClickCode(1, 4) | |
114 let keys ..= MouseLeftDragCode(2, 8) | |
115 let keys ..= MouseLeftReleaseCode(2, 8) | |
116 let keys ..= "\<C-Y>\<CR>" | |
117 call feedkeys(keys, "x") | |
118 call assert_equal(" two three\nfoo bar ", @*, msg) | |
119 | |
120 " select multiple characters across lines with (end row < start row) and | |
121 " (end column < start column) | |
122 let @* = '' | |
123 call MouseRightClick(1, 1) | |
124 call MouseRightRelease(1, 1) | |
125 let keys = ":" | |
126 let keys ..= MouseLeftClickCode(2, 7) | |
127 let keys ..= MouseLeftDragCode(1, 5) | |
128 let keys ..= MouseLeftReleaseCode(1, 5) | |
129 let keys ..= "\<C-Y>\<CR>" | |
130 call feedkeys(keys, "x") | |
131 call assert_equal("two three\nfoo bar", @*, msg) | |
132 | |
133 " select multiple characters across lines with (end row < start row) and | |
134 " (end column > start column) | |
135 let @* = '' | |
136 call MouseRightClick(1, 1) | |
137 call MouseRightRelease(1, 1) | |
138 let keys = ":" | |
139 let keys ..= MouseLeftClickCode(2, 11) | |
140 let keys ..= MouseLeftDragCode(1, 13) | |
141 let keys ..= MouseLeftReleaseCode(1, 13) | |
142 let keys ..= "\<C-Y>\<CR>" | |
143 call feedkeys(keys, "x") | |
144 call assert_equal("e\nfoo bar baz", @*, msg) | |
145 | |
146 " select multiple characters across lines with (end row < start row) and | |
147 " the end column is greater than the line length | |
148 let @* = '' | |
149 call MouseRightClick(1, 1) | |
150 call MouseRightRelease(1, 1) | |
151 let keys = ":" | |
152 let keys ..= MouseLeftClickCode(2, 7) | |
153 let keys ..= MouseLeftDragCode(1, 16) | |
154 let keys ..= MouseLeftReleaseCode(1, 16) | |
155 let keys ..= "\<C-Y>\<CR>" | |
156 call feedkeys(keys, "x") | |
157 call assert_equal("\nfoo bar", @*, msg) | |
158 | |
159 " select multiple characters across lines with start/end row and start/end | |
160 " column outside the lines in the buffer | |
161 let @* = '' | |
162 call MouseRightClick(1, 1) | |
163 call MouseRightRelease(1, 1) | |
164 let keys = ":" | |
165 let keys ..= MouseLeftClickCode(4, 3) | |
166 let keys ..= MouseLeftDragCode(3, 2) | |
167 let keys ..= MouseLeftReleaseCode(3, 2) | |
168 let keys ..= "\<C-Y>\<CR>" | |
169 call feedkeys(keys, "x") | |
170 call assert_equal("\n~ ", @*, msg) | |
171 | |
172 " change selection using right mouse click within the selected text | |
173 let @* = '' | |
174 call MouseRightClick(1, 1) | |
175 call MouseRightRelease(1, 1) | |
176 set mousemodel=extend | |
177 let keys = ":" | |
178 let keys ..= MouseLeftClickCode(1, 5) | |
179 let keys ..= MouseLeftDragCode(1, 13) | |
180 let keys ..= MouseLeftReleaseCode(1, 13) | |
181 let keys ..= MouseRightClickCode(1, 7) | |
182 let keys ..= MouseRightReleaseCode(1, 7) | |
183 let keys ..= MouseRightClickCode(1, 11) | |
184 let keys ..= MouseRightReleaseCode(1, 11) | |
185 let keys ..= "\<C-Y>\<CR>" | |
186 call feedkeys(keys, "x") | |
187 call assert_equal("o thr", @*, msg) | |
188 set mousemodel& | |
189 | |
190 " select text multiple times at different places | |
191 let @* = '' | |
192 call MouseRightClick(1, 1) | |
193 call MouseRightRelease(1, 1) | |
194 let keys = ":" | |
195 let keys ..= MouseLeftClickCode(1, 3) | |
196 let keys ..= MouseLeftDragCode(1, 5) | |
197 let keys ..= MouseLeftReleaseCode(1, 5) | |
198 let keys ..= MouseLeftClickCode(2, 7) | |
199 let keys ..= MouseLeftDragCode(2, 9) | |
200 let keys ..= MouseLeftReleaseCode(2, 9) | |
201 let keys ..= "\<C-Y>\<CR>" | |
202 call feedkeys(keys, "x") | |
203 call assert_equal("r b", @*, msg) | |
204 | |
205 " Test for 'clipboard' set to 'autoselectml' to automatically copy the | |
206 " modeless selection to the clipboard | |
207 set clipboard=autoselectml | |
208 let @* = '' | |
209 let keys = ":" | |
210 let keys ..= MouseLeftClickCode(2, 5) | |
211 let keys ..= MouseLeftDragCode(2, 7) | |
212 let keys ..= MouseLeftReleaseCode(2, 7) | |
213 let keys ..= "\<CR>" | |
214 call feedkeys(keys, "x") | |
215 call assert_equal("bar", @*) | |
216 set clipboard& | |
217 | |
218 " quadruple click should start characterwise selectmode | |
219 let @* = '' | |
220 call MouseRightClick(1, 1) | |
221 call MouseRightRelease(1, 1) | |
222 let keys = ":" | |
223 let keys ..= MouseLeftClickCode(1, 10) | |
224 let keys ..= MouseLeftReleaseCode(1, 10) | |
225 let keys ..= MouseLeftClickCode(1, 10) | |
226 let keys ..= MouseLeftReleaseCode(1, 10) | |
227 let keys ..= MouseLeftClickCode(1, 10) | |
228 let keys ..= MouseLeftReleaseCode(1, 10) | |
229 let keys ..= MouseLeftClickCode(1, 10) | |
230 let keys ..= MouseLeftDragCode(1, 11) | |
231 let keys ..= MouseLeftReleaseCode(1, 11) | |
232 let keys ..= "\<C-Y>\<CR>" | |
233 call feedkeys(keys, "x") | |
234 call assert_equal("hree", @*, msg) | |
235 endfor | |
236 | |
237 let &mouse = save_mouse | |
238 let &term = save_term | |
239 let &ttymouse = save_ttymouse | |
240 set mousetime& | |
241 call test_override('no_query_mouse', 0) | |
242 close! | |
243 endfunc | |
244 | |
245 " Test for modeless word selection (double click) | |
246 func Test_modeless_word_selection() | |
247 CheckFeature clipboard_working | |
248 let save_mouse = &mouse | |
249 let save_term = &term | |
250 let save_ttymouse = &ttymouse | |
251 call test_override('no_query_mouse', 1) | |
252 set mouse=a term=xterm mousetime=200 | |
253 new | |
254 call setline(1, ['one two three', 'foo bar baz']) | |
255 redraw! | |
256 | |
257 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec | |
258 let msg = 'ttymouse=' .. ttymouse_val | |
259 exe 'set ttymouse=' .. ttymouse_val | |
260 | |
261 " select multiple words within a line | |
262 let @* = '' | |
263 call MouseRightClick(1, 1) | |
264 call MouseRightRelease(1, 1) | |
265 let keys = ":" | |
266 let keys ..= MouseLeftClickCode(1, 6) | |
267 let keys ..= MouseLeftReleaseCode(1, 6) | |
268 let keys ..= MouseLeftClickCode(1, 6) | |
269 let keys ..= MouseLeftDragCode(1, 10) | |
270 let keys ..= MouseLeftReleaseCode(1, 10) | |
271 let keys ..= "\<C-Y>\<CR>" | |
272 call feedkeys(keys, "x") | |
273 call assert_equal("two three", @*, msg) | |
274 | |
275 " select a single word | |
276 let @* = '' | |
277 call MouseRightClick(1, 1) | |
278 call MouseRightRelease(1, 1) | |
279 let keys = ":" | |
280 let keys ..= MouseLeftClickCode(2, 6) | |
281 let keys ..= MouseLeftReleaseCode(2, 6) | |
282 let keys ..= MouseLeftClickCode(2, 6) | |
283 let keys ..= MouseLeftReleaseCode(2, 6) | |
284 let keys ..= "\<C-Y>\<CR>" | |
285 call feedkeys(keys, "x") | |
286 call assert_equal("bar", @*, msg) | |
287 | |
288 " select multiple words backwards within a line | |
289 let @* = '' | |
290 call MouseRightClick(1, 1) | |
291 call MouseRightRelease(1, 1) | |
292 let keys = ":" | |
293 let keys ..= MouseLeftClickCode(2, 11) | |
294 let keys ..= MouseLeftReleaseCode(2, 11) | |
295 let keys ..= MouseLeftClickCode(2, 11) | |
296 let keys ..= MouseLeftDragCode(2, 7) | |
297 let keys ..= MouseLeftReleaseCode(2, 7) | |
298 let keys ..= "\<C-Y>\<CR>" | |
299 call feedkeys(keys, "x") | |
300 call assert_equal("bar baz", @*, msg) | |
301 | |
302 " select multiple words backwards across lines | |
303 let @* = '' | |
304 call MouseRightClick(1, 1) | |
305 call MouseRightRelease(1, 1) | |
306 let keys = ":" | |
307 let keys ..= MouseLeftClickCode(2, 7) | |
308 let keys ..= MouseLeftReleaseCode(2, 7) | |
309 let keys ..= MouseLeftClickCode(2, 7) | |
310 let keys ..= MouseLeftDragCode(1, 6) | |
311 let keys ..= MouseLeftReleaseCode(1, 6) | |
312 let keys ..= "\<C-Y>\<CR>" | |
313 call feedkeys(keys, "x") | |
314 call assert_equal("two three\nfoo bar", @*, msg) | |
315 endfor | |
316 | |
317 let &mouse = save_mouse | |
318 let &term = save_term | |
319 let &ttymouse = save_ttymouse | |
320 set mousetime& | |
321 call test_override('no_query_mouse', 0) | |
322 close! | |
323 endfunc | |
324 | |
325 " Test for modeless line selection (triple click) | |
326 func Test_modeless_line_selection() | |
327 CheckFeature clipboard_working | |
328 let save_mouse = &mouse | |
329 let save_term = &term | |
330 let save_ttymouse = &ttymouse | |
331 call test_override('no_query_mouse', 1) | |
332 set mouse=a term=xterm mousetime=200 | |
333 new | |
334 call setline(1, ['one two three', 'foo bar baz']) | |
335 redraw! | |
336 | |
337 for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec | |
338 let msg = 'ttymouse=' .. ttymouse_val | |
339 exe 'set ttymouse=' .. ttymouse_val | |
340 | |
341 " select single line | |
342 let @* = '' | |
343 call MouseRightClick(1, 1) | |
344 call MouseRightRelease(1, 1) | |
345 let keys = ":" | |
346 let keys ..= MouseLeftClickCode(2, 6) | |
347 let keys ..= MouseLeftReleaseCode(2, 6) | |
348 let keys ..= MouseLeftClickCode(2, 6) | |
349 let keys ..= MouseLeftReleaseCode(2, 6) | |
350 let keys ..= MouseLeftClickCode(2, 6) | |
351 let keys ..= MouseLeftReleaseCode(2, 6) | |
352 let keys ..= "\<C-Y>\<CR>" | |
353 call feedkeys(keys, "x") | |
354 call assert_equal("foo bar baz\n", @*, msg) | |
355 | |
356 " select multiple lines | |
357 let @* = '' | |
358 call MouseRightClick(1, 1) | |
359 call MouseRightRelease(1, 1) | |
360 let keys = ":" | |
361 let keys ..= MouseLeftClickCode(1, 6) | |
362 let keys ..= MouseLeftReleaseCode(1, 6) | |
363 let keys ..= MouseLeftClickCode(1, 6) | |
364 let keys ..= MouseLeftReleaseCode(1, 6) | |
365 let keys ..= MouseLeftClickCode(1, 6) | |
366 let keys ..= MouseLeftDragCode(2, 12) | |
367 let keys ..= MouseLeftReleaseCode(2, 12) | |
368 let keys ..= "\<C-Y>\<CR>" | |
369 call feedkeys(keys, "x") | |
370 call assert_equal("one two three\nfoo bar baz\n", @*, msg) | |
371 | |
372 " select multiple lines backwards | |
373 let @* = '' | |
374 call MouseRightClick(1, 1) | |
375 call MouseRightRelease(1, 1) | |
376 let keys = ":" | |
377 let keys ..= MouseLeftClickCode(2, 10) | |
378 let keys ..= MouseLeftReleaseCode(2, 10) | |
379 let keys ..= MouseLeftClickCode(2, 10) | |
380 let keys ..= MouseLeftReleaseCode(2, 10) | |
381 let keys ..= MouseLeftClickCode(2, 10) | |
382 let keys ..= MouseLeftDragCode(1, 3) | |
383 let keys ..= MouseLeftReleaseCode(1, 3) | |
384 let keys ..= "\<C-Y>\<CR>" | |
385 call feedkeys(keys, "x") | |
386 call assert_equal("one two three\nfoo bar baz\n", @*, msg) | |
387 endfor | |
388 | |
389 let &mouse = save_mouse | |
390 let &term = save_term | |
391 let &ttymouse = save_ttymouse | |
392 set mousetime& | |
393 call test_override('no_query_mouse', 0) | |
394 close! | |
395 endfunc | |
396 | |
397 " vim: shiftwidth=2 sts=2 expandtab |