Skip to content

Commit 46dc4a2

Browse files
Merge pull request #22104 from unoplatform/copilot/fix-control-key-event
2 parents 32effbd + bf6d3a3 commit 46dc4a2

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using Uno.UI.RuntimeTests.Helpers;
4+
using Windows.System;
5+
6+
#if HAS_UNO
7+
namespace Uno.UI.RuntimeTests.Tests.Windows_System
8+
{
9+
[TestClass]
10+
[PlatformCondition(ConditionMode.Include, RuntimeTestPlatforms.Wasm)]
11+
public class Given_BrowserVirtualKeyHelper
12+
{
13+
[TestMethod]
14+
[RunsOnUIThread]
15+
public void When_FromCode_ControlLeft_Returns_Control()
16+
{
17+
var result = BrowserVirtualKeyHelper.FromCode("ControlLeft");
18+
Assert.AreEqual(VirtualKey.Control, result, "ControlLeft should map to VirtualKey.Control");
19+
}
20+
21+
[TestMethod]
22+
[RunsOnUIThread]
23+
public void When_FromCode_ControlRight_Returns_Control()
24+
{
25+
var result = BrowserVirtualKeyHelper.FromCode("ControlRight");
26+
Assert.AreEqual(VirtualKey.Control, result, "ControlRight should map to VirtualKey.Control");
27+
}
28+
29+
[TestMethod]
30+
[RunsOnUIThread]
31+
public void When_FromCode_ShiftLeft_Returns_Shift()
32+
{
33+
var result = BrowserVirtualKeyHelper.FromCode("ShiftLeft");
34+
Assert.AreEqual(VirtualKey.Shift, result, "ShiftLeft should map to VirtualKey.Shift");
35+
}
36+
37+
[TestMethod]
38+
[RunsOnUIThread]
39+
public void When_FromCode_ShiftRight_Returns_Shift()
40+
{
41+
var result = BrowserVirtualKeyHelper.FromCode("ShiftRight");
42+
Assert.AreEqual(VirtualKey.Shift, result, "ShiftRight should map to VirtualKey.Shift");
43+
}
44+
45+
[TestMethod]
46+
[RunsOnUIThread]
47+
public void When_FromCode_AltLeft_Returns_Menu()
48+
{
49+
var result = BrowserVirtualKeyHelper.FromCode("AltLeft");
50+
Assert.AreEqual(VirtualKey.Menu, result, "AltLeft should map to VirtualKey.Menu");
51+
}
52+
53+
[TestMethod]
54+
[RunsOnUIThread]
55+
public void When_FromCode_AltRight_Returns_Menu()
56+
{
57+
var result = BrowserVirtualKeyHelper.FromCode("AltRight");
58+
Assert.AreEqual(VirtualKey.Menu, result, "AltRight should map to VirtualKey.Menu");
59+
}
60+
61+
[TestMethod]
62+
[RunsOnUIThread]
63+
public void When_FromCode_MetaLeft_Returns_RightWindows()
64+
{
65+
// Note: The mapping appears swapped (MetaLeft->RightWindows, MetaRight->LeftWindows)
66+
// This is pre-existing behavior in BrowserVirtualKeyHelper.FromCode()
67+
var result = BrowserVirtualKeyHelper.FromCode("MetaLeft");
68+
Assert.AreEqual(VirtualKey.RightWindows, result, "MetaLeft currently maps to VirtualKey.RightWindows");
69+
}
70+
71+
[TestMethod]
72+
[RunsOnUIThread]
73+
public void When_FromCode_MetaRight_Returns_LeftWindows()
74+
{
75+
// Note: The mapping appears swapped (MetaLeft->RightWindows, MetaRight->LeftWindows)
76+
// This is pre-existing behavior in BrowserVirtualKeyHelper.FromCode()
77+
var result = BrowserVirtualKeyHelper.FromCode("MetaRight");
78+
Assert.AreEqual(VirtualKey.LeftWindows, result, "MetaRight currently maps to VirtualKey.LeftWindows");
79+
}
80+
81+
[TestMethod]
82+
[RunsOnUIThread]
83+
public void When_FromCode_Space_Returns_Space()
84+
{
85+
var result = BrowserVirtualKeyHelper.FromCode("Space");
86+
Assert.AreEqual(VirtualKey.Space, result, "Space should map to VirtualKey.Space");
87+
}
88+
89+
[TestMethod]
90+
[RunsOnUIThread]
91+
public void When_FromCode_KeyA_Returns_A()
92+
{
93+
var result = BrowserVirtualKeyHelper.FromCode("KeyA");
94+
Assert.AreEqual(VirtualKey.A, result, "KeyA should map to VirtualKey.A");
95+
}
96+
97+
[TestMethod]
98+
[RunsOnUIThread]
99+
public void When_FromCode_Digit0_Returns_Number0()
100+
{
101+
var result = BrowserVirtualKeyHelper.FromCode("Digit0");
102+
Assert.AreEqual(VirtualKey.Number0, result, "Digit0 should map to VirtualKey.Number0");
103+
}
104+
105+
[TestMethod]
106+
[RunsOnUIThread]
107+
public void When_FromCode_UnknownKey_Returns_None()
108+
{
109+
var result = BrowserVirtualKeyHelper.FromCode("UnknownKey123");
110+
Assert.AreEqual(VirtualKey.None, result, "Unknown key codes should map to VirtualKey.None");
111+
}
112+
}
113+
}
114+
#endif

src/Uno.UWP/System/BrowserVirtualKeyHelper.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ public static VirtualKey FromCode(string code)
290290
return VirtualKey.Shift; // NOT LeftShift
291291
case "ShiftLeft":
292292
return VirtualKey.Shift;
293+
case "ControlLeft":
294+
return VirtualKey.Control;
295+
case "ControlRight":
296+
return VirtualKey.Control;
293297
case "MetaRight":
294298
return VirtualKey.LeftWindows;
295299
case "MetaLeft":

0 commit comments

Comments
 (0)