<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> 
<html> 
<head>
<script> 

    function buildAccessibilityTree(accessibilityObject, indent) {
        var str = "";
        for (var i = 0; i < indent; i++)
            str += "    ";
        str += accessibilityObject.role;
        str += " " + accessibilityObject.stringValue;
        str += "\n";
        document.getElementById("tree").innerText += str;

        if (accessibilityObject.stringValue.indexOf('End of test') >= 0)
            return false;

        var count = accessibilityObject.childrenCount;
        for (var i = 0; i < count; ++i) {
            if (!buildAccessibilityTree(accessibilityObject.childAtIndex(i), indent + 1))
                return false;
        }

        return true;
    }
</script> 
<script src="../../../resources/js-test-pre.js"></script> 
</head> 
<body> 
 
<form>
<input type='text' name='entry' value='123' />
<input type='password' name='passwordEntry' value='123' />
</form>

<div>End of test</div>

<pre id="tree"></pre>
 
<p id="description"></p> 
<div id="console"></div> 
 
<script>
    description("This tests that the text associated with entry and password fields is correct.");

    if (window.accessibilityController) {
        // Build the accessibility tree up until 'End of test' is encountered.
        document.body.focus();
        buildAccessibilityTree(accessibilityController.focusedElement, 0);
    }

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