chromium/third_party/blink/web_tests/accessibility/readonly.html

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

<div>
  <a id="link1" href="#">Link</a>
  <button id="button1">Button</button>
  A<input id="text1" type="text" value="Value">
  B<input id="text-readonly1" type="text" value="Value" readonly>
  C<input id="text-readonly2" type="text" value="Value" readonly aria-readonly="false">
  D<input id="checkbox1" type="checkbox" checked>
  E<input id="number1" type="number" value="123">
  F<input id="radio1" type="radio" checked>
  G<input id="slider1" type="range" min="1" max="10" value="5">
  H<input id="submit1" type="submit">
  I<select id="combobox1"><option>1<option selected>2</select>
  J<select multiple id="listbox1"><option>1<option selected>2</select>
  K<textarea id="textarea1">Textarea</textarea>
  L<textarea id="textarea-readonly1" readonly>Textarea</textarea>
  M<textarea id="textarea-readonly2" readonly aria-readonly="false">Textarea</textarea>
  N<div id="focusable1" tabindex="0">Focusable</div>
  <h5 id="heading1" tabindex="0">Heading</h5>
  <div id="div1" tabindex="0" aria-readonly="true">Plain div can't be readonly</div>
  <div id="aria-button1" tabindex="0" role="button" aria-readonly="false">ARIA button</div>
  <div id="aria-togglebutton1" tabindex="0" role="button" aria-pressed="false">ARIA toggle button</div>
  <div id="aria-link1" tabindex="0" role="link">ARIA link</div>
  <div id="aria-slider1" tabindex="0" role="slider" aria-readonly="true">ARIA slider</div>
  <div id="aria-progress1" tabindex="0" role="progressbar" aria-readonly="true">ARIA progress meter</div>
  <div id="aria-textbox1" tabindex="0" role="textbox" aria-readonly="true">ARIA textbox</div>
  <div id="contenteditable_root1" contentEditable>
    <button id="contenteditable_button1">Button</button>
  </div>
  <div id="contenteditable_root-readonly1" contentEditable aria-readonly="true">
  </div>
  <div id="contenteditable_root-readonly2" role="textbox" contentEditable aria-readonly="true">
  </div>
  <div id="contenteditable_root-readonly3" tabindex="0" role="textbox" contentEditable="false" aria-readonly="true">
  </div>

</div>

<div id="console"></div>
<script>
description("This tests which elements expose themselves as readonly. Readonly here refers to whether the item is not editable, not whether a control value can be changed vs if it's unavailable.");

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

    function check(id, expected_readonly) {
        debug(id);
        window.element = document.getElementById(id);
        element.focus();
        shouldBe("document.activeElement == element", "true");
        window.axElement = accessibilityController.focusedElement;

        shouldBe("axElement.isReadOnly", "" + expected_readonly);
        debug("");
    }

    check("link1", false);
    check("button1", false);
    check("text1", false);
    check("text-readonly1", true);
    check("text-readonly2", true);
    check("checkbox1", false);
    check("number1", false);
    check("radio1", false);
    check("slider1", false);
    check("submit1", false);
    check("combobox1", false);
    check("listbox1", false);
    check("textarea1", false);
    check("textarea-readonly1", true);
    check("textarea-readonly2", true);
    check("focusable1", false);
    check("heading1", false);
    check("div1", false);
    check("aria-button1", false);
    check("aria-togglebutton1", false);
    check("aria-link1", false);
    check("aria-slider1", true);
    check("aria-progress1", false);
    check("aria-textbox1", true);
    check("contenteditable_root1", false);
    check("contenteditable_button1", false);
    // This is correct according to ARIA spec, as aria-readonly is supported
    // on specific roles only -- it is not a universal ARIA property.
    check("contenteditable_root-readonly1", false);
    // This is correct according to HTML-AAM, the readonly state is ignored if
    // the element is set to contenteditable and readonly="true",
    check("contenteditable_root-readonly2", false);
    check("contenteditable_root-readonly3", true);
}

</script>

</body>
</html>