@@ -1007,6 +1007,55 @@ describe('@lumino/commands', () => {
1007
1007
expect ( called ) . to . equal ( false ) ;
1008
1008
document . body . removeEventListener ( 'keydown' , keydown ) ;
1009
1009
} ) ;
1010
+
1011
+ it ( 'should ignore modifier keys pressed in the middle of key sequence' , ( ) => {
1012
+ let count = 0 ;
1013
+ registry . addCommand ( 'test' , {
1014
+ execute : ( ) => {
1015
+ count ++ ;
1016
+ }
1017
+ } ) ;
1018
+ registry . addKeyBinding ( {
1019
+ keys : [ 'Ctrl K' , 'Ctrl L' ] ,
1020
+ selector : `#${ elem . id } ` ,
1021
+ command : 'test'
1022
+ } ) ;
1023
+ let eventK = generate ( 'keydown' , { keyCode : 75 , ctrlKey : true } ) ;
1024
+ let eventCtrl = generate ( 'keydown' , { keyCode : 17 , ctrlKey : true } ) ;
1025
+ let eventL = generate ( 'keydown' , { keyCode : 76 , ctrlKey : true } ) ;
1026
+ elem . dispatchEvent ( eventK ) ;
1027
+ expect ( count ) . to . equal ( 0 ) ;
1028
+ elem . dispatchEvent ( eventCtrl ) ; // user presses Ctrl again - this should not break the sequence
1029
+ expect ( count ) . to . equal ( 0 ) ;
1030
+ elem . dispatchEvent ( eventL ) ;
1031
+ expect ( count ) . to . equal ( 1 ) ;
1032
+ } ) ;
1033
+
1034
+ it ( 'should process key sequences that use different modifier keys' , ( ) => {
1035
+ let count = 0 ;
1036
+ registry . addCommand ( 'test' , {
1037
+ execute : ( ) => {
1038
+ count ++ ;
1039
+ }
1040
+ } ) ;
1041
+ registry . addKeyBinding ( {
1042
+ keys : [ 'Shift K' , 'Ctrl L' ] ,
1043
+ selector : `#${ elem . id } ` ,
1044
+ command : 'test'
1045
+ } ) ;
1046
+ let eventShift = generate ( 'keydown' , { keyCode : 16 , shiftlKey : true } ) ;
1047
+ let eventK = generate ( 'keydown' , { keyCode : 75 , shiftKey : true } ) ;
1048
+ let eventCtrl = generate ( 'keydown' , { keyCode : 17 , ctrlKey : true } ) ;
1049
+ let eventL = generate ( 'keydown' , { keyCode : 76 , ctrlKey : true } ) ;
1050
+ elem . dispatchEvent ( eventShift ) ;
1051
+ expect ( count ) . to . equal ( 0 ) ;
1052
+ elem . dispatchEvent ( eventK ) ;
1053
+ expect ( count ) . to . equal ( 0 ) ;
1054
+ elem . dispatchEvent ( eventCtrl ) ;
1055
+ expect ( count ) . to . equal ( 0 ) ;
1056
+ elem . dispatchEvent ( eventL ) ;
1057
+ expect ( count ) . to . equal ( 1 ) ;
1058
+ } ) ;
1010
1059
} ) ;
1011
1060
1012
1061
describe ( '.parseKeystroke()' , ( ) => {
@@ -1085,6 +1134,14 @@ describe('@lumino/commands', () => {
1085
1134
) ;
1086
1135
expect ( keystroke ) . to . equal ( '' ) ;
1087
1136
} ) ;
1137
+
1138
+ it ( 'should return nothing for keys that are marked as modifier in keyboard layout' , ( ) => {
1139
+ let event = generate ( 'keydown' , { keyCode : 17 , ctrlKey : true } ) ;
1140
+ let keystroke = CommandRegistry . keystrokeForKeydownEvent (
1141
+ event as KeyboardEvent
1142
+ ) ;
1143
+ expect ( keystroke ) . to . equal ( '' ) ;
1144
+ } ) ;
1088
1145
} ) ;
1089
1146
} ) ;
1090
1147
} ) ;
0 commit comments