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

Unified Diff: third_party/WebKit/LayoutTests/accessibility/selection-affinity.html

Issue 2191833003: Use text affinity to return correct accessible line boundaries. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix bug in browser_accessibility_win.cc Created 4 years, 5 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: third_party/WebKit/LayoutTests/accessibility/selection-affinity.html
diff --git a/third_party/WebKit/LayoutTests/accessibility/selection-affinity.html b/third_party/WebKit/LayoutTests/accessibility/selection-affinity.html
new file mode 100644
index 0000000000000000000000000000000000000000..e40d98b6f961d0f41e8de0e8c9ac6de3f582e46e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/accessibility/selection-affinity.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+
+<div id="main" role="main">
+
+ <p style="width: 3em; border: 1px solid #000;">
+ a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z
+ </p>
+
+</div>
+<div id="console"></div>
+
+<script>
+ test(function()
+ {
+ // Create a range selecting more and more characters of text until
+ // the bounding rect has a nonzero width, indicating we got the first
+ // printing character.
+ var text = document.querySelector('p').firstChild;
+ var range = document.createRange();
+ range.setStart(text, 0);
+ var i = 0;
+ var bounds;
+ do {
+ range.setEnd(text, i);
+ bounds = range.getBoundingClientRect();
+ i++;
+ } while (bounds.width == 0);
+
+ // Keep extending the range until the height increases, indicating we
+ // got more than one line of text.
+ var startCharIndex = i - 2;
+ var oneLineHeight = bounds.height;
+ do {
+ range.setEnd(text, i);
+ bounds = range.getBoundingClientRect();
+ i++;
+ } while (bounds.height == oneLineHeight);
+ var endCharIndex = i - 2;
+
+ // Now we can create a range for exactly the first line of text.
+ range.setStart(text, startCharIndex);
+ range.setEnd(text, endCharIndex);
+ var firstLineBounds = range.getBoundingClientRect();
+
+ // Also create a range for the second character of the second line of text.
+ range.setStart(text, endCharIndex + 1);
+ range.setEnd(text, endCharIndex + 2);
+ var secondLineBounds = range.getBoundingClientRect();
+
+ // Click to place the cursor at the end of the first line.
+ eventSender.mouseMoveTo(firstLineBounds.right, firstLineBounds.top + 5);
+ eventSender.mouseDown();
+ eventSender.mouseUp();
+
+ // Ensure the selection is at the right place.
+ var sel = window.getSelection();
+ assert_equals(sel.anchorNode, text);
+ assert_equals(sel.anchorOffset, endCharIndex);
+
+ // Ensure the accessible selection is at the same place in the
+ // accessibility tree, with UPSTREAM affinity.
+ var axRoot = accessibilityController.rootElement;
+ assert_equals(axRoot.selectionAnchorObject.role, "AXRole: AXStaticText");
+ assert_equals(axRoot.selectionAnchorObject.name, "a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z");
+ assert_equals(axRoot.selectionAnchorOffset, endCharIndex - startCharIndex);
+ assert_equals(axRoot.selectionAnchorAffinity, "upstream");
+
+ // Click to place the cursor at the beginning of the next line.
+ eventSender.mouseMoveTo(firstLineBounds.left, secondLineBounds.top + 5);
+ eventSender.mouseDown();
+ eventSender.mouseUp();
+
+ // Ensure the selection is at the right place.
+ var sel = window.getSelection();
+ assert_equals(sel.anchorNode, text);
+ assert_equals(sel.anchorOffset, endCharIndex);
+
+ // Ensure the accessible selection is at the same place in the
+ // accessibility tree, with DOWNSTREAM affinity.
+ assert_equals(axRoot.selectionAnchorObject.role, "AXRole: AXStaticText");
+ assert_equals(axRoot.selectionAnchorObject.name, "a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z");
+ assert_equals(axRoot.selectionAnchorOffset, endCharIndex - startCharIndex);
+ assert_equals(axRoot.selectionAnchorAffinity, "downstream");
+ }, "Test upstream and downstream affinity of text selection.");
+</script>

Powered by Google App Engine
This is Rietveld 408576698