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

<input id="time" type="time" />

<script>
var output = "This test ensures that time input meridiem fields can be controlled via assistive technologies.\n\n";

function isValidTextValue(string) { return string.includes("AM") || string.includes("PM"); }
function isValidIntValue(int) { return int == 0 || int == 1; }

const meridiemElement = internals.shadowRoot(document.getElementById("time")).firstChild.firstChild.lastChild;
var axMeridiemSpinbutton;
let lastValueDescription = meridiemElement.ariaValueText;
let lastIntValue = meridiemElement.ariaValueNow;
async function verifyAfterChange() {
    output += await expectAsync("axMeridiemSpinbutton.valueDescription !== lastValueDescription", "true");
    output += await expectAsync("axMeridiemSpinbutton.ariaValueNow !== lastIntValue", "true");
    lastValueDescription = axMeridiemSpinbutton.valueDescription;
    lastIntValue = axMeridiemSpinbutton.intValue;
    output += expect("isValidTextValue(lastValueDescription)", "true");
    output += expect("isValidIntValue(lastIntValue)", "true");
}

if (window.accessibilityController) {
    window.jsTestIsAsync = true;

    // Unfortunately, the childAtIndex path to the meridiem spinbutton can depend on the OS, so do this traversal to find it reliably.
    let elements = [accessibilityController.accessibleElementById("time")];
    while (elements.length) {
        const current = elements.pop();
        if (current.role.toLowerCase().includes("incrementor") && isValidTextValue(current.valueDescription)) {
            axMeridiemSpinbutton = current;
            break;
        }
        elements.push(...current.children);
    }
    output += expect("axMeridiemSpinbutton.role", "'AXRole: AXIncrementor'");
    output += expect("isValidTextValue(axMeridiemSpinbutton.valueDescription)", "true");

    document.getElementById("time").focus();
    eventSender.keyDown("\t");
    eventSender.keyDown("\t");
    setTimeout(async () => {
        output += "\nPressing up arrow.\n";
        eventSender.keyDown("upArrow");
        await verifyAfterChange();

        output += "\nPressing up arrow.\n";
        eventSender.keyDown("upArrow");
        await verifyAfterChange();

        output += "\nIncrementing via AX API.\n";
        axMeridiemSpinbutton.increment();
        await verifyAfterChange();

        output += "\nDecrementing via AX API.\n";
        axMeridiemSpinbutton.decrement();
        await verifyAfterChange();

        debug(output);
        finishJSTest();
    });
}
</script>
</body>
</html>
