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

</script>
</head>
<body>
<form>
<select id="combo">
<option selected value='foo'>foo</option>
<option value='bar'>bar</option>
<option value='baz'>baz</option>
</select>
</form>

<p id="description"></p>
<div id="console"></div>

<script>
window.jsTestIsAsync = true;

description("This tests that a combo box notifies when the selected child has changed while arrowing through the options of a combobox while collapsed.");

var selectionChangedNotifications = 0;

if (window.testRunner && window.accessibilityController) {
    testRunner.dumpAsText();

    // Focus in the combobox and move around the options. The signal
    // 'state-change:selected' should be emitted with every change.
    document.getElementById("combo").focus();

    axCombo = accessibilityController.focusedElement;
    var eventTarget = accessibilityController.platformName == "atspi" ? axCombo.childAtIndex(0) : axCombo;
    eventTarget.addNotificationListener(function (notification) {
        if (notification == "AXSelectedChildrenChanged" || notification == "AXMenuItemSelected")
            selectionChangedNotifications++;
    });

    eventSender.keyDown("downArrow");
    eventSender.keyDown("downArrow");
    eventSender.keyDown("upArrow");
    eventSender.keyDown("upArrow");

    window.setTimeout(function() {
        if (window.accessibilityController)
            eventTarget.removeNotificationListener();

        // ATSPI sends one selection change notification per run loop iteration.
        if (accessibilityController.platformName == "atspi")
            shouldBe("selectionChangedNotifications", "1");
        else
            shouldBe("selectionChangedNotifications", "4");
        finishJSTest();
    }, 0);
}
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
