<!DOCTYPE html>
<html>
<body id="body">
<script src="../resources/js-test-pre.js"></script>
<div id="content">

<div id="test" data="some data">

</div>

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

<script>

    description("This tests ARIA IDL Attribute Reflection.");

    var element = document.getElementById("test");
    var data = element.getAttribute("data");
    var otherData = "other data";
    var currentProperty;
    var currentAttribute;

    function testElement() {
        currentAttribute = currentProperty.replace("aria", "aria-").toLowerCase();
        
        debug("\nTest " + currentProperty + " < - > " + currentAttribute);
        shouldBeNull("element[currentProperty]");
        shouldBeNull("element.getAttribute(currentAttribute)");
        
        // Set the property value
        debug("element[\"" + currentProperty + "\"] = data;");
        element[currentProperty] = data;
        shouldBe("element.getAttribute(currentAttribute)", "data");

        // Set the attribute value
        debug("element.setAttribute(\"" + currentAttribute + "\", otherData);");
        element.setAttribute(currentAttribute, otherData);
        shouldBe("element[currentProperty]", "otherData");
    }

    function testRole() {
        currentProperty = "role";
        testElement();
    }

    if (window.accessibilityController) {

        testRole();

        // There are 46 ARIA attributes in total.
        var count = 0;
        for (var propertyName in element) {
          if (propertyName.startsWith("aria")) {
              currentProperty = propertyName;
              testElement();
              count++;
          }
        }

        debug("\n");
        shouldBe("count", "38");

    } else {
        testFailed("Could not load accessibility controller");
    }

</script>

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