| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| |
| <div id="editable1" contenteditable="true">Hello1</div> |
| |
| <div id="editable2" contenteditable="true"> Hello2 </div> |
| |
| <h2 id="heading"> Hello2 </h2> |
| |
| <script> |
| test(() => { |
| const editable1 = document.getElementById('editable1'); |
| assert_class_string(editable1, 'HTMLDivElement'); |
| const textNode1 = editable1.firstChild; |
| assert_class_string(textNode1, 'Text'); |
| |
| const axEditable1 = accessibilityController.accessibleElementById('editable1'); |
| const axTextNode1 = axEditable1.childAtIndex(0); |
| assert_equals(axTextNode1.role, 'AXRole: AXStaticText'); |
| assert_equals(axTextNode1.name, 'Hello1'); |
| |
| axTextNode1.setSelection(axTextNode1, 0, axTextNode1, 6); |
| |
| const selection = getSelection(); |
| // "Before object" positions at a text node are always adjusted to be before |
| // the first character of the text node itself. |
| // This ensures that to otherwise identical AX positions will have the same |
| // DOM position. |
| assert_equals(selection.anchorNode, textNode1, 'anchorNode'); |
| assert_equals(selection.anchorOffset, 0, 'anchorOffset'); |
| assert_equals(selection.focusNode, textNode1, 'focusNode'); |
| assert_equals(selection.focusOffset, 6, 'focusOffset'); |
| assert_equals(selection.toString(), 'Hello1', 'getSelection.toString()'); |
| }, 'Using accessible APIs to set selection works when there is no extra whitespace.'); |
| |
| test(() => { |
| const editable2 = document.getElementById('editable2'); |
| assert_class_string(editable2, 'HTMLDivElement'); |
| const textNode2 = editable2.firstChild; |
| assert_class_string(textNode2, 'Text'); |
| |
| const axEditable2 = accessibilityController.accessibleElementById('editable2'); |
| const axTextNode2 = axEditable2.childAtIndex(0); |
| assert_equals(axTextNode2.role, 'AXRole: AXStaticText'); |
| assert_equals(axTextNode2.name, 'Hello2'); |
| |
| axTextNode2.setSelection(axTextNode2, 0, axTextNode2, 6); |
| |
| const selection = getSelection(); |
| // Anchor and focus offsets are DOM base and are therefore adjusted to |
| // account for whitespace. |
| assert_equals(selection.anchorNode, textNode2, 'anchorNode'); |
| assert_equals(selection.anchorOffset, 2, 'anchorOffset'); |
| assert_equals(selection.focusNode, textNode2, 'focusNode'); |
| assert_equals(selection.focusOffset, 8, 'focusOffset'); |
| assert_equals(selection.toString(), 'Hello2', 'getSelection.toString()'); |
| }, 'Using accessible APIs to set selection works even with non-visible whitespace.'); |
| |
| test(() => { |
| const heading = document.getElementById('heading'); |
| assert_class_string(heading, 'HTMLHeadingElement'); |
| const headingText = heading.firstChild; |
| assert_class_string(headingText, 'Text'); |
| |
| const axHeading = accessibilityController.accessibleElementById('heading'); |
| assert_equals(axHeading.role, 'AXRole: AXHeading'); |
| |
| // Select all the children in the heading. |
| axHeading.setSelection(axHeading, 0, axHeading, 1); |
| |
| const selection = getSelection(); |
| assert_equals(selection.anchorNode, headingText, 'anchorNode'); |
| assert_equals(selection.anchorOffset, 2, 'anchorOffset'); |
| assert_equals(selection.focusNode, heading, 'focusNode'); |
| assert_equals(selection.focusOffset, 1, 'focusOffset'); |
| assert_equals(selection.toString(), 'Hello2', 'getSelection.toString()'); |
| }, 'Use accessible APIs to set selection on all the children of an element rather than a static text node.'); |
| </script> |