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

<div id="content">

<!-- A link always gets its accessible text from contents. -->
<a id="link" href="#">A</a>

<!-- A generic focusable div should not get its accessible text from contents. -->
<div id="div" tabindex="0">B</div>
<div id="div2" tabindex="0"><div></div>C</div>
<div id="div3" tabindex="0" aria-label="D"></div>

<!-- A generic focusable div should not get accessible text from children that are focusable or containers. -->
<div id="div4" tabindex="0"><a href="#">Link</a></div>
<div id="div5" tabindex="0">Initial text before link<a href="#">Link</a></div>
<div id="div6" tabindex="0"><ul><li>List item</li></ul></div>
<div id="div7" tabindex="0">Initial text before list<ul><li>List item</li></ul></div>
</div>
<div id="console"></div>
<script>
description("This test makes sure that a generic focusable div can get accessibility focus. It should not get accessible text from its children automatically though.");

if (window.testRunner && window.accessibilityController) {
    window.testRunner.dumpAsText();

    function lastChar(str) {
        return str.substr(str.length - 1);
    }

    var link = document.getElementById('link');
    link.focus();
    shouldBe("document.activeElement == link", "true");
    window.axLink = accessibilityController.focusedElement;
    shouldBe("lastChar(axLink.title)", "\"A\"");

    var div = document.getElementById('div');
    div.focus();
    shouldBe("document.activeElement == div", "true");
    window.axDiv = accessibilityController.focusedElement;
    shouldBe("lastChar(axDiv.title)", "' '");

    var div2 = document.getElementById('div2');
    div2.focus();
    shouldBe("document.activeElement == div2", "true");
    window.axDiv2 = accessibilityController.focusedElement;
    shouldBe("lastChar(axDiv2.title)", "' '");

    var div3 = document.getElementById('div3');
    div3.focus();
    shouldBe("document.activeElement == div3", "true");
    window.axDiv3 = accessibilityController.focusedElement;
    var accNameForDiv3 = platformValueForW3CName(axDiv3);
    shouldBe("lastChar(accNameForDiv3)", "\"D\"");

    var div4 = document.getElementById('div4');
    div4.focus();
    shouldBe("document.activeElement == div4", "true");
    window.axDiv4 = accessibilityController.focusedElement;
    shouldBe("axDiv4.title.indexOf('Link')", "-1");

    var div5 = document.getElementById('div5');
    div5.focus();
    shouldBe("document.activeElement == div5", "true");
    window.axDiv5 = accessibilityController.focusedElement;
    shouldBe("axDiv5.title.indexOf('Link')", "-1");
    shouldBe("axDiv5.title.indexOf('Initial text before link') >= 0", "false");

    var div6 = document.getElementById('div6');
    div6.focus();
    shouldBe("document.activeElement == div6", "true");
    window.axDiv6 = accessibilityController.focusedElement;
    shouldBe("axDiv6.title.indexOf('List item')", "-1");

    var div7 = document.getElementById('div7');
    div7.focus();
    shouldBe("document.activeElement == div7", "true");
    window.axDiv7 = accessibilityController.focusedElement;
    shouldBe("axDiv7.title.indexOf('List item')", "-1");
    shouldBe("axDiv7.title.indexOf('Initial text before list') >= 0", "false");

    document.getElementById("content").style.visibility = "hidden";
}

</script>

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