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">
14 <div id=
"content" style=
"display: none">
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");
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);
56 target.addEventListener(
"keydown", handleEvent);
57 target.addEventListener(
"keypress", handleEvent);
58 target.addEventListener(
"keyup", handleEvent);
60 synthesizeNativeKey(KEYBOARD_LAYOUT_SPANISH, WIN_VK_RMENU, {},
65 async function runEmulatingAltGrKeyTest() {
66 return new Promise(resolve =
> {
67 let target = document.getElementById(
"input");
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);
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 },
97 async function runTests() {
98 await runAltGrKeyTest();
99 await runEmulatingAltGrKeyTest();
103 SimpleTest.waitForFocus(runTests);