<!DOCTYPE html>
<html>
<body id="body">
<script src="../../resources/js-test-pre.js"></script>
<div id="content">

<div contenteditable="true" id="contenteditable" oninput="updateContenteditable();">current</div>
<input type="text" id="inputElement" value="somevalue" oninput="updateInput();">
<textarea id="textarea" oninput="updateTextarea();">sometext</textarea>

</div>

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

<script>

    description("This tests that setting value to a text control would dispatch input events.");

    if (window.accessibilityController) {
        jsTestIsAsync = true;

        var inputValue;
        var contenteditableValue;
        var textareaValue;

       function updateContenteditable(){
           contenteditableValue = accessibilityController.accessibleElementById("contenteditable").stringValue;
           if (contenteditableValue.includes("contenteditable")) {
               debug("input event dispatched for contenteditable");
               debug(contenteditableValue);
               testElement("inputElement");
           }
       }

       function updateInput(){
          inputValue = accessibilityController.accessibleElementById("inputElement").stringValue;
          if (inputValue.includes("inputElement")) {
              debug("input event dispatched for inputElement");
              debug(inputValue);
              testElement("textarea");
          }
       }

       function updateTextarea(){
          textareaValue = accessibilityController.accessibleElementById("textarea").stringValue;
          if (textareaValue.includes("textarea")) {
              debug("input event dispatched for textarea");
              debug(textareaValue);
              finishJSTest();
          }
       }

        function testElement(idValue) {
            debug("\nTest: " + idValue);
            var axElement = accessibilityController.accessibleElementById(idValue);
            debug("Role: " + axElement.role);
            debug("Value: " + axElement.stringValue);

            var writable = axElement.isAttributeSettable("AXValue");
            debug("Writable: " + writable);

            document.getElementById(idValue).focus();

            axElement.setValue("Updated value for " + idValue);
        }

        testElement("contenteditable");
    } else {
        testFailed("Could not load accessibility controller");
    }

</script>

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