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