chromium/third_party/blink/web_tests/accessibility/listbox-focus.html

<!DOCTYPE HTML>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<select id="listbox" size="3">
  <option id="item0">Alicia</option>
  <option id="item1">Peter</option>
  <option id="item2">Kalinda</option>
  <option id="item3" disabled>Frank</option>
</select>
<script>
async_test(function(t)
{
    var listbox = document.getElementById("listbox");
    listbox.selectedIndex = 0;
    listbox.focus();

    accessibilityController.accessibleElementById('dummy');

    var gotCheckedStateChanged = false;
    var gotSelectedChildrenChanged = false;

    window.setTimeout(function() {
        var result = "";
        accessibilityController.addNotificationListener(t.step_func(function listener(element, notification) {
            if (notification == "CheckedStateChanged") {
                assert_equals(element.role, "AXRole: AXListBoxOption");
                gotCheckedStateChanged = true;
            }
            if (notification == "SelectedChildrenChanged") {
                assert_equals(element.role, "AXRole: AXListBox");
                gotSelectedChildrenChanged = true;
            }
            if (gotCheckedStateChanged && gotSelectedChildrenChanged) {
                t.done();
            }
        }));

        listbox.selectedIndex = 1;
    }, 0);
}, "menu list fires correct events when active index changes.");

function axElementById(id) {
    return accessibilityController.accessibleElementById(id);
}

test(function(t) {
    var axOption = axElementById("item2");
    assert_equals(axOption.isFocusable, true);
}, "Listbox option is focusable");

test(function(t) {
    var axOption = axElementById("item3");
    assert_equals(axOption.isFocusable, false);
}, "Disabled listbox option is not focusable");
</script>