<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
    <head>
        <script src="../../resources/js-test-pre.js"></script>
    </head>
    <body>
        <ruby id="rubyElemId">
            <rb>basetext</rb>
            <rp>(</rp>
            <rt>rubytext</rt>
            <rp>)</rp>
        </ruby>
        
        <script>
            if (window.accessibilityController) {
                description("This tests that the ruby containers are exposed with the appropriate hierarchy and roles.")
                // At the moment, this is implemented only for OSX.
                var platform = accessibilityController.platformName;
                if ("mac" == platform) {
                    // Expected values for roles and subroles.
                    var expectedRubyRole = "AXRole: AXGroup"; // all ruby containers have AXGroup role
                    var expectedRubyInlineSubrole = "AXSubrole: AXRubyInline";
                    var expectedRubyBlockSubrole = "AXSubrole: AXRubyBlock";
                    var expectedRubyRunSubrole = "AXSubrole: AXRubyRun";
                    var expectedRubyTextSubrole = "AXSubrole: AXRubyText";
                    var expectedRubyBaseSubrole = "AXSubrole: AXRubyBase";
                    
                    // Try inline style first, block style second
                    var rubyElem = document.getElementById("rubyElemId");
                    shouldBeTrue("rubyElem != null");
                    rubyElem.style.display = "inline";
                    checkHierarchyAndRoles(rubyElem);
                    
                    rubyElem.style.display = "block";
                    checkHierarchyAndRoles(rubyElem);
                    
                    function checkHierarchyAndRoles(rubyElem) {
                        axRuby = window.accessibilityController.accessibleElementById("rubyElemId");
                        shouldBeTrue("axRuby != null");
                        role = axRuby.role;
                        subrole = axRuby.subrole;
                        shouldBe("role", "expectedRubyRole");
                        if (rubyElem.style.display == "inline") {
                            shouldBe("subrole", "expectedRubyInlineSubrole");
                        }
                        else {
                            shouldBe("subrole", "expectedRubyBlockSubrole");
                        }
                        
                        // RubyRun
                        axRubyRun = axRuby.childAtIndex(0);
                        shouldBeTrue("axRubyRun != null");
                        role = axRubyRun.role;
                        subrole = axRubyRun.subrole;
                        shouldBe("role", "expectedRubyRole");
                        shouldBe("subrole", "expectedRubyRunSubrole");
                        
                        // RubyText
                        axRubyText = axRubyRun.childAtIndex(0);
                        shouldBeTrue("axRubyText != null");
                        role = axRubyText.role;
                        subrole = axRubyText.subrole;
                        shouldBe("role", "expectedRubyRole");
                        shouldBe("subrole", "expectedRubyTextSubrole");
                        
                        // RubyBase
                        axRubyBase = axRubyRun.childAtIndex(1);
                        shouldBeTrue("axRubyBase != null");
                        role = axRubyBase.role;
                        subrole = axRubyBase.subrole;
                        shouldBe("role", "expectedRubyRole");
                        shouldBe("subrole", "expectedRubyBaseSubrole");
                    }
                }
            }
        </script>
        <script src="../../resources/js-test-post.js"></script>
    </body>
</html>
