| <!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 text selection is reported correctly for textarea elements."); |
| |
| if (window.accessibilityController) { |
| |
| const textarea = document.getElementById('textarea'); |
| textarea.focus(); |
| window.textareaAccessible = |
| accessibilityController.accessibleElementById('textarea'); |
| window.emptyTextareaAccessible = |
| accessibilityController.accessibleElementById('textarea-empty'); |
| |
| // Select the entire contents. |
| textarea.select(); |
| shouldBe("textareaAccessible", "textareaAccessible.selectionAnchorObject"); |
| shouldBeZero("textareaAccessible.selectionAnchorOffset"); |
| shouldBe("textareaAccessible", "textareaAccessible.selectionFocusObject"); |
| shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset", |
| textarea.textLength); |
| |
| // Select entire lines. |
| for (let lineNumber = 0; lineNumber < 3; ++lineNumber) { |
| for (let directionIndex = 0; directionIndex < 2; |
| ++directionIndex) { |
| let selectionAnchorOffset = lineNumber * 7; |
| let selectionFocusOffset = (lineNumber + 1) * 7; |
| let direction = 'forward'; |
| if (directionIndex) |
| direction = 'backward'; |
| |
| textarea.setSelectionRange(selectionAnchorOffset, selectionFocusOffset, |
| direction); |
| shouldBe("textareaAccessible", "textareaAccessible.selectionAnchorObject"); |
| shouldBeEqualToNumber("textareaAccessible.selectionAnchorOffset", |
| directionIndex ? selectionFocusOffset : selectionAnchorOffset); |
| shouldBe("textareaAccessible", "textareaAccessible.selectionFocusObject"); |
| shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset", |
| directionIndex ? selectionAnchorOffset : selectionFocusOffset); |
| } |
| } |
| |
| const 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", 21); |
| shouldBe("textareaAccessible", "textareaAccessible.selectionFocusObject"); |
| shouldBeEqualToNumber("textareaAccessible.selectionFocusOffset", 14); |
| |
| emptyTextarea.focus(); |
| shouldBe("emptyTextareaAccessible", "emptyTextareaAccessible.selectionAnchorObject"); |
| shouldBeZero("emptyTextareaAccessible.selectionAnchorOffset"); |
| shouldBe("emptyTextareaAccessible", "emptyTextareaAccessible.selectionFocusObject"); |
| shouldBeZero("emptyTextareaAccessible.selectionFocusOffset"); |
| |
| // Setting an invalid selection should not be visible. |
| emptyTextarea.setSelectionRange(1, 1); |
| shouldBeZero("emptyTextareaAccessible.selectionAnchorOffset"); |
| shouldBeZero("emptyTextareaAccessible.selectionFocusOffset"); |
| |
| } |
| </script> |
| |
| </body> |
| </html> |