<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script>
if (window.testRunner)
    testRunner.dumpAsText();
</script>
</head>
<body>

<p>This is a very long, long, long, long, line that contains a link that expands multiple lines: <a id="multiline-link" href="#">Apple<br><br>Inc.</a> is based in Cupertino California.
</p>

<br><br>

<p>A singleline link: <a id="singleline-link" href="#">Apple Inc.</a> is based in Cupertino California.
</p>

<p id="description"></p>
<div id="console"></div>

<script>
    description("This test ensures that the activation point (or click point) for a link is inside the bounding rect for the link. .");

    function clickPointInsideFrame(el) {
        var clickX = el.clickPointX;
        var clickY = el.clickPointY;

        var frameX = el.x;
        var frameY = el.y;
        var frameW = el.width;
        var frameH = el.height;

        return (clickX >= frameX && clickX <= frameX + frameW
                && clickY >= frameY && clickY <= frameY + frameH);
    };

    if (window.accessibilityController) {
        window.jsTestIsAsync = true;

        var link = accessibilityController.accessibleElementById("multiline-link");
        shouldBeTrue("clickPointInsideFrame(link)");
        link.press();

        link = accessibilityController.accessibleElementById("singleline-link");
        shouldBeTrue("clickPointInsideFrame(link)");
        link.press();

        setTimeout(
            function() {
                finishJSTest();
            }, 10);
    }
</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
