<html>
<head>
<script>
if (window.testRunner) {
     testRunner.dumpAsText();
     internals.settings.setSmartInsertDeleteEnabled(false);
     internals.settings.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.testRunner) {
        // 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>
