Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / widget / tests / test_AltGr_key_events_in_web_content_on_windows.html
blobff89f8fdad66d3e782b020f0a12e05b70f11b70e
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Testing if AltGr keydown and keyup events are fired in web content on Windows</title>
5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
6 <script src="/tests/SimpleTest/EventUtils.js"></script>
7 <script src="/tests/SimpleTest/NativeKeyCodes.js"></script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
9 </head>
10 <body>
11 <div id="display">
12 <input id="input">
13 </div>
14 <div id="content" style="display: none">
15 </div>
16 <pre id="test">
17 </pre>
19 <script class="testbody" type="application/javascript">
20 SimpleTest.waitForExplicitFinish();
22 function checkEvent(aEvent, aExpectedEvents, aDescription) {
23 if (!aExpectedEvents.length) {
24 ok(false, `${aDescription}: no more expected events ` +
25 `(type: ${aEvent.type}, code: ${aEvent.code}, key: ${aEvent.key}, keyCode: ${aEvent.keyCode}`);
27 let expectedEvent = aExpectedEvents.shift();
28 for (let property in expectedEvent) {
29 is(aEvent[property], expectedEvent[property], `${aDescription}: ${property}`);
33 async function runAltGrKeyTest() {
34 return new Promise(resolve => {
35 let target = document.getElementById("input");
36 target.focus();
38 let events = [
39 { type: "keydown", code: "ControlLeft", key: "Control", keyCode: KeyboardEvent.DOM_VK_CONTROL },
40 { type: "keydown", code: "AltRight", key: "AltGraph", keyCode: KeyboardEvent.DOM_VK_ALT },
41 { type: "keyup", code: "ControlLeft", key: "Control", keyCode: KeyboardEvent.DOM_VK_CONTROL },
42 { type: "keyup", code: "AltRight", key: "AltGraph", keyCode: KeyboardEvent.DOM_VK_ALT },
44 function handleEvent(aEvent) {
45 checkEvent(aEvent, events, "runAltGrKeyTest");
46 if (aEvent.type === "keyup" && aEvent.code === "AltRight") {
47 is(events.length, 0, "runAltGrKeyTest: all expected events are fired");
48 SimpleTest.executeSoon(() => {
49 target.removeEventListener("keydown", handleEvent);
50 target.removeEventListener("keypress", handleEvent);
51 target.removeEventListener("keyup", handleEvent);
52 resolve();
53 });
56 target.addEventListener("keydown", handleEvent);
57 target.addEventListener("keypress", handleEvent);
58 target.addEventListener("keyup", handleEvent);
60 synthesizeNativeKey(KEYBOARD_LAYOUT_SPANISH, WIN_VK_RMENU, {},
61 "", "");
62 });
65 async function runEmulatingAltGrKeyTest() {
66 return new Promise(resolve => {
67 let target = document.getElementById("input");
68 target.focus();
70 let events = [
71 { type: "keydown", code: "ControlLeft", key: "Control", keyCode: KeyboardEvent.DOM_VK_CONTROL },
72 { type: "keydown", code: "AltLeft", key: "Alt", keyCode: KeyboardEvent.DOM_VK_ALT },
73 { type: "keyup", code: "AltLeft", key: "Alt", keyCode: KeyboardEvent.DOM_VK_ALT },
74 { type: "keyup", code: "ControlLeft", key: "Control", keyCode: KeyboardEvent.DOM_VK_CONTROL },
76 function handleEvent(aEvent) {
77 checkEvent(aEvent, events, "runEmulatingAltGrKeyTest");
78 if (aEvent.type === "keyup" && aEvent.code === "ControlLeft") {
79 is(events.length, 0, "runAltGrKeyTest: all expected events are fired");
80 SimpleTest.executeSoon(() => {
81 target.removeEventListener("keydown", handleEvent);
82 target.removeEventListener("keypress", handleEvent);
83 target.removeEventListener("keyup", handleEvent);
84 resolve();
85 });
88 target.addEventListener("keydown", handleEvent);
89 target.addEventListener("keypress", handleEvent);
90 target.addEventListener("keyup", handleEvent);
92 synthesizeNativeKey(KEYBOARD_LAYOUT_SPANISH, WIN_VK_LMENU, { ctrlKey: true },
93 "", "");
94 });
97 async function runTests() {
98 await runAltGrKeyTest();
99 await runEmulatingAltGrKeyTest();
100 SimpleTest.finish();
103 SimpleTest.waitForFocus(runTests);
104 </script>
105 </body>
106 </html>