summaryrefslogtreecommitdiffstats
path: root/widget/tests/test_keypress_event_with_alt_on_mac.html
diff options
context:
space:
mode:
Diffstat (limited to 'widget/tests/test_keypress_event_with_alt_on_mac.html')
-rw-r--r--widget/tests/test_keypress_event_with_alt_on_mac.html106
1 files changed, 106 insertions, 0 deletions
diff --git a/widget/tests/test_keypress_event_with_alt_on_mac.html b/widget/tests/test_keypress_event_with_alt_on_mac.html
new file mode 100644
index 0000000000..01d4100f97
--- /dev/null
+++ b/widget/tests/test_keypress_event_with_alt_on_mac.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing if keypress event is fired when alt key is pressed</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <script src="/tests/SimpleTest/NativeKeyCodes.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<div id="display">
+ <input id="input">
+ <input id="password" type="password">
+ <input id="readonly-input" readonly>
+ <textarea id="textarea"></textarea>
+ <textarea id="readonly-textarea" readonly></textarea>
+ <button id="button">button</button>
+</div>
+<div id="content" style="display: none">
+</div>
+<pre id="test">
+</pre>
+
+<script class="testbody" type="application/javascript">
+SimpleTest.waitForExplicitFinish();
+
+async function testNativeKey(aKeyboardLayout, aNativeKeyCode, aModifiers,
+ aChars, aUnmodifiedChars) {
+ // XXX Need to listen keyup event here because synthesizeNativeKey() does not
+ // guarantee that its callback will be called after "keypress" and "keyup".
+ let waitForKeyUp = new Promise(resolve => {
+ document.addEventListener("keyup", resolve, {once: true});
+ });
+ let keypress;
+ document.addEventListener("keypress", (aKeyPressEvent) => {
+ keypress = aKeyPressEvent;
+ }, {once: true});
+ synthesizeNativeKey(aKeyboardLayout, aNativeKeyCode, aModifiers, aChars, aUnmodifiedChars);
+ await waitForKeyUp;
+ return keypress;
+}
+
+async function runTests() {
+ const kTests =
+ [ { target: "input", isEditable: true },
+ { target: "password", isEditable: true },
+ { target: "readonly-input", isEditable: false },
+ { target: "textarea", isEditable: true },
+ { target: "readonly-textarea", isEditable: false },
+ { target: "button", isEditable: false } ];
+ for (const kTest of kTests) {
+ let element = document.getElementById(kTest.target);
+ element.focus();
+
+ const kDescription = kTest.target + ": ";
+
+ let keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {}, "a", "a");
+ ok(keypress,
+ kDescription + "'a' key press should cause firing keypress event");
+
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {shiftKey: true}, "A", "A");
+ ok(keypress,
+ kDescription + "'a' key press with shift key should cause firing keypress event");
+ ok(keypress.shiftKey,
+ kDescription + "shiftKey of 'a' key press with shift key should be true");
+
+ // When a key inputs a character with option key, we need to unset altKey for our editor.
+ // Otherwise, altKey should be true for compatibility with the other browsers.
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {altKey: true}, "\u00E5", "a");
+ ok(keypress,
+ kDescription + "'a' key press with option key should cause firing keypress event");
+ is(keypress.altKey, !kTest.isEditable,
+ kDescription + "altKey of 'a' key press with option key should be " + !kTest.isEditable);
+
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {altKey: true, shiftKey: true}, "\u00C5", "A");
+ ok(keypress,
+ kDescription + "'a' key press with option key and shift key should cause firing keypress event");
+ is(keypress.altKey, !kTest.isEditable,
+ kDescription + "altKey of 'a' key press with option key and shift key should be " + !kTest.isEditable);
+ ok(keypress.shiftKey,
+ kDescription + "shiftKey of 'a' key press with option key and shift key should be true");
+
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {ctrlKey: true}, "\u0001", "a");
+ ok(!keypress,
+ kDescription + "'a' key press with control key should not cause firing keypress event");
+
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_EN_US, MAC_VK_ANSI_A, {altKey: true, ctrlKey: true}, "\u0001", "a");
+ ok(!keypress,
+ kDescription + "'a' key press with option key and control key should not cause firing keypress event");
+
+ // XXX Cannot test with command key for now since keyup event won't be fired due to macOS's limitation.
+
+ // Some keys of Arabic - PC keyboard layout do not input any character with option key.
+ // In such case, we shouldn't dispatch keypress event.
+ keypress = await testNativeKey(KEYBOARD_LAYOUT_ARABIC_PC, MAC_VK_ANSI_7, {altKey: true}, "", "\u0667");
+ ok(!keypress,
+ kDescription + "'7' key press with option key should not cause firing keypress event");
+ }
+
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForFocus(runTests);
+</script>
+</body>
+</html> \ No newline at end of file