<!DOCTYPE html>
<html>
<body id="body">
<script src="../../resources/js-test.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
<div id="host"></div>
<div id="some" class="note">some description</div>
<div class="note">other description</div>
<div id="details1" class="details">some details</div>
<div id="details2" class="details">other details</div>
<div id="error1" class="error">some error</div>
<div id="error2" class="error">other error</div>
<script>

class CustomElement extends HTMLElement {
    constructor()
    {
        super();
        window.internals = this.attachInternals();
        internals.role = 'checkbox';
        internals.ariaDescribedByElements = Array.from(document.querySelectorAll('.note'));
        internals.ariaDetailsElements = Array.from(document.querySelectorAll('.details'));
        internals.ariaErrorMessageElements = Array.from(document.querySelectorAll('.error'));
        internals.ariaInvalid = true;
        shouldBe('internals.ariaDescribedByElements.length', '2');
        shouldBe('internals.ariaDescribedByElements[0]', 'document.querySelectorAll(".note")[0]');
        shouldBe('internals.ariaDescribedByElements[1]', 'document.querySelectorAll(".note")[1]');
        shouldBe('internals.ariaDetailsElements.length', '2');
        shouldBe('internals.ariaDetailsElements[0]', 'document.querySelectorAll(".details")[0]');
        shouldBe('internals.ariaDetailsElements[1]', 'document.querySelectorAll(".details")[1]');
        shouldBe('internals.ariaErrorMessageElements.length', '2');
        shouldBe('internals.ariaErrorMessageElements[0]', 'document.querySelectorAll(".error")[0]');
        shouldBe('internals.ariaErrorMessageElements[1]', 'document.querySelectorAll(".error")[1]');
    }
}
customElements.define('custom-element', CustomElement);

const shadowRoot = host.attachShadow({mode: 'closed'});
const customElement = new CustomElement;
customElement.id = 'custom-1';
shadowRoot.appendChild(customElement);

description("This tests that aria fallback roles work correctly.");
if (!window.accessibilityController)
    debug('This test requires accessibilityController');
else {
    shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").role', 'AXRole: AXCheckBox');
    if (accessibilityController.platformName == "mac")
        shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").customContent', 'description: some description other description');
    else
        shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").helpText', 'AXHelp: some description other description');

    shouldBe('accessibilityController.accessibleElementById("custom-1").detailsElements().length', '2');
    shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").detailsElements()[0].domIdentifier', 'details1');
    shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").detailsElements()[1].domIdentifier', 'details2');
    shouldBe('accessibilityController.accessibleElementById("custom-1").errorMessageElements().length', '2');
    shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").errorMessageElements()[0].domIdentifier', 'error1');
    shouldBeEqualToString('accessibilityController.accessibleElementById("custom-1").errorMessageElements()[1].domIdentifier', 'error2');
}

</script>
</body>
</html>
