--- a/widget/tests/test_keycodes.xul
+++ b/widget/tests/test_keycodes.xul
@@ -86,16 +86,17 @@ if (IS_MAC) {
};
} else if (IS_WIN) {
// These constants can be found by inspecting registry keys under
// HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Keyboard Layouts
keyboardLayouts = {
"US":0x409,
"German":0x407,
"Greek":0x408,
+ "Spanish":0x40a,
"French":0x40c,
"Swedish":0x41d,
"Arabic":0x401,
"Hebrew":0x40d,
"Japanese":0x411,
"Norwegian":0x414,
"Lithuanian":0x10427,
"Thai": 0x2041e
@@ -243,40 +244,45 @@ function runKeyEventTests()
synthesizeKey(aEvent, "button");
var name = eventToString(aEvent);
var expectEventTypeList = [];
if (aShouldDelivedEvent & SHOULD_DELIVER_KEYDOWN)
expectEventTypeList.push("keydown");
- if (aShouldDelivedEvent & SHOULD_DELIVER_KEYPRESS)
+ if (aShouldDelivedEvent & SHOULD_DELIVER_KEYPRESS) {
expectEventTypeList.push("keypress");
+ for (var i = 1; i < aExpectGeckoChar.length; i++) {
+ expectEventTypeList.push("keypress");
+ }
+ }
if (aShouldDelivedEvent & SHOULD_DELIVER_KEYUP)
expectEventTypeList.push("keyup");
is(eventList.length, expectEventTypeList.length, name + ", wrong number of key events");
var longerLength = Math.max(eventList.length, expectEventTypeList.length);
+ var keypressCount = 0;
for (var i = 0; i < longerLength; i++) {
var firedEventType = i < eventList.length ? eventList[i].type : "";
var expectEventType = i < expectEventTypeList.length ? expectEventTypeList[i] : "";
if (firedEventType != "")
is(firedEventType, expectEventType, name + ", wrong type event fired");
else
is(firedEventType, expectEventType, name + ", a needed event is not fired");
if (firedEventType != "") {
var e = eventList[i];
is(e.ctrlKey, aEvent.ctrl || aEvent.ctrlRight || 0, name + ", Ctrl mismatch");
is(e.metaKey, aEvent.command || aEvent.commandRight || 0, name + ", Command mismatch");
is(e.altKey, aEvent.alt || aEvent.altRight || 0, name + ", Alt mismatch");
is(e.shiftKey, aEvent.shift || aEvent.shiftRight || 0, name + ", Shift mismatch");
if (aExpectGeckoChar.length > 0 && e.type == "keypress") {
- is(e.charCode, aExpectGeckoChar.charCodeAt(0), name + ", charcode");
+ is(e.charCode, aExpectGeckoChar.charCodeAt(keypressCount++), name + ", charcode");
if (aExpectedGeckoKeyCode >= 0) {
if (aExpectGeckoChar) {
is(e.keyCode, 0, name + ", wrong keycode");
} else {
is(e.keyCode, aExpectedGeckoKeyCode, name + ", wrong keycode");
}
}
} else {
@@ -1756,19 +1762,19 @@ function runKeyEventTests()
nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, ")", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:219, shift:1, chars:"\u00B0"},
nsIDOMKeyEvent.DOM_VK_CLOSE_PAREN, "\u00B0", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:187, chars:"="},
nsIDOMKeyEvent.DOM_VK_EQUALS, "=", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:187, shift:1, chars:"+"},
nsIDOMKeyEvent.DOM_VK_EQUALS, "+", SHOULD_DELIVER_ALL);
//testKey({layout:"French", keyCode:221, chars:""},
- // 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
+ // nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
//testKey({layout:"French", keyCode:221, shift:1, chars:""},
- // 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP); // Dead-key
+ // nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_ALL); // Dead-key
testKey({layout:"French", keyCode:186, chars:"$"},
nsIDOMKeyEvent.DOM_VK_DOLLAR, "$", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:186, shift:1, chars:"\u00A3"},
nsIDOMKeyEvent.DOM_VK_DOLLAR, "\u00A3", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:192, chars:"\u00F9"},
nsIDOMKeyEvent.DOM_VK_PERCENT, "\u00F9", SHOULD_DELIVER_ALL);
testKey({layout:"French", keyCode:192, shift:1, chars:"%"},
nsIDOMKeyEvent.DOM_VK_PERCENT, "%", SHOULD_DELIVER_ALL);
@@ -1879,16 +1885,137 @@ function runKeyEventTests()
testKey({layout:"German", keyCode:191, shift:1, chars:"'"},
nsIDOMKeyEvent.DOM_VK_HASH, "'", SHOULD_DELIVER_ALL);
// Norwegian
testKey({layout:"Norwegian", keyCode:220, chars:"|"},
nsIDOMKeyEvent.DOM_VK_PIPE, "|", SHOULD_DELIVER_ALL);
testKey({layout:"Norwegian", keyCode:220, shift:1, chars:"\u00A7"},
nsIDOMKeyEvent.DOM_VK_PIPE, "\u00A7", SHOULD_DELIVER_ALL);
+
+ // Dead keys on any layouts
+ testKey({layout:"French", keyCode:221, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:221, chars:"^^"},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "^^", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:65, chars:"\u00E2"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E2", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:65, shift:1, chars:"\u00C2"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C2", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:81, chars:"^q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "^q", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:221, shift:1, chars:"\u00A8\u00A8"},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "\u00A8\u00A8", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:65, shift:1, chars:"\u00C4"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C4", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:65, chars:"\u00E4"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E4", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"French", keyCode:221, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_CIRCUMFLEX, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"French", keyCode:81, shift:1, chars:"\u00A8Q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "\u00A8Q", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:186, chars:"``"},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "``", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, chars:"\u00E0"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E0", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C0"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C0", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:81, chars:"`q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "`q", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:186, shift:1, chars:"^^"},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "^^", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C2"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C2", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, chars:"\u00E2"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E2", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:186, shift:1, chars:""},
+ nsIDOMKeyEvent.DOM_VK_BACK_QUOTE, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:81, shift:1, chars:"^Q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "^Q", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:222, chars:"\u00B4\u00B4"},
+ 0, "\u00B4\u00B4", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, chars:"\u00E1"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E1", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C1"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C1", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:81, chars:"\u00B4q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "\u00B4q", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:222, shift:1, chars:"\u00A8\u00A8"},
+ 0, "\u00A8\u00A8", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, shift:1, chars:"\u00C4"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00C4", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:65, chars:"\u00E4"},
+ nsIDOMKeyEvent.DOM_VK_A, "\u00E4", SHOULD_DELIVER_ALL);
+
+ testKey({layout:"Spanish", keyCode:222, shift:1, chars:""},
+ 0, "", SHOULD_DELIVER_KEYDOWN_KEYUP);
+ testKey({layout:"Spanish", keyCode:81, shift:1, chars:"\u00A8Q"},
+ nsIDOMKeyEvent.DOM_VK_Q, "\u00A8Q", SHOULD_DELIVER_ALL);
}
document.removeEventListener("keydown", onKeyEvent, false);
document.removeEventListener("keypress", onKeyEvent, false);
document.removeEventListener("keyup", onKeyEvent, false);
}
// Test the activation (or not) of an HTML accesskey