<html>
<head>
<script>
if (window.layoutTestController) {
     layoutTestController.dumpAsText();
     layoutTestController.setSmartInsertDeleteEnabled(false);
     layoutTestController.setSelectTrailingWhitespaceEnabled(true);
}
</script>
</head>
<body>
<pre>
Double-click in the white space below this text block -- should not crash.
<a href="https://bugs.webkit.org/show_bug.cgi?id=23232">BUG 23232</a>.
</pre> 
<script type="text/javascript">
    if (window.layoutTestController) {
        // Double click at the end of the body.
        eventSender.mouseMoveTo(10, 100);
        eventSender.mouseDown();
        eventSender.mouseUp();
        eventSender.mouseDown();
        eventSender.mouseUp();

        // As long as didn't crash, we passed.
        document.write("PASS");
    }
</script>
</body>
</html>
