blob: 697b9f6ddc098acfcedacb5300ac38e848fb1c34 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<link rel="help" href="http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent-getModifierState" />
<script src="../../resources/js-test.js"></script>
<script src="resources/input-modifiers.js"></script>
</head>
<body>
<script>
description("Tests KeyboardEvent.getModifierState()");
var lastKeyboardEvent;
function recordKeyEvent(ev) {
ev = ev || event;
ev.keyCode = (ev.which || ev.keyCode);
if (window.eventSender) {
lastKeyboardEvent = ev;
} else {
var debugString = "Type=" + ev.type + ",keyCode=" + ev.keyCode + ",";
forEachModifier(function(eventInitName, eventModifierName, eventSenderName) {
debugString += eventModifierName + "=" + ev.getModifierState(eventModifierName) + ",";
});
debug(debugString);
}
}
function testKeyEventWithModifiers(evString, eventModifiers, expectedKeyCode) {
eventSender.keyDown(evString, eventModifiers);
shouldBe("lastKeyboardEvent.type", '"keydown"');
shouldEvaluateTo("lastKeyboardEvent.keyCode", expectedKeyCode);
forEachModifier(function(modifierInitName, modifierName, eventSenderName) {
var expectedModifierState = eventModifiers.indexOf(eventSenderName) >= 0;
shouldEvaluateTo("lastKeyboardEvent.getModifierState('" + modifierName + "')", expectedModifierState);
});
forEachLegacyModifier(function(attr) {
var expectedModifierState = eventModifiers.indexOf(attr) >= 0;
shouldEvaluateTo("lastKeyboardEvent." + attr, expectedModifierState);
});
}
var textarea = document.createElement("textarea");
textarea.addEventListener("keydown", recordKeyEvent, false);
document.body.insertBefore(textarea, document.body.firstChild);
textarea.focus();
if (window.eventSender) {
testKeyEventWithModifiers("PageUp", ["ctrlKey"], 33);
testKeyEventWithModifiers("PageDown", ["shiftKey"], 34);
testKeyEventWithModifiers("Home", ["altKey"], 36);
testKeyEventWithModifiers("End", ["metaKey"], 35);
testKeyEventWithModifiers("ArrowLeft", ["ctrlKey", "shiftKey"], 37);
testKeyEventWithModifiers("ArrowRight", ["ctrlKey", "shiftKey", "altKey"], 39);
testKeyEventWithModifiers("ArrowUp", ["ctrlKey", "shiftKey", "altKey", "metaKey"], 38);
forEachModifier( function(eventInitName, eventModifierName, eventSenderName) {
testKeyEventWithModifiers("ArrowLeft", [eventSenderName], 37);
});
var isMacOSX = navigator.userAgent.indexOf("Mac OS X") != -1;
eventSender.keyDown("PageUp", [isMacOSX ? "metaKey" : "ctrlKey"]);
shouldBe("lastKeyboardEvent.type", '"keydown"');
shouldEvaluateTo("lastKeyboardEvent.keyCode", 33);
shouldEvaluateTo("lastKeyboardEvent.getModifierState('Accel')", "true");
} else {
debug("This test requires DumpRenderTree. To manually test, 1) focus on the textarea above and press keys while holding modifiers 2) see if the ctrlKey/shiftKey/altKey/metaKey= values are correctly reported.");
}
</script>
</body>
</html>