<!DOCTYPE HTML>
<html>
<body>
<script src="../resources/js-test-pre.js"></script>
<script src="../resources/accessibility-helper.js"></script>

<img tabindex="0" id="svg-image" alt="interactive SVG" >

<div id="console"></div>
<script>

description("This test ensures that accessibility elements can be created out of what a remote SVG image defines.")
window.jsTestIsAsync = true;

// Return the page's relative coordinates. If we rely on the x() or y() of the accessibility object, then
// accessibility transforms are applied that fail because there is no window available
function pageX(element) {
    return element.clickPointX - element.width/2;
}

function pageY(element) {
    return element.clickPointY - element.height/2;
}

function runAXTest() {    
    var container = accessibilityController.accessibleElementById("svg-image");

    var x = pageX(container) - 1;
    var y = pageY(container) - 1;

    debug("container location: (" + x + ", " + y + ")");

    var face = container.childAtIndex(0);
    debug('Face role: ' + face.role);
    debug('Face label: ' + platformValueForW3CName(face, true));
    debug('FaceX: ' + (pageX(face) - x));
    debug('FaceY: ' + Math.abs(pageY(face) - y));
    debug('<br>');

    var eye = container.childAtIndex(1);
    debug('Eye role: ' + eye.role);
    debug('Eye label: ' + platformValueForW3CName(eye, true));
    debug('EyeX: ' + (pageX(eye) - x));
    debug('EyeY: ' + Math.abs(pageY(eye) - y));
    debug('<br>');

    var nose = container.childAtIndex(3);
    debug('Nose role: ' + nose.role);
    debug('Nose label: ' + platformValueForW3CName(nose, true));
    debug('NoseX: ' + (pageX(nose) - x));
    debug('NoseY: ' + Math.abs(pageY(nose) - y));
    debug('<br>');

    var mouth = container.childAtIndex(4);
    debug('Mouth role: ' + mouth.role);
    debug('Mouth label: ' + platformValueForW3CName(mouth, true));
    debug('MouthX: ' + (pageX(mouth) - x));
    debug('MouthY: ' + Math.floor(Math.abs(pageY(mouth) - y)));
    debug('<br>');

    finishJSTest();
}

if (window.accessibilityController) {
    document.getElementById("svg-image").addEventListener("load", runAXTest);
}
document.getElementById("svg-image").src = "resources/svg-face.svg";

</script>

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

