| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../resources/js-test.js"></script> |
| </head> |
| <body> |
| |
| <p id="paragraph" style="width: 30em;"> |
| The Hitchhiker's Guide to the |
| |
| Galaxy has a few things to say on the subject of resumés. |
| A resumé, it says, is about the most massively useful thing an interstellar hitch hiker can have. |
| </p> |
| |
| <p id="description"></p> |
| |
| <div id="console"></div> |
| |
| <script> |
| |
| description("Tests that we can compute the bounds of a range of text from the accessibility tree."); |
| |
| if (window.accessibilityController) { |
| var axParagraph = accessibilityController.accessibleElementById('paragraph'); |
| var axStaticText = axParagraph.childAtIndex(0); |
| |
| var text = axStaticText.name; |
| shouldBe("text.length", "185"); |
| debug("Accessible text: \"" + text + "\""); |
| |
| // Append the text from all of the inline text boxes and make sure we get the same text. |
| var appendedInlineText = ''; |
| for (var i = 0; i < axStaticText.childrenCount; i++) { |
| var axInlineTextBox = axStaticText.childAtIndex(i); |
| appendedInlineText += axInlineTextBox.name; |
| } |
| shouldBe("appendedInlineText", "text"); |
| |
| // For several possible words in the text, get the bounds of the word in the accessibility |
| // tree, and also in the DOM, and assert that they're the same, within one pixel. |
| var paragraph = document.getElementById('paragraph'); |
| var domText = paragraph.innerHTML; |
| function testWord(word) { |
| debug('\nTesting bounds of word: ' + word); |
| |
| // Get the bounds from the accessibility tree. |
| window.wordAxIndex = text.indexOf(word); |
| eval('window.axBounds = ' + axStaticText.boundsForRange(wordAxIndex, wordAxIndex + word.length) + ';'); |
| |
| // Get the bounds from the DOM. |
| window.domIndex = domText.indexOf(word); |
| var range = new Range(); |
| range.setStart(paragraph.firstChild, domIndex); |
| range.setEnd(paragraph.firstChild, domIndex + word.length); |
| window.rangeBounds = range.getBoundingClientRect(); |
| |
| // Make sure they're the same, within one pixel. |
| shouldBeCloseTo("axBounds.x", rangeBounds.left, 1); |
| shouldBeCloseTo("axBounds.y", rangeBounds.top, 1); |
| shouldBeCloseTo("axBounds.width", rangeBounds.width, 1); |
| shouldBeCloseTo("axBounds.height", rangeBounds.height, 1); |
| } |
| testWord('The'); |
| testWord('Hitchhiker'); |
| testWord('Guide'); |
| testWord('interstellar'); |
| } |
| </script> |
| |
| </body> |
| </html> |