Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Unified Diff: LayoutTests/accessibility/contenteditable-caret-position.html

Issue 1185343003: Implements the ability to get and set the caret position and the current selection from anywhere in… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Addressed more comments from reviewer. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/accessibility/contenteditable-caret-position.html
diff --git a/LayoutTests/accessibility/contenteditable-caret-position.html b/LayoutTests/accessibility/contenteditable-caret-position.html
index a780c263d4cfe29ee18865a55e85da94791646b6..d5358f8be24f9db28a52ad9767a2a423381ccf30 100644
--- a/LayoutTests/accessibility/contenteditable-caret-position.html
+++ b/LayoutTests/accessibility/contenteditable-caret-position.html
@@ -1,94 +1,156 @@
<!DOCTYPE html>
-<html>
- <head>
- <script src="../resources/js-test.js"></script>
- </head>
- <body>
+<script src="../resources/js-test.js"></script>
+
+<div id="main" role="main">
<div id="contenteditable-textbox" role="textbox" contenteditable="true">
- <div id="contenteditable-line1">Line 1</div>
- <textarea id="contenteditable-line2" rows="1" cols="40">Line 2</textarea>
+ <div id="contenteditable-line1">Line 1</div>
+ <textarea id="contenteditable-line2" rows="1" cols="40">Line 2</textarea>
</div>
<div id="contenteditable-div" contenteditable>
- <p id="paragraph1">Line 1<br>Line 2</p>
- <p id="paragraph2">Line 3</p>
+ <p id="paragraph1">Line 1<br>Line 2</p>
+ <p id="paragraph2">Line 3</p>
</div>
- <script>
- description("This tests that caret position is reported correctly for contenteditable elements.");
-
- if (window.accessibilityController) {
- var selection = window.getSelection();
- var selectionRange = document.createRange();
-
- var textbox = document.getElementById("contenteditable-textbox");
- textbox.focus();
- var textboxAccessible =
- accessibilityController.accessibleElementById(
- 'contenteditable-textbox');
-
- shouldBeZero("textboxAccessible.selectionStart");
- shouldBeZero("textboxAccessible.selectionEnd");
-
- var line1 = document.getElementById("contenteditable-line1");
- selectionRange.setStart(line1.firstChild, 1);
- selectionRange.setEnd(line1.firstChild, 1);
- selection.removeAllRanges();
- selection.addRange(selectionRange);
- shouldBeEqualToNumber("textboxAccessible.selectionStart", 1);
- shouldBeEqualToNumber("textboxAccessible.selectionEnd", 1);
-
- var line2 = document.getElementById("contenteditable-line2");
- line2.focus();
- // The selection should have been removed from the line1 div.
- shouldBeZero("textboxAccessible.selectionStart");
- shouldBeZero("textboxAccessible.selectionEnd");
-
- var line2Accessible = accessibilityController.focusedElement;
- shouldBeZero("line2Accessible.selectionStart");
- shouldBeZero("line2Accessible.selectionEnd");
- line2.setSelectionRange(3, 3);
- shouldBeEqualToNumber("line2Accessible.selectionStart", 3);
- shouldBeEqualToNumber("line2Accessible.selectionEnd", 3);
-
- var contenteditable = document.getElementById('contenteditable-div');
- contenteditable.focus();
- var line1 = document.getElementById('paragraph1').firstChild;
- var line2 = document.getElementById('paragraph1').lastChild;
- var line3 = document.getElementById('paragraph2').firstChild;
- var contenteditableLines = [ line1, line2, line3 ];
- var contenteditableAccessible =
- accessibilityController.accessibleElementById(
- 'contenteditable-div');
-
- for (var lineNumber = 0; lineNumber < 3; ++lineNumber) {
- var lineOffset = lineNumber * 7;
- // Paragraphs should have an extra blank line between them.
- if (lineNumber == 2)
- lineOffset += 1;
-
- for (var characterOffset = 0; characterOffset < 7; ++characterOffset) {
- caretPosition = lineOffset + characterOffset;
-
- selectionRange.setStart(contenteditableLines[lineNumber], characterOffset);
- selectionRange.setEnd(contenteditableLines[lineNumber], characterOffset);
- selection.removeAllRanges();
- selection.addRange(selectionRange);
-
- shouldBeEqualToNumber("contenteditableAccessible.selectionStart",
- caretPosition);
- shouldBeEqualToNumber("contenteditableAccessible.selectionEnd",
- caretPosition);
- shouldBeEqualToNumber("contenteditableAccessible.selectionStartLineNumber",
- lineNumber);
- shouldBeEqualToNumber("contenteditableAccessible.selectionEndLineNumber",
- lineNumber);
- }
+</div>
+
+<script>
+ description("This tests that caret position is reported correctly for contenteditable elements.");
+
+ if (window.accessibilityController) {
+ var selection = window.getSelection();
+ var selectionRange = document.createRange();
+ var mainAccessible = accessibilityController.accessibleElementById("main");
+ var rootAccessible = accessibilityController.rootElement;
+
+ shouldBeZero("mainAccessible.selectionStart");
+ shouldBeZero("mainAccessible.selectionEnd");
+ shouldBeZero("mainAccessible.selectionStartLineNumber");
+ shouldBeZero("mainAccessible.selectionEndLineNumber");
+
+ shouldBeNull("rootAccessible.selectionAnchorObject");
+ shouldBeEqualToNumber("rootAccessible.selectionAnchorOffset", -1);
+ shouldBeNull("rootAccessible.selectionFocusObject");
+ shouldBeEqualToNumber("rootAccessible.selectionFocusOffset", -1);
+
+ var textbox = document.getElementById("contenteditable-textbox");
+ textbox.focus();
+ var textboxAccessible =
+ accessibilityController.accessibleElementById(
+ "contenteditable-textbox");
+
+ shouldBeZero("textboxAccessible.selectionStart");
+ shouldBeZero("textboxAccessible.selectionEnd");
+
+ var line1 = document.getElementById("contenteditable-line1");
+ var line1Accessible = accessibilityController.accessibleElementById("line1");
+ var line1TextAccessible = line1Accessible.getChildAtIndex(0);
+
+ selectionRange.setStart(line1.firstChild, 1);
+ selectionRange.setEnd(line1.firstChild, 1);
+ selection.removeAllRanges();
+ selection.addRange(selectionRange);
+
+ shouldBeEqualToNumber("textboxAccessible.selectionStart", 1);
+ shouldBeEqualToNumber("textboxAccessible.selectionEnd", 1);
+
+ shouldBeEqualToNumber("mainAccessible.selectionStart", 1);
+ shouldBeEqualToNumber("mainAccessible.selectionEnd", 1);
+ shouldBeZero("mainAccessible.selectionStartLineNumber");
+ shouldBeZero("mainAccessible.selectionEndLineNumber");
+
+ shouldBeEqual("rootAccessible.selectionAnchorObject", "line1TextAccessible");
+ shouldBeEqualToNumber("rootAccessible.selectionAnchorOffset", 1);
+ shouldBeEqual("rootAccessible.selectionFocusObject", "line1TextAccessible");
+ shouldBeEqualToNumber("rootAccessible.selectionFocusOffset", 1);
+
+
+ var line2 = document.getElementById("contenteditable-line2");
+ line2.focus();
+
+ // The selection should have been removed from the line1 div.
+ shouldBeZero("textboxAccessible.selectionStart");
+ shouldBeZero("textboxAccessible.selectionEnd");
+ shouldBeZero("mainAccessible.selectionStart");
+ shouldBeZero("mainAccessible.selectionEnd");
+ shouldBeNull("rootAccessible.selectionAnchorObject");
+ shouldBeEqualToNumber("rootAccessible.selectionAnchorOffset", -1);
+ shouldBeNull("rootAccessible.selectionFocusObject");
+ shouldBeEqualToNumber("rootAccessible.selectionFocusOffset", -1);
+
+ var line2Accessible = accessibilityController.focusedElement;
+ shouldBeZero("line2Accessible.selectionStart");
+ shouldBeZero("line2Accessible.selectionEnd");
+ line2.setSelectionRange(3, 3);
+
+ shouldBeEqualToNumber("line2Accessible.selectionStart", 3);
+ shouldBeEqualToNumber("line2Accessible.selectionEnd", 3);
+ shouldBeZero("line2Accessible.selectionStartLineNumber");
+ shouldBeZero("line2Accessible.selectionEndLineNumber");
+
+ shouldBeEqualToNumber("mainAccessible.selectionStart", 3);
+ shouldBeEqualToNumber("mainAccessible.selectionEnd", 3);
+ shouldBeZero("mainAccessible.selectionStartLineNumber");
+ shouldBeZero("mainAccessible.selectionEndLineNumber");
+
+ shouldBeEqual("rootAccessible.selectionAnchorObject", "line2Accessible");
+ shouldBeEqualToNumber("rootAccessible.selectionAnchorOffset", 1);
+ shouldBeEqual("rootAccessible.selectionFocusObject", "line2Accessible");
+ shouldBeEqualToNumber("rootAccessible.selectionFocusOffset", 1);
+
+
+ var contenteditable = document.getElementById("contenteditable-div");
+ contenteditable.focus();
+ // The offset from the beginning of the main div to the first character of
+ // contenteditable-div. The whole of the textarea is treated as a single embedded object.
+ var mainOffset = 9;
+ var line1 = document.getElementById("paragraph1").firstChild;
+ var line2 = document.getElementById("paragraph1").lastChild;
+ var line3 = document.getElementById("paragraph2").firstChild;
+ var contenteditableLines = [ line1, line2, line3 ];
+ var contenteditableAccessible =
+ accessibilityController.accessibleElementById(
+ "contenteditable-div");
+
+ for (var lineNumber = 0; lineNumber < 3; ++lineNumber) {
+ var lineOffset = lineNumber * 7;
+ // Paragraphs should have an extra blank line between them.
+ if (lineNumber == 2)
+ lineOffset += 1;
+
+ for (var characterOffset = 0; characterOffset < 7; ++characterOffset) {
+ caretPosition = lineOffset + characterOffset;
+
+ selectionRange.setStart(contenteditableLines[lineNumber], characterOffset);
+ selectionRange.setEnd(contenteditableLines[lineNumber], characterOffset);
+ selection.removeAllRanges();
+ selection.addRange(selectionRange);
+
+ shouldBeEqualToNumber("contenteditableAccessible.selectionStart",
+ caretPosition);
+ shouldBeEqualToNumber("contenteditableAccessible.selectionEnd",
+ caretPosition);
+ shouldBeEqualToNumber("contenteditableAccessible.selectionStartLineNumber",
+ lineNumber);
+ shouldBeEqualToNumber("contenteditableAccessible.selectionEndLineNumber",
+ lineNumber);
+
+ shouldBeEqualToNumber("mainAccessible.selectionStart",
+ mainOffset + caretPosition);
+ shouldBeEqualToNumber("mainAccessible.selectionEnd",
+ mainOffset + caretPosition);
+ shouldBeEqualToNumber("mainAccessible.selectionStartLineNumber",
+ lineNumber);
+ shouldBeEqualToNumber("mainAccessible.selectionEndLineNumber",
+ lineNumber);
+
+ shouldBeEqualToString("rootAccessible.selectionAnchorObject.stringValue", "");
+ shouldBeEqualToNumber("rootAccessible.selectionAnchorOffset", 1);
+ shouldBeEqualToString("rootAccessible.selectionFocusObject.stringValue", "");
+ shouldBeEqualToNumber("rootAccessible.selectionFocusOffset", 1);
}
-
}
- </script>
- </body>
-</html>
+ }
+</script>
« no previous file with comments | « no previous file | Source/modules/accessibility/AXInlineTextBox.h » ('j') | Source/modules/accessibility/AXLayoutObject.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698