Index: third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html |
diff --git a/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html b/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c779d57999a5ff27784d1388fd8608672ff0a320 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/accessibility/set-selection-child-offset.html |
@@ -0,0 +1,132 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+ |
+<span id="span1">this is a<a id="link" href="#1">test</a></span> |
+<span id="span2">of selection</span> |
+ |
+<script> |
+ var sel = null; |
+ function updateSelectedRangeFromPage() { |
+ sel = window.getSelection().getRangeAt(0); |
+ } |
+ |
+ // The accessibility tree contains a group with 3 children, select each. |
+ test(function() |
+ { |
+ assert_not_equals(window.accessibilityController, undefined, 'This test requires accessibilityController'); |
+ |
+ var axGroup = accessibilityController.accessibleElementById("link").parentElement(); |
dmazzoni
2016/09/15 16:32:36
What element does this correspond to? Is it not sp
David Tseng
2016/09/15 18:34:28
The idea was to use an example where the ax tree r
|
+ assert_equals(axGroup.role, "AXRole: AXGroup"); |
+ |
+ // An insertion point before the first child. |
+ axGroup.setSelection(axGroup, 0, axGroup, 0); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), ""); |
+ assert_true(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "this is a"); |
+ |
+ // A straight-forward selection of the first child. |
+ axGroup.setSelection(axGroup, 0, axGroup, 1); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "this is a"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "this is a"); |
+ assert_equals(sel.endOffset, 9); |
+ assert_equals(sel.endContainer.textContent, "this is a"); |
+ |
+ // Another insertion point after the first child, before the second. |
+ axGroup.setSelection(axGroup, 1, axGroup, 1); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), ""); |
+ assert_true(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 9); |
+ assert_equals(sel.startContainer.textContent, "this is a"); |
+ |
+ // A selection demonstrating ax can use child indicies to select whitespace only in the DOM (second child). |
dmazzoni
2016/09/15 16:32:36
What do you mean by whitespace only in the DOM?
David Tseng
2016/09/15 18:34:28
Were you expecting a line break (either a node or
|
+ axGroup.setSelection(axGroup, 1, axGroup, 2); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "test\n"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "test"); |
+ // Assert the endContainer comes *after* the node above. |
+ assert_equals(sel.endContainer.previousSibling.lastChild.lastChild, sel.startContainer); |
dmazzoni
2016/09/15 16:32:36
I'm worried that this is really fragile and will b
David Tseng
2016/09/15 18:34:28
This is the DOM tree; what type of refactoring are
dmazzoni
2016/09/15 21:06:43
How about this: add comments next to the two types
|
+ assert_equals(sel.endOffset, 1); |
+ assert_equals(sel.endContainer.textContent, "\n"); |
+ |
+ // Next, another insertion point between second and third child. |
+ axGroup.setSelection(axGroup, 2, axGroup, 2); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), ""); |
+ assert_true(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 1); |
+ assert_equals(sel.startContainer.textContent, "\n"); |
+ |
+ // Select the third child. |
+ axGroup.setSelection(axGroup, 2, axGroup, 3); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "of selection"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "of selection"); |
+ assert_equals(sel.endOffset, 12); |
+ assert_equals(sel.endContainer.textContent, "of selection"); |
+ |
+ // Select the first and second children. |
+ axGroup.setSelection(axGroup, 0, axGroup, 2); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "this is atest\n"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "this is a"); |
+ assert_equals(sel.endOffset, 1); |
+ assert_equals(sel.endContainer.textContent, "\n"); |
+ |
+ // Select the second and third children. |
+ axGroup.setSelection(axGroup, 1, axGroup, 3); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "test\nof selection"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "test"); |
+ assert_equals(sel.endOffset, 12); |
+ assert_equals(sel.endContainer.textContent, "of selection"); |
+ |
+ // Select everything. |
+ axGroup.setSelection(axGroup, 0, axGroup, 3); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), "this is atest\nof selection"); |
+ assert_false(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.endContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 0); |
+ assert_equals(sel.startContainer.textContent, "this is a"); |
+ assert_equals(sel.endOffset, 12); |
+ assert_equals(sel.endContainer.textContent, "of selection"); |
+ |
+ // Last, the insertion point after third child. |
+ axGroup.setSelection(axGroup, 3, axGroup, 3); |
+ updateSelectedRangeFromPage(); |
+ assert_equals(sel.toString(), ""); |
+ assert_true(sel.collapsed); |
+ assert_equals(sel.startContainer.constructor, Text); |
+ assert_equals(sel.startOffset, 12); |
+ assert_equals(sel.startContainer.textContent, "of selection"); |
+ }, "Select child node at index."); |
+</script> |