<html>
<head>
    <script src="../fast/js/resources/js-test-pre.js"></script>
    <style>
        #div1 { position: absolute; left: 100px; top: 100px; width: 200px; height: 20px; }
    </style>
</head>
<body onload="runTests()">

<div id=div1></div>

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

<script>
    function testRoundTouch(x, y, radius)
    {
        var x = x - radius;
        var y = y - radius;
        var width = radius * 2;
        var height = radius * 2;
        var zoomableRect = internals.bestZoomableAreaForTouchPoint(x, y, width, height, document);
        return zoomableRect;
    }

    function testDirectTouches()
    {
        zoomableArea = testRoundTouch(200, 110, 20);
        shouldEvaluateTo('zoomableArea.top', 100);
        shouldEvaluateTo('zoomableArea.left', 100);
        shouldEvaluateTo('zoomableArea.width', 200);
        shouldEvaluateTo('zoomableArea.height', 20);

    }

    function runTests()
    {
        if (window.testRunner && window.internals && internals.bestZoomableAreaForTouchPoint) {
            description('Test that targetted area is picked even if the touch area is not fully contained.');
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
            testDirectTouches();
            isSuccessfullyParsed();
            testRunner.notifyDone();
        }
    }
</script>
</body>
</html>