@@ -51,8 +51,12 @@ public async Task MapsKeyboardTextMediaWindowAndPingCommands()
5151 Assert . Equal (
5252 [
5353 "pressKey:Meta" ,
54- "pressShortcut:Meta" ,
55- "pressShortcut:Ctrl+C" ,
54+ "setKeyDown:Meta:True" ,
55+ "setKeyDown:Meta:False" ,
56+ "setKeyDown:Ctrl:True" ,
57+ "setKeyDown:C:True" ,
58+ "setKeyDown:C:False" ,
59+ "setKeyDown:Ctrl:False" ,
5660 "typeText:Hello" ,
5761 "mediaControl:playPause" ,
5862 "controlWindow:switchNext"
@@ -61,6 +65,59 @@ public async Task MapsKeyboardTextMediaWindowAndPingCommands()
6165 Assert . Equal ( 7 , overlay . HideCount ) ;
6266 }
6367
68+ [ Fact ]
69+ public async Task KeyboardShortcutsUseTemporaryKeyDownAndUp ( )
70+ {
71+ FakeInputAdapter adapter = new ( ) ;
72+ DesktopCommandExecutor executor = new ( adapter ) ;
73+
74+ await executor . ExecuteAsync ( Command ( "keyboard.shortcut" , new { keys = new [ ] { "Ctrl" , "C" } } ) ) ;
75+
76+ Assert . Equal (
77+ [
78+ "setKeyDown:Ctrl:True" ,
79+ "setKeyDown:C:True" ,
80+ "setKeyDown:C:False" ,
81+ "setKeyDown:Ctrl:False"
82+ ] ,
83+ adapter . Calls ) ;
84+ }
85+
86+ [ Fact ]
87+ public async Task KeyboardShortcutsDoNotReleaseHeldModifiers ( )
88+ {
89+ FakeInputAdapter adapter = new ( ) ;
90+ FakeModifierOverlay modifierOverlay = new ( ) ;
91+ DesktopCommandExecutor executor = new ( adapter , modifierOverlay : modifierOverlay ) ;
92+
93+ await executor . ExecuteAsync ( Command ( "keyboard.modifierDown" , new { key = "Ctrl" } ) ) ;
94+ await executor . ExecuteAsync ( Command ( "keyboard.shortcut" , new { keys = new [ ] { "Ctrl" , "C" } } ) ) ;
95+ await executor . ExecuteAsync ( Command ( "keyboard.modifierDown" , new { key = "Shift" } ) ) ;
96+ await executor . ExecuteAsync ( Command ( "keyboard.shortcut" , new { keys = new [ ] { "Ctrl" , "Shift" , "Z" } } ) ) ;
97+ await executor . ExecuteAsync ( Command ( "keyboard.shortcut" , new { keys = new [ ] { "Ctrl" , "Alt" , "F" } } ) ) ;
98+
99+ Assert . Equal (
100+ [
101+ "setKeyDown:Ctrl:True" ,
102+ "setKeyDown:C:True" ,
103+ "setKeyDown:C:False" ,
104+ "setKeyDown:Shift:True" ,
105+ "setKeyDown:Z:True" ,
106+ "setKeyDown:Z:False" ,
107+ "setKeyDown:Alt:True" ,
108+ "setKeyDown:F:True" ,
109+ "setKeyDown:F:False" ,
110+ "setKeyDown:Alt:False"
111+ ] ,
112+ adapter . Calls ) ;
113+ Assert . Equal ( [ "Ctrl" , "Shift" ] , modifierOverlay . Changes . Last ( ) ) ;
114+
115+ await executor . ReleaseHeldInputsAsync ( ) ;
116+
117+ Assert . EndsWith ( "setKeyDown:Shift:False" , adapter . Calls [ ^ 2 ] ) ;
118+ Assert . EndsWith ( "setKeyDown:Ctrl:False" , adapter . Calls [ ^ 1 ] ) ;
119+ }
120+
64121 [ Fact ]
65122 public async Task StreamsTextCharactersKeysAndChunks ( )
66123 {
0 commit comments