1" Test for modeless selection 2 3" This only works for Unix in a terminal 4source check.vim 5CheckNotGui 6CheckUnix 7 8source mouse.vim 9 10" Test for modeless characterwise selection (single click) 11func 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! 243endfunc 244 245" Test for modeless word selection (double click) 246func 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! 323endfunc 324 325" Test for modeless line selection (triple click) 326func 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! 395endfunc 396 397" vim: shiftwidth=2 sts=2 expandtab 398