<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
</head>
<body>

<div id="content">
    <div id="div-empty" tabindex="0"></div>
    <div id="div-empty-with-aria-label" tabindex="0" aria-label="div label"></div>
    <div id="div-content" tabindex="0">Some text</div>
    <div id="div-content-with-aria-label" tabindex="0" aria-label="div label">Some text</div>

    <div id="group-empty" tabindex="0" role="group"></div>
    <div id="group-empty-with-aria-label" tabindex="0" role="group" aria-label="group label"></div>
    <div id="group-content" tabindex="0" role="group">Some text</div>

    <blockquote id="blockquote-empty" tabindex="0"></blockquote>
    <blockquote id="blockquote-empty-with-aria-label" tabindex="0" aria-label="blockquote label"></blockquote>
    <blockquote id="blockquote-content" tabindex="0">To be, or not to be</blockquote>

    <footer id="footer-empty" tabindex="0"></footer>
    <footer id="footer-empty-with-aria-label" tabindex="0" aria-label="footer label"></footer>

    <div id="radiogroup-empty" tabindex="0" role="radiogroup"></div>
    <div id="radiogroup-empty-with-aria-label" tabindex="0" role="radiogroup" aria-label="radiogroup label"></div>

    <p id="paragraph-empty" tabindex="0"></p>
    <p id="paragraph-empty-with-aria-label" tabindex="0" aria-label="paragraph label"></p>
    <p id="paragraph-content" tabindex="0">Hello world</p>
    <p id="paragraph-content-with-aria-label" tabindex="0" aria-label="paragraph label">Hello world</p>
</div>

<script>
    description("This test ensures keyboard-focusable leaf nodes with AXLabels are considered accessibility elements on iOS.");

    var element;
    const shouldBeIgnored = (id, expectIgnored) => {
        element = accessibilityController.accessibleElementById(id);
        debug(`Testing ID ${id}`);
        shouldBe("element.isIgnored", `${expectIgnored}`);
    };

    if (window.accessibilityController) {
        shouldBeTrue("!accessibilityController.accessibleElementById('div-empty')");
        shouldBeIgnored("div-empty-with-aria-label", false);
        shouldBeIgnored("div-content", true);
        shouldBeIgnored("div-content-with-aria-label", true);

        shouldBeIgnored("group-empty", true);
        shouldBeIgnored("group-empty-with-aria-label", false);
        shouldBeIgnored("group-content", true);

        shouldBeTrue("!accessibilityController.accessibleElementById('blockquote-empty')");
        shouldBeIgnored("blockquote-empty-with-aria-label", false);
        shouldBeIgnored("blockquote-content", true);

        shouldBeIgnored("footer-empty", true);
        shouldBeIgnored("footer-empty-with-aria-label", false);

        shouldBeIgnored("radiogroup-empty", true);
        shouldBeIgnored("radiogroup-empty-with-aria-label", false);

        shouldBeTrue("!accessibilityController.accessibleElementById('paragraph-empty')");
        shouldBeIgnored("paragraph-empty-with-aria-label", false);
        shouldBeIgnored("paragraph-content", true);
        shouldBeIgnored("paragraph-content-with-aria-label", true);

        document.getElementById("content").style.visibility = "hidden";
    }
</script>
</body>
</html>

