<html>
<head>
    <title></title>
    <script type="text/javascript">
        function test()
        {
            if (!window.testRunner)
                return;
            var target = document.getElementById("target");

            for (i = 0; i < target.children.length; i++) {
                var div = target.children[i];
                var clickX = div.offsetLeft + div.offsetWidth + 5;
                var clickY = div.offsetTop + 5;
                eventSender.mouseMoveTo(clickX, clickY);
                eventSender.mouseDown();
                eventSender.mouseUp();
                eventSender.leapForward(1000);   // we're not multi-clicking
            }
        }
    </script>
</head>
<body onload="test()">
    <p>
        This is a regression test for <i><a href="https://bugs.webkit.org/show_bug.cgi?id=9879">http://bugzilla.opendarwin.org/show_bug.cgi?id=9879</a>
        REGRESSION: Repro crash when clicking to the side of an anonymous table</i>.
    </p>
    <p>
        If the browser does not crash as you click to the right of each of the lines below, it passes the test.
    </p>
    <hr>
    <div id="target">
        <div style="display:table-row;">
        Click to the right of this text
        </div>

        <div style="display:table-cell;">
        Click to the right of this text
        </div>
        
        <div style="display:table-caption;">
        Click to the right of this text
        </div>
                
        <div style="display:table-row-group;">
        Click to the right of this text
        </div>
    </div>
</body>
</html>
