<html>
<head>
<script src="../resources/js-test-pre.js"></script>
</head>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();
</script>
<body>

<p id="description"></p>
<div id="console"></div>
    
    <input type="radio" name="r1" id="r1" title="TITLE">Test<br>
    <label id="label1" for="r1">LABEL</label>

    <input type="radio" id="r2" aria-labeledby="label2">Test<br>
    <label for="r2">LABEL2</label>
    <div id="label2">LABEL2a</div>

    <input type="radio" name="r3" id="r3" aria-label="radio3">Test<br>
    <label for="r3">LABEL3</label>

    <script>

        description("This test checks that radio buttons expose title ui elements correctly under a variety of cirmcumstances. In general, the <label> should NOT disappear and should be the titleUIElement for the checkbox.");

        if (window.accessibilityController) {

            // 1) Even though a checkbox has a title attribute, the title ui element should still be exposed.
            var radio1 = accessibilityController.accessibleElementById("r1");
            var titleUIElement = radio1.titleUIElement();
            if (accessibilityController.platformName == "atk")
                shouldBe("radio1.title", "'AXTitle: LABEL'");
            else
                shouldBe("radio1.title", "'AXTitle: '");
            shouldBeTrue("titleUIElement.isEqual(accessibilityController.accessibleElementById('label1'))");

            // 2) aria-labeledby should override the native label semantics and return a title for the radio button, instead of a title ui element.
            var radio2 = accessibilityController.accessibleElementById("r2");
            titleUIElement = radio2.titleUIElement();
            if (accessibilityController.platformName == "atk") {
                shouldBe("radio2.title", "'AXTitle: LABEL2a'");
                shouldBe("radio2.description", "'AXDescription: '");
            } else {
                shouldBe("radio2.description", "'AXDescription: LABEL2a'");
                shouldBe("radio2.title", "'AXTitle: '");
            }
            shouldBeTrue("!titleUIElement || titleUIElement.title == 'AXTitle: '");

            // 3) If a radio button has an aria-label and a <label>, the aria-label should be the title.
            var radio3 = accessibilityController.accessibleElementById("r3");
            titleUIElement = radio3.titleUIElement();
            if (accessibilityController.platformName == "atk") {
                shouldBe("radio3.title", "'AXTitle: radio3'");
                shouldBe("radio2.description", "'AXDescription: '");
            } else {
                shouldBe("radio3.description", "'AXDescription: radio3'");
                shouldBe("radio3.title", "'AXTitle: '");
            }
            shouldBeTrue("!titleUIElement || titleUIElement.title == 'AXTitle: '");

        }
    </script>

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

</body>
</html>
