<body
   onkeypress="log(eventInfo(event))"
   onkeydown="log(eventInfo(event))"
   onkeyup="log(eventInfo(event))">
<p>Test that arrow keys do not dispatch keypress events even if there is no default handler.</p>
<p>To test manually, press arrow keys and verify that no keypress events are logged.</p>
<div id="log"></div>

<script>
function log(msg) {
   document.getElementById("log").innerHTML+= msg + "<br />";
}


function locationName(code) {
  switch (code) {
    case 0:
        return "DOM_KEY_LOCATION_STANDARD";
    case 1:
        return "DOM_KEY_LOCATION_LEFT";
    case 2:
        return "DOM_KEY_LOCATION_RIGHT";
    case 3:
        return "DOM_KEY_LOCATION_NUMPAD";
    default:
        return code.toString();
  }
}

function eventInfo(event, where) {
  try {
    if (!event)
      event = window.event;
    target = event.srcElement ? event.srcElement : event.target;
    if (event.type == "textInput")
        return (where ? "(" + where + ") " : "") + target.tagName + " - " + event.type + " - " + event.data
            + '. Value: "' + target.value + '".';
    else if (event.type == "keydown" || event.type == "keypress" || event.type == "keyup") 
        return (where ? "(" + where + ") " : "") + target.tagName
            + (target.tagName == "INPUT" ? " " + target.type : "")
            + " - " + event.type
            + ' - ' + [event.ctrlKey, event.altKey, event.shiftKey, event.metaKey]
            + ' - ' + event.keyIdentifier
            + ' - ' + (event.keyLocation === undefined ? "undefined" : locationName(event.keyLocation))
            + ' - ' + event.keyCode
            + ' - ' + event.charCode;

    } catch (ex) {
        alert(ex);
    }
}
log("target - type - " + ["ctrlKey", "altKey", "shiftKey", "metaKey"]
        + ' - ' + "keyIdentifier"
        + ' - ' + "keyLocation"
        + ' - ' + "keyCode"
        + ' - ' + "charCode");

if (window.testRunner) {
    testRunner.dumpAsText();
    eventSender.keyDown("leftArrow", []);
}

</script>

</body>
