Mercurial > vim
comparison src/testdir/test_mswin_event.vim @ 31674:edbadc330871 v9.0.1169
patch 9.0.1169: some key+modifier tests fail on some AppVeyor images
Commit: https://github.com/vim/vim/commit/566f76e6566ccc418b25d51f454d2cc509ca7f8a
Author: Christopher Plewright <chris@createng.com>
Date: Tue Jan 10 13:43:04 2023 +0000
patch 9.0.1169: some key+modifier tests fail on some AppVeyor images
Problem: Some key+modifier tests fail on some AppVeyor images.
Solution: Adjust the tests for key movements and fix the revealed bugs.
(Christopher Plewright, closes #11798)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 10 Jan 2023 14:45:07 +0100 |
parents | 238f424acc6c |
children | dbec60b8c253 |
comparison
equal
deleted
inserted
replaced
31673:7ae148439320 | 31674:edbadc330871 |
---|---|
153 \ 'DELETE' : 0x2E, | 153 \ 'DELETE' : 0x2E, |
154 \ 'BACK' : 0x08, | 154 \ 'BACK' : 0x08, |
155 \ 'ESCAPE' : 0x1B | 155 \ 'ESCAPE' : 0x1B |
156 \ } | 156 \ } |
157 | 157 |
158 let s:vim_MOD_MASK_SHIFT = 0x02 | 158 let s:MOD_MASK_SHIFT = 0x02 |
159 let s:vim_MOD_MASK_CTRL = 0x04 | 159 let s:MOD_MASK_CTRL = 0x04 |
160 let s:vim_MOD_MASK_ALT = 0x08 | 160 let s:MOD_MASK_ALT = 0x08 |
161 | 161 |
162 let s:vim_key_modifiers = [ | 162 let s:vim_key_modifiers = [ |
163 \ ["", 0, []], | 163 \ ["", 0, []], |
164 \ ["S-", 2, [s:VK.SHIFT]], | 164 \ ["S-", 2, [s:VK.LSHIFT]], |
165 \ ["C-", 4, [s:VK.CONTROL]], | 165 \ ["C-", 4, [s:VK.LCONTROL]], |
166 \ ["C-S-", 6, [s:VK.CONTROL, s:VK.SHIFT]], | 166 \ ["C-S-", 6, [s:VK.LCONTROL, s:VK.LSHIFT]], |
167 \ ["A-", 8, [s:VK.MENU]], | 167 \ ["A-", 8, [s:VK.LMENU]], |
168 \ ["A-S-", 10, [s:VK.MENU, s:VK.SHIFT]], | 168 \ ["A-S-", 10, [s:VK.LMENU, s:VK.LSHIFT]], |
169 \ ["A-C-", 12, [s:VK.MENU, s:VK.CONTROL]], | 169 \ ["A-C-", 12, [s:VK.LMENU, s:VK.LCONTROL]], |
170 \ ["A-C-S-", 14, [s:VK.MENU, s:VK.CONTROL, s:VK.SHIFT]], | 170 \ ["A-C-S-", 14, [s:VK.LMENU, s:VK.LCONTROL, s:VK.LSHIFT]], |
171 \] | 171 \] |
172 | 172 |
173 " Assuming Standard US PC Keyboard layout | 173 " Assuming Standard US PC Keyboard layout |
174 let s:test_ascii_key_chars = [ | 174 let s:test_ascii_key_chars = [ |
175 \ [[s:VK.SPACE], ' '], | 175 \ [[s:VK.SPACE], ' '], |
338 \ [[s:VK.ALT, s:VK.KEY_Y], 'ù'], | 338 \ [[s:VK.ALT, s:VK.KEY_Y], 'ù'], |
339 \ [[s:VK.ALT, s:VK.KEY_Z], 'ú'], | 339 \ [[s:VK.ALT, s:VK.KEY_Z], 'ú'], |
340 \ ] | 340 \ ] |
341 | 341 |
342 func s:LoopTestKeyArray(arr) | 342 func s:LoopTestKeyArray(arr) |
343 " flush out anything in the typeahead buffer | 343 " flush out the typeahead buffer |
344 while getchar(0) | 344 while getchar(0) |
345 endwhile | 345 endwhile |
346 | 346 |
347 for [kcodes, kstr] in a:arr | 347 for [kcodes, kstr] in a:arr |
348 " Send as a sequence of key presses. | 348 " Send as a sequence of key presses. |
362 " Send as a single key press with a modifers mask. | 362 " Send as a single key press with a modifers mask. |
363 let modifiers = 0 | 363 let modifiers = 0 |
364 let key = kcodes[0] | 364 let key = kcodes[0] |
365 for key in kcodes | 365 for key in kcodes |
366 if index([s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT], key) >= 0 | 366 if index([s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT], key) >= 0 |
367 let modifiers = modifiers + s:vim_MOD_MASK_SHIFT | 367 let modifiers = modifiers + s:MOD_MASK_SHIFT |
368 endif | 368 endif |
369 if index([s:VK.CONTROL, s:VK.LCONTROL, s:VK.RCONTROL], key) >= 0 | 369 if index([s:VK.CONTROL, s:VK.LCONTROL, s:VK.RCONTROL], key) >= 0 |
370 let modifiers = modifiers + s:vim_MOD_MASK_CTRL | 370 let modifiers = modifiers + s:MOD_MASK_CTRL |
371 endif | 371 endif |
372 if index([s:VK.ALT, s:VK.LALT, s:VK.RALT], key) >= 0 | 372 if index([s:VK.ALT, s:VK.LALT, s:VK.RALT], key) >= 0 |
373 let modifiers = modifiers + s:vim_MOD_MASK_ALT | 373 let modifiers = modifiers + s:MOD_MASK_ALT |
374 endif | 374 endif |
375 endfor | 375 endfor |
376 call SendKeyWithModifiers(key, modifiers) | 376 call SendKeyWithModifiers(key, modifiers) |
377 let ch = getcharstr(0) | 377 let ch = getcharstr(0) |
378 " need to deal a bit differently with the non-printable ascii chars < 0x20 | 378 " need to deal a bit differently with the non-printable ascii chars < 0x20 |
385 " the mod_mask is zero when no modifiers are used | 385 " the mod_mask is zero when no modifiers are used |
386 " and when the virtual termcap maps the character | 386 " and when the virtual termcap maps the character |
387 call assert_equal(0, mod_mask, $"key = {kstr}") | 387 call assert_equal(0, mod_mask, $"key = {kstr}") |
388 endfor | 388 endfor |
389 | 389 |
390 " flush out anything in the typeahead buffer | 390 " flush out the typeahead buffer |
391 while getchar(0) | 391 while getchar(0) |
392 endwhile | 392 endwhile |
393 | 393 |
394 endfunc | 394 endfunc |
395 | 395 |
396 " Test MS-Windows key events | 396 " Test MS-Windows key events |
397 func Test_mswin_key_event() | 397 func Test_mswin_event_character_keys() |
398 CheckMSWindows | 398 CheckMSWindows |
399 new | 399 new |
400 | 400 |
401 call s:LoopTestKeyArray(s:test_ascii_key_chars) | 401 call s:LoopTestKeyArray(s:test_ascii_key_chars) |
402 | 402 |
420 for modkey in [s:VK.ALT, s:VK.LALT, s:VK.RALT] | 420 for modkey in [s:VK.ALT, s:VK.LALT, s:VK.RALT] |
421 for kc in range(48, 57) | 421 for kc in range(48, 57) |
422 call SendKeyGroup([modkey, kc]) | 422 call SendKeyGroup([modkey, kc]) |
423 let ch = getchar(0) | 423 let ch = getchar(0) |
424 call assert_equal(kc+128, ch) | 424 call assert_equal(kc+128, ch) |
425 call SendKeyWithModifiers(kc, s:vim_MOD_MASK_ALT) | 425 call SendKeyWithModifiers(kc, s:MOD_MASK_ALT) |
426 let ch = getchar(0) | 426 let ch = getchar(0) |
427 call assert_equal(kc+128, ch) | 427 call assert_equal(kc+128, ch) |
428 endfor | 428 endfor |
429 endfor | 429 endfor |
430 | 430 |
449 for modkey in [s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT] | 449 for modkey in [s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT] |
450 for kc in range(65, 90) | 450 for kc in range(65, 90) |
451 call SendKeyGroup([modkey, kc]) | 451 call SendKeyGroup([modkey, kc]) |
452 let ch = getcharstr(0) | 452 let ch = getcharstr(0) |
453 call assert_equal(nr2char(kc), ch) | 453 call assert_equal(nr2char(kc), ch) |
454 call SendKeyWithModifiers(kc, s:vim_MOD_MASK_SHIFT) | 454 call SendKeyWithModifiers(kc, s:MOD_MASK_SHIFT) |
455 let ch = getcharstr(0) | 455 let ch = getcharstr(0) |
456 call assert_equal(nr2char(kc), ch) | 456 call assert_equal(nr2char(kc), ch) |
457 endfor | 457 endfor |
458 endfor | 458 endfor |
459 | 459 |
462 for modkey in [s:VK.CONTROL, s:VK.LCONTROL, s:VK.RCONTROL] | 462 for modkey in [s:VK.CONTROL, s:VK.LCONTROL, s:VK.RCONTROL] |
463 for kc in range(65, 90) | 463 for kc in range(65, 90) |
464 call SendKeyGroup([modkey, kc]) | 464 call SendKeyGroup([modkey, kc]) |
465 let ch = getcharstr(0) | 465 let ch = getcharstr(0) |
466 call assert_equal(nr2char(kc - 64), ch) | 466 call assert_equal(nr2char(kc - 64), ch) |
467 call SendKeyWithModifiers(kc, s:vim_MOD_MASK_CTRL) | 467 call SendKeyWithModifiers(kc, s:MOD_MASK_CTRL) |
468 let ch = getcharstr(0) | 468 let ch = getcharstr(0) |
469 call assert_equal(nr2char(kc - 64), ch) | 469 call assert_equal(nr2char(kc - 64), ch) |
470 endfor | 470 endfor |
471 endfor | 471 endfor |
472 | 472 |
478 for modkey in [s:VK.ALT, s:VK.LALT, s:VK.RALT] | 478 for modkey in [s:VK.ALT, s:VK.LALT, s:VK.RALT] |
479 for kc in range(65, 90) | 479 for kc in range(65, 90) |
480 call SendKeyGroup([modkey, kc]) | 480 call SendKeyGroup([modkey, kc]) |
481 let ch = getchar(0) | 481 let ch = getchar(0) |
482 call assert_equal(kc+160, ch) | 482 call assert_equal(kc+160, ch) |
483 call SendKeyWithModifiers(kc, s:vim_MOD_MASK_ALT) | 483 call SendKeyWithModifiers(kc, s:MOD_MASK_ALT) |
484 let ch = getchar(0) | 484 let ch = getchar(0) |
485 call assert_equal(kc+160, ch) | 485 call assert_equal(kc+160, ch) |
486 endfor | 486 endfor |
487 endfor | 487 endfor |
488 endif | 488 endif |
489 | 489 |
490 endfun | |
491 | |
490 " Test for Function Keys 'F1' to 'F12' | 492 " Test for Function Keys 'F1' to 'F12' |
491 " VK codes 112(0x70) - 123(0x7B) | 493 " VK codes 112(0x70) - 123(0x7B) |
492 " Also with ALL permutatios of modifiers; Shift, Ctrl & Alt | 494 " Also with ALL permutatios of modifiers; Shift, Ctrl & Alt |
493 " NOTE: Windows intercepts some of these keys in the GUI | 495 func Test_mswin_event_function_keys() |
494 if !has("gui_running") | 496 |
495 for [mod_str, vim_mod_mask, mod_keycodes] in s:vim_key_modifiers | 497 if has('gui_running') |
496 for n in range(1, 12) | 498 let g:test_is_flaky = 1 |
497 let kstr = $"{mod_str}F{n}" | 499 endif |
500 | |
501 " NOTE: Windows intercepts these combinations in the GUI | |
502 let gui_nogo = ["A-F1", "A-F2", "A-F3", "A-F4", "A-S-F4", "A-C-S-F4", | |
503 \ "A-F5", "A-F6", "A-F7", "A-F8", "A-C-F8", "A-F9", | |
504 \ "A-F10", "A-F11" , "A-C-F11", "A-C-F12"] | |
505 | |
506 " flush out the typeahead buffer | |
507 while getchar(0) | |
508 endwhile | |
509 | |
510 for [mod_str, vim_mod_mask, mod_keycodes] in s:vim_key_modifiers | |
511 for n in range(1, 12) | |
512 let expected_mod_mask = vim_mod_mask | |
513 let kstr = $"{mod_str}F{n}" | |
514 if !has('gui_running') || (has('gui_running') && n != 10 | |
515 \ && index(gui_nogo, kstr) == -1) | |
498 let keycode = eval('"\<' .. kstr .. '>"') | 516 let keycode = eval('"\<' .. kstr .. '>"') |
499 " flush out anything in the typeahead buffer | 517 " flush out the typeahead buffer |
500 while getchar(0) | 518 while getchar(0) |
501 endwhile | 519 endwhile |
502 " call SendKeyGroup(mod_keycodes + [111+n]) | |
503 call SendKeyWithModifiers(111+n, vim_mod_mask) | 520 call SendKeyWithModifiers(111+n, vim_mod_mask) |
504 let ch = getcharstr(0) | 521 let ch = getcharstr(0) |
505 let mod_mask = getcharmod() | 522 let mod_mask = getcharmod() |
506 call assert_equal(keycode, $"{ch}", $"key = {kstr}") | 523 call assert_equal(keycode, $"{ch}", $"key = {kstr}") |
507 " workaround for the virtual termcap maps changing the character instead | 524 " workaround for the virtual termcap maps changing the character |
508 " of sending Shift | 525 "instead of sending Shift |
509 for mod_key in mod_keycodes | 526 for mod_key in mod_keycodes |
510 if index([s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT], mod_key) >= 0 | 527 if index([s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT], mod_key) >= 0 |
511 let mod_mask = mod_mask + s:vim_MOD_MASK_SHIFT | 528 let expected_mod_mask -= s:MOD_MASK_SHIFT |
529 break | |
512 endif | 530 endif |
513 endfor | 531 endfor |
514 call assert_equal(vim_mod_mask, mod_mask, $"mod = {vim_mod_mask} for key = {kstr}") | 532 call assert_equal(expected_mod_mask, mod_mask, $"mod = {expected_mod_mask} for key = {kstr}") |
515 endfor | 533 endif |
516 endfor | 534 endfor |
517 endif | 535 endfor |
518 | 536 endfunc |
519 " Test for the various Ctrl and Shift key combinations. | 537 |
520 let keytests = [ | 538 func ExtractModifiers(mod_keycodes) |
521 \ [[s:VK.SHIFT, s:VK.PRIOR], "S-Pageup", 2], | 539 let has_shift = 0 |
522 \ [[s:VK.LSHIFT, s:VK.PRIOR], "S-Pageup", 2], | 540 let has_ctrl = 0 |
523 \ [[s:VK.RSHIFT, s:VK.PRIOR], "S-Pageup", 2], | 541 let has_alt = 0 |
524 \ [[s:VK.CONTROL, s:VK.PRIOR], "C-Pageup", 4], | 542 for mod_key in a:mod_keycodes |
525 \ [[s:VK.LCONTROL, s:VK.PRIOR], "C-Pageup", 4], | 543 if index([s:VK.SHIFT, s:VK.LSHIFT, s:VK.RSHIFT], mod_key) >= 0 |
526 \ [[s:VK.RCONTROL, s:VK.PRIOR], "C-Pageup", 4], | 544 let has_shift = 1 |
527 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.PRIOR], "C-S-Pageup", 6], | 545 endif |
528 \ [[s:VK.SHIFT, s:VK.NEXT], "S-PageDown", 2], | 546 if index([s:VK.CONTROL, s:VK.LCONTROL, s:VK.RCONTROL], mod_key) >= 0 |
529 \ [[s:VK.LSHIFT, s:VK.NEXT], "S-PageDown", 2], | 547 let has_ctrl = 1 |
530 \ [[s:VK.RSHIFT, s:VK.NEXT], "S-PageDown", 2], | 548 endif |
531 \ [[s:VK.CONTROL, s:VK.NEXT], "C-PageDown", 4], | 549 if index([s:VK.MENU, s:VK.LMENU, s:VK.RMENU], mod_key) >= 0 |
532 \ [[s:VK.LCONTROL, s:VK.NEXT], "C-PageDown", 4], | 550 let has_alt = 1 |
533 \ [[s:VK.RCONTROL, s:VK.NEXT], "C-PageDown", 4], | 551 endif |
534 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.NEXT], "C-S-PageDown", 6], | 552 endfor |
535 \ [[s:VK.SHIFT, s:VK.END], "S-End", 0], | 553 return [has_shift, has_ctrl, has_alt] |
536 \ [[s:VK.CONTROL, s:VK.END], "C-End", 0], | 554 endfunc |
537 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.END], "C-S-End", 4], | 555 |
538 \ [[s:VK.SHIFT, s:VK.HOME], "S-Home", 0], | 556 " Test for Movement Keys; |
539 \ [[s:VK.CONTROL, s:VK.HOME], "C-Home", 0], | 557 " VK_PRIOR 0x21, VK_NEXT 0x22, |
540 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.HOME], "C-S-Home", 4], | 558 " VK_END 0x23, VK_HOME 0x24, |
541 \ [[s:VK.SHIFT, s:VK.LEFT], "S-Left", 0], | 559 " VK_LEFT 0x25, VK_UP 0x26, |
542 \ [[s:VK.CONTROL, s:VK.LEFT], "C-Left", 0], | 560 " VK_RIGHT 0x27, VK_DOWN 0x28 |
543 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.LEFT], "C-S-Left", 4], | 561 " With ALL permutations of modifiers; none, Shift, Ctrl & Alt |
544 \ [[s:VK.SHIFT, s:VK.UP], "S-Up", 0], | 562 func Test_mswin_event_movement_keys() |
545 \ [[s:VK.CONTROL, s:VK.UP], "C-Up", 4], | 563 |
546 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.UP], "C-S-Up", 4], | 564 if has('gui_running') |
547 \ [[s:VK.SHIFT, s:VK.RIGHT], "S-Right", 0], | 565 let g:test_is_flaky = 1 |
548 \ [[s:VK.CONTROL, s:VK.RIGHT], "C-Right", 0], | 566 endif |
549 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.RIGHT], "C-S-Right", 4], | 567 |
550 \ [[s:VK.SHIFT, s:VK.DOWN], "S-Down", 0], | 568 let movement_keys = [ |
551 \ [[s:VK.CONTROL, s:VK.DOWN], "C-Down", 4], | 569 \ [s:VK.PRIOR, "PageUp"], |
552 \ [[s:VK.CONTROL, s:VK.SHIFT, s:VK.DOWN], "C-S-Down", 4], | 570 \ [s:VK.NEXT, "PageDown"], |
553 \ [[s:VK.CONTROL, s:VK.KEY_0], "C-0", 4], | 571 \ [s:VK.END, "End"], |
554 \ [[s:VK.CONTROL, s:VK.KEY_1], "C-1", 4], | 572 \ [s:VK.HOME, "Home"], |
555 \ [[s:VK.CONTROL, s:VK.KEY_2], "C-@", 0], | 573 \ [s:VK.LEFT, "Left"], |
556 \ [[s:VK.CONTROL, s:VK.KEY_3], "C-3", 4], | 574 \ [s:VK.UP, "Up"], |
557 \ [[s:VK.CONTROL, s:VK.KEY_4], "C-4", 4], | 575 \ [s:VK.RIGHT, "Right"], |
558 \ [[s:VK.CONTROL, s:VK.KEY_5], "C-5", 4], | 576 \ [s:VK.DOWN, "Down"], |
559 \ [[s:VK.CONTROL, s:VK.KEY_6], "C-^", 0], | |
560 \ [[s:VK.CONTROL, s:VK.KEY_7], "C-7", 4], | |
561 \ [[s:VK.CONTROL, s:VK.KEY_8], "C-8", 4], | |
562 \ [[s:VK.CONTROL, s:VK.KEY_9], "C-9", 4], | |
563 \ [[s:VK.CONTROL, s:VK.NUMPAD0], "C-0", 4], | |
564 \ [[s:VK.CONTROL, s:VK.NUMPAD1], "C-1", 4], | |
565 \ [[s:VK.CONTROL, s:VK.NUMPAD2], "C-2", 4], | |
566 \ [[s:VK.CONTROL, s:VK.NUMPAD3], "C-3", 4], | |
567 \ [[s:VK.CONTROL, s:VK.NUMPAD4], "C-4", 4], | |
568 \ [[s:VK.CONTROL, s:VK.NUMPAD5], "C-5", 4], | |
569 \ [[s:VK.CONTROL, s:VK.NUMPAD6], "C-6", 4], | |
570 \ [[s:VK.CONTROL, s:VK.NUMPAD7], "C-7", 4], | |
571 \ [[s:VK.CONTROL, s:VK.NUMPAD8], "C-8", 4], | |
572 \ [[s:VK.CONTROL, s:VK.NUMPAD9], "C-9", 4], | |
573 \ [[s:VK.CONTROL, s:VK.MULTIPLY], "C-*", 4], | |
574 \ [[s:VK.CONTROL, s:VK.ADD], "C-+", 4], | |
575 \ [[s:VK.CONTROL, s:VK.SUBTRACT], "C--", 4], | |
576 \ [[s:VK.CONTROL, s:VK.OEM_MINUS], "C-_", 0] | |
577 \ ] | 577 \ ] |
578 | 578 |
579 for [kcodes, kstr, kmod] in keytests | 579 " flush out the typeahead buffer |
580 call SendKeyGroup(kcodes) | 580 while getchar(0) |
581 let ch = getcharstr(0) | 581 endwhile |
582 let mod = getcharmod() | 582 |
583 let keycode = eval('"\<' .. kstr .. '>"') | 583 for [mod_str, vim_mod_mask, mod_keycodes] in s:vim_key_modifiers |
584 call assert_equal(keycode, ch, $"key = {kstr}") | 584 for [kcode, kname] in movement_keys |
585 call assert_equal(kmod, mod, $"mod = {kmod} key = {kstr}") | 585 let exp_mod_mask = vim_mod_mask |
586 let kstr = $"{mod_str}{kname}" | |
587 let chstr_eval = eval('"\<' .. kstr .. '>"') | |
588 | |
589 " flush out the typeahead buffer | |
590 while getchar(0) | |
591 endwhile | |
592 execute 'call feedkeys("\<' .. kstr .. '>")' | |
593 let chstr_fk = getcharstr(0) | |
594 call assert_equal(chstr_eval, chstr_fk, $"feedkeys = <{kstr}>") | |
595 | |
596 " flush out the typeahead buffer | |
597 while getchar(0) | |
598 endwhile | |
599 call SendKey(kcode) | |
600 let chstr_alone = getcharstr(0) | |
601 let chstr_alone_end = chstr_alone[len(chstr_alone)-2:len(chstr_alone)-1] | |
602 | |
603 " flush out the typeahead buffer | |
604 while getchar(0) | |
605 endwhile | |
606 call SendKeyGroup(mod_keycodes + [kcode]) | |
607 let chstr_mswin = getcharstr(0) | |
608 let chstr_mswin_end = chstr_mswin[len(chstr_mswin)-2:len(chstr_mswin)-1] | |
609 let mod_mask = getcharmod() | |
610 | |
611 " The virtual termcap maps may** change the character and either; | |
612 " - remove the Shift modifier, or | |
613 " - remove the Ctrl modifier if the Shift modifier was not removed. | |
614 let [has_shift, has_ctrl, has_alt] = ExtractModifiers(mod_keycodes) | |
615 if chstr_alone_end != chstr_mswin_end | |
616 if has_shift != 0 | |
617 let exp_mod_mask -= s:MOD_MASK_SHIFT | |
618 elseif has_ctrl != 0 | |
619 let exp_mod_mask -= s:MOD_MASK_CTRL | |
620 endif | |
621 endif | |
622 " **Note: The appveyor Windows GUI test environments, from VS2017 on, | |
623 " consistently intercepts the Shift modifier WITHOUT changing the | |
624 " MOVEMENT character. This issue does not happen in any github actions | |
625 " CI Windows test environments. Attempted to reproduce this manually | |
626 " on Windows versions; 7, 8.1, 10, 11, Server 2019 and Server 2022, but | |
627 " the issue did not occur on any of those environments. | |
628 " Below is a workaround for the issue. | |
629 if has('gui_running') && has_shift != 0 | |
630 if exp_mod_mask != mod_mask && chstr_eval != chstr_mswin | |
631 let kstr_sub = substitute(kstr, "S-", "", "") | |
632 let chstr_eval = eval('"\<' .. kstr_sub .. '>"') | |
633 if exp_mod_mask - s:MOD_MASK_SHIFT == mod_mask | |
634 let exp_mod_mask -= s:MOD_MASK_SHIFT | |
635 elseif has_ctrl != 0 && exp_mod_mask - s:MOD_MASK_CTRL == mod_mask | |
636 let exp_mod_mask -= s:MOD_MASK_CTRL | |
637 endif | |
638 endif | |
639 endif | |
640 call assert_equal(chstr_eval, chstr_mswin, $"key = {kstr}") | |
641 call assert_equal(exp_mod_mask, mod_mask, $"mod_mask for key = {kstr}") | |
642 endfor | |
586 endfor | 643 endfor |
587 | 644 |
588 bw! | 645 bw! |
589 endfunc | 646 endfunc |
590 | 647 |
626 imapclear | 683 imapclear |
627 bw! | 684 bw! |
628 endfunc | 685 endfunc |
629 | 686 |
630 " Test MS-Windows mouse events | 687 " Test MS-Windows mouse events |
631 func Test_mswin_mouse_event() | 688 func Test_mswin_event_mouse() |
632 CheckMSWindows | 689 CheckMSWindows |
633 new | 690 new |
634 | 691 |
635 set mousemodel=extend | 692 set mousemodel=extend |
636 call test_override('no_query_mouse', 1) | 693 call test_override('no_query_mouse', 1) |
938 call assert_fails("call test_mswin_event('key', {'keycode': 0x41})", 'E417:') | 995 call assert_fails("call test_mswin_event('key', {'keycode': 0x41})", 'E417:') |
939 call assert_fails("call test_mswin_event('key', {'event': 'keydown'})", 'E1291:') | 996 call assert_fails("call test_mswin_event('key', {'event': 'keydown'})", 'E1291:') |
940 | 997 |
941 call assert_fails("sandbox call test_mswin_event('key', {'event': 'keydown', 'keycode': 61 })", 'E48:') | 998 call assert_fails("sandbox call test_mswin_event('key', {'event': 'keydown', 'keycode': 61 })", 'E48:') |
942 | 999 |
943 " flush out anything in the typeahead buffer | 1000 " flush out the typeahead buffer |
944 while getchar(0) | 1001 while getchar(0) |
945 endwhile | 1002 endwhile |
946 endfunc | 1003 endfunc |
947 | 1004 |
948 | 1005 |