<!DOCTYPE html>
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<style>
    .result {
        font-family:monospace;
    }
    .target {
        background-color:silver;
        border:1px solid;
        cursor:default;
    }
</style>
<title>Press Targets Center Point</title>
</head>
<body>

<div class="target" id="t0" style="height: 18px; width:160px;">target</div>
<p>Actual: <span class="result" id="a0">waiting</span><br>Expected: <span class="result" id="e0">waiting</span></p>

<div class="target" id="t1" style="-webkit-transform:translate(160px, 160px); height: 18px; width:240px;">translate transform target</div>
<p>Actual: <span class="result" id="a1">waiting</span><br>Expected: <span class="result" id="e1">waiting</span></p>

<div class="target" id="t2" style="-webkit-writing-mode:vertical-lr; width: 18px;">vertical left-to-right writing mode target</div>
<p>Actual: <span class="result" id="a2">waiting</span><br>Expected: <span class="result" id="e2">waiting</span></p>

<div class="target" id="t3" style="direction:rtl; height: 18px; width:240px;">right-to-left direction target</div>
<p>Actual: <span class="result" id="a3">waiting</span><br>Expected: <span class="result" id="e3">waiting</span></p>

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

<script>
    description("This tests that press targets the receiving elements center point.");
    
    var targetCount = document.getElementsByClassName("target").length;
    
    for (var i = 0; i < targetCount; ++i) {
        (function(i) {
            document.getElementById("t" + i).addEventListener("click", function(e) {
                document.getElementById("a" + i).innerHTML = "(" + e.clientX + ", " + e.clientY + ")";
            });
        })(i);
        
        var targetClientRect = document.getElementById("t" + i).getBoundingClientRect();
        var targetClientX = Math.round(targetClientRect.left + targetClientRect.width / 2);
        var targetClientY = Math.round(targetClientRect.top + targetClientRect.height / 2);
        document.getElementById("e" + i).innerHTML = "(" + targetClientX + ", " + targetClientY + ")";
    }
    
    if (window.accessibilityController) {
        window.jsTestIsAsync = true;
        
        // Press all targets.
        accessibilityPress(0);
    }
    
    function accessibilityPress(i) {
        if (i == targetCount)
            finishJSTest();
        
        accessibilityController.accessibleElementById("t" + i).press();
        setTimeout(function() {
            accessibilityPress(i+1);
        }, 10);
    }
</script>

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