<!DOCTYPE html>
<html>
<body>
<p>To run this test manually, press arrow keys three times. WebKit should not crash. On DRT, you see see PASS:</p>
<input type="text" onkeydown="move(this.nextSibling)"
><input type="text" onkeydown="move(this.nextSibling)"
><input type="text" onkeydown="move(this.nextSibling)"
><input type="text" onkeydown="move(this.nextSibling)"
><input type="text" onkeydown="move(this.nextSibling)"
><input type="text" onkeydown="move(this.nextSibling)">
<script type="text/javascript">

if (window.testRunner)
    testRunner.dumpAsText();

var activeInput = null;

function move(newInput)
{
    newInput.className = '';
    newInput.style.dispaly = '';
    newInput.focus();
    if (activeInput)
        activeInput.style.display = 'none';
    activeInput = newInput;
}

var inputs = document.getElementsByTagName('input');
move(inputs[0]);

if (window.eventSender) {
    testRunner.waitUntilDone();
    for (var i = 0; i < inputs.length - 1; i++)
        eventSender.keyDown('downArrow', []);
    testRunner.notifyDone();
}

document.body.appendChild(document.createTextNode('PASS'));
</script>
</body>
</html>
