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

<div role="grid" id="grid" tabindex="0">

<div role="row" aria-selected="true" id="row0">
  <span role="gridcell">a</span>
</div>

<Br><Br>

<div role="row">
 <span role="gridcell">b</span>
</div>

<br><br>

<div aria-selected="true" role="row">
  <span role="gridcell">c</span>
</div>

</div>

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

<script>

    description("This tests that the selected rows of a table are exposed correctly and that when they change, a notification is sent.");

    var axTree = 0;
    function notifyCallback(notification) {  
        document.getElementById("notifications").innerHTML += "Notification: " + notification + "<br>";
        if (notification == "AXSelectedRowsChanged") {
            axTree.removeNotificationListener();
            finishJSTest();
        }
    }

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

        document.getElementById("grid").focus();

        axTree = window.accessibilityController.focusedElement;

        var addedNotification = axTree.addNotificationListener(notifyCallback);
        shouldBe("addedNotification", "true");

        // First row is selected.
        shouldBeTrue("axTree.selectedRowAtIndex(0).isEqual(axTree.rowAtIndex(0))");

        // Third row is selected.
        shouldBeTrue("axTree.selectedRowAtIndex(1).isEqual(axTree.rowAtIndex(2))");

        // Change the selected state to ensure the notification is sent.
        document.getElementById("row0").setAttribute("aria-selected", "false");
    } else
        debug("window.accessibilityController is not present");

</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
