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

<div>
  <input id="text1" type="text" value="Value">
  <input id="checkbox1" type="checkbox" checked>
  <input id="number1" type="number" value="123">
  <input id="radio1" type="radio" checked>
  <input id="slider1" type="range" min="1" max="10" value="5">
  <input id="submit1" type="submit">
  <select id="combobox1"><option>1<option selected>2</select>
  <select multiple id="listbox1"><option>1<option selected>2</select>
  <textarea id="textarea1">Textarea</textarea>
</div>

<div contentEditable>
  <input id="text2" type="text" value="Value">
  <input id="checkbox2" type="checkbox" checked>
  <input id="number2" type="number" value="123">
  <input id="radio2" type="radio" checked>
  <input id="slider2" type="range" min="1" max="10" value="5">
  <input id="submit2" type="submit">
  <select id="combobox2"><option>1<option selected>2</select>
  <select multiple id="listbox2"><option>1<option selected>2</select>
  <textarea id="textarea2">Textarea</textarea>
</div>

<div id="console"></div>
<script>
description("This tests whether AXValue is writable for various form controls.");

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

    function check(id1, id2, expected1) {
        debug(id1);
        window.element1 = document.getElementById(id1);
        element1.focus();
        shouldBe("document.activeElement == element1", "true");
        window.axElement1 = accessibilityController.focusedElement;

        debug(id2);
        window.element2 = document.getElementById(id2);
        element2.focus();
        shouldBe("document.activeElement == element2", "true");
        window.axElement2 = accessibilityController.focusedElement;

        shouldBe("axElement1.isAttributeSettable('AXValue')", String(expected1));
        // If contentEditable, AXValue is always writable.
        shouldBe("axElement2.isAttributeSettable('AXValue')", "true");
        debug("");
    }

    // All text-like form controls should have a writable AXValue.
    check("text1", "text2", true);
    check("number1", "number2", true);
    check("textarea1", "textarea2", true);

    // A slider can set AXValue.
    check("slider1", "slider2", true);

    // Other controls whose contents or state can be user modified should have a read-only
    // AXValue for non-ATK-based platforms, unless those controls are inside contentEditable,
    // then everything should have a writable AXValue.
    isATK = accessibilityController.platformName == "atk";
    check("checkbox1", "checkbox2", isATK ? true : false);
    check("radio1", "radio2", isATK ? true : false);
    check("submit1", "submit2", false);
    check("combobox1", "combobox2", isATK ? true : false);
    check("listbox1", "listbox2", isATK ? true : false);
}

</script>

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