chromium/third_party/blink/web_tests/accessibility/textarea-caret-position.html

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

    <textarea id="textarea" rows="3" cols="40">
Line 1
Line 2
Line 3
    </textarea>

    <textarea id="textarea-empty" rows="5" cols="40"></textarea>

    <script>
        description("This tests that caret position is reported correctly for textarea elements.");

        if (window.accessibilityController) {

            let textarea = document.getElementById('textarea');
            textarea.focus();
            window.textareaAccessible =
                accessibilityController.accessibleElementById('textarea');
            window.emptyTextareaAccessible =
                accessibilityController.accessibleElementById('textarea-empty');

            for (let i = 0; i < 3; ++i) {
                for (let j = 0; j < 7; ++j) {
                    let caretPosition = i * 7 + j;
                    textarea.selectionStart = caretPosition;
                    textarea.selectionEnd = caretPosition;
                    shouldBe("textareaAccessible", "textareaAccessible.selectionAnchorObject");
                    shouldBeEqualToNumber("textareaAccessible.selectionAnchorOffset",
                        caretPosition);
                    shouldBe("textareaAccessible", "textareaAccessible.selectionFocusObject");
                    shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset",
                        caretPosition);
                }
            }

            let emptyTextarea = document.getElementById('textarea-empty');
            emptyTextarea.focus();
            // Each textarea remembers its own independent selection but
            // textareas that are not focused don't expose their selection
            // visually.
            shouldBe("emptyTextareaAccessible", "textareaAccessible.selectionAnchorObject");
            shouldBeEqualToNumber("textareaAccessible.selectionAnchorOffset", 0);
            shouldBe("emptyTextareaAccessible", "textareaAccessible.selectionFocusObject");
            shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset", 0);

            textarea.focus();
            shouldBe("textareaAccessible", "textareaAccessible.selectionAnchorObject");
            shouldBeEqualToNumber("textareaAccessible.selectionAnchorOffset", 20);
            shouldBe("textareaAccessible", "textareaAccessible.selectionFocusObject");
            shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset", 20);

            emptyTextarea.focus();
            shouldBe("emptyTextareaAccessible", "emptyTextareaAccessible.selectionAnchorObject");
            shouldBeZero("emptyTextareaAccessible.selectionAnchorOffset");
            shouldBe("emptyTextareaAccessible", "emptyTextareaAccessible.selectionFocusObject");
            shouldBeZero("emptyTextareaAccessible.selectionFocusOffset");

            // Setting the caret at an invalid offset should not move it.
            emptyTextarea.setSelectionRange(1, 1);
            shouldBeZero("emptyTextareaAccessible.selectionAnchorOffset");
            shouldBeZero("emptyTextareaAccessible.selectionFocusOffset");

        }
    </script>

  </body>
</html>