| <html><!-- webkit-test-runner [ IsAccessibilityIsolatedTreeEnabled=true ] --> |
| <head> |
| <script src="../../resources/accessibility-helper.js"></script> |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body id="body" role="group"> |
| |
| <div id="text1">Alpha Bravo</div> |
| <div id="text2"> Charlie Delta </div> |
| |
| <script> |
| var output = "This tests the intersectionWithSelectionRange API, which returns the range of characters in an AX element that are part of the document selection, if any.\n\n"; |
| |
| // Selects the specified range via DOM calls and returns the DOM selection object.. |
| async function selectNodeRange(nodeId0, offset0, nodeId1, offset1) { |
| let selection = window.getSelection(); |
| let range = document.createRange(); |
| range.setStart(document.getElementById(nodeId0).firstChild, offset0); |
| range.setEnd(document.getElementById(nodeId1).firstChild, offset1); |
| selection.removeAllRanges(); |
| selection.addRange(range); |
| return selection; |
| } |
| |
| async function runTest(nodeId0, offset0, nodeId1, offset1, expectedSelection, axElementId) { |
| output += `Selecting: ${nodeId0}:${offset0} - ${nodeId1}:${offset1}\n`; |
| selection = await selectNodeRange(nodeId0, offset0, nodeId1, offset1); |
| output += `Selected text: '${selection.toString().replace("\n", "\\n")}'\n`; |
| |
| // FIXME: change the await for notification listening. |
| webarea = accessibilityController.accessibleElementById("body"); |
| await waitFor(() => webarea.stringForTextMarkerRange(webarea.selectedTextMarkerRange()) == expectedSelection); |
| |
| axElement = accessibilityController.accessibleElementById(axElementId); |
| axChild = axElement.childAtIndex(0); |
| range = axChild.textMarkerRangeForElement(axChild); |
| output += `${axElementId} range: '${axChild.stringForTextMarkerRange(range)}'\n`; |
| |
| intersection = axChild.intersectionWithSelectionRange; |
| output += `Intersection: '${axChild.stringForTextMarkerRange(intersection)}'\n\n`; |
| } |
| |
| if (window.accessibilityController) { |
| window.jsTestIsAsync = true; |
| setTimeout(async () => { |
| await runTest("text1", 0, "text1", 5, "Alpha", "text1"); |
| await runTest("text1", 6, "text1", 11, "Bravo", "text1"); |
| await runTest("text2", 2, "text2", 9, "Charlie", "text2"); |
| await runTest("text2", 11, "text2", 16, "Delta", "text2"); |
| await runTest("text1", 6, "text2", 9, "Bravo\nCharlie", "text1"); |
| await runTest("text1", 0, "text1", 5, "Alpha", "text2"); |
| await runTest("text1", 6, "text2", 9, "Bravo\nCharlie", "text2"); |
| debug(output); |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| </body> |
| </html> |