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

<div id="content" contenteditable tabindex="0">
hello<br>
<b>world</b>
</div>

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

<script>

    description("This tests that a contenteditable region behaves as a proper AXTextArea.");

    var notification = 0;
    var textArea = 0;
    var notificationType = "AXValueChanged";
    function callback(notification) {
        if (notification == notificationType) {
            textArea.removeNotificationListener();
            debug("Updated value: " + textArea.stringValue);
            document.getElementById("content").style.visibility = "hidden";
            finishJSTest();
        }
    }

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

        // In ATK, value-changed notifications are made for widgets which implement
        // the AtkValue interface (sliders, progress bars, etc.).
        if (accessibilityController.platformName == "atk")
            notificationType = "AXTextChanged";

        textArea = accessibilityController.accessibleElementById("content");
        textArea.addNotificationListener(callback);

        debug("Role: " + textArea.role);
        debug("Value: " + textArea.stringValue);
        debug("Value (writable): " + textArea.isAttributeSettable("AXValue"));
        debug("String with range: " + textArea.stringForRange(1, 9));
        debug("Attributed string with range: " + textArea.attributedStringForRange(1, 9));
        debug("Line for index(0): " + textArea.lineForIndex(0));
        debug("Line for index(7): " + textArea.lineForIndex(7));
        debug("Range for line(0): " + textArea.rangeForLine(0));
        debug("Range for line(1): " + textArea.rangeForLine(1));
        debug("Bounds for range: " + textArea.boundsForRange(3, 5));

        var range = document.createRange();
        range.setStart(document.getElementById("content").firstChild, 0);
        range.setEnd(document.getElementById("content").firstChild, 4);
        var sel = window.getSelection();
        sel.addRange(range);

        debug("Selected text range: " + textArea.selectedTextRange);
        debug("Selected text: " + textArea.stringAttributeValue("AXSelectedText"));

        // Send a value cahnge.
        document.getElementById("content").focus();
        eventSender.keyDown('q', []);
    }

</script>

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