<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
    html, body {
        margin: 0;
        padding: 0;
    }
    
    #test1 {
        margin: 100px;
        width: 200px;
        height: 200px;
        background: silver;
    }

    #test2 {
        margin: -90px 0 0 100px;
        width: 190px;
        height: 190px;
        border: 1px solid silver;
        padding: 4px;
    }

    #test2 > div {
        position: relative;
        height: 150px;
        width: 150px;
        overflow: auto;
        background: white;
    }

    #test2 > div > input {
        width: 80px;
        margin: 150px;
        border: 1px solid;
    }

    input, span {
        font-size: 14px;
        display: inline-block;
        height: 20px;
        overflow: hidden;
    }

</style>
<body>
    <div id="test1">
        <span>span</span>
    </div>
    <div id="test2">
        <div>
            <input type="text" value="input">
        </div>
    </div>
    <div id="console"></div>
</body>
<script>
    var TOLERANCE = 5;
    function isAcceptable(expected, result)
    {
        for (var i = 0; i < 4; i++) {
            if (Math.abs(expected[i] - result[i]) > TOLERANCE)
                return false;
        }
        return true;
    }
    
    function simulateElementClick(element, expected)
    {
        element.scrollIntoView(true);
        if (!window.eventSender)
            return 'This test requires eventSender';

        var result;
        function listener(event)
        {
            result = [event.offsetX, event.offsetY, event.layerX, event.layerY];
        }
            
        var rect = element.getBoundingClientRect();
        element.addEventListener('click', listener, false);
        eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2);
        eventSender.mouseDown();
        eventSender.mouseUp();
        element.removeEventListener('click', listener, false);

        if (result && isAcceptable(expected, result))
            return expected.join(', ');

        return result.join(', ');        
    }

    var testElement = document.getElementById('test1');
    var spanElement = testElement.getElementsByTagName('span')[0];
    var testElement2 = document.getElementById('test2');
    var inputElement = testElement2.getElementsByTagName('input')[0];

    shouldBe("simulateElementClick(testElement, [100, 100, 200, 200]);", "'100, 100, 200, 200'");
    shouldBe("simulateElementClick(spanElement, [16, 10, 16, 10]);", "'16, 10, 16, 10'");
    shouldBe("simulateElementClick(inputElement, [40, 10, 40, 10]);", "'40, 10, 40, 10'");
</script>
</html>
