blob: d98a4185c15f229ab088907fd78b20b3a2105c42 [file] [log] [blame]
<script src="../resources/js-test.js"></script>
<textarea id="textarea" cols=30 rows=20>This textarea contains several lines of text. It demonstrates
how updating a single InlineTextBox is a lot more efficient than updating the whole TextArea.</textarea>
<p id="description"></p>
<div id="console"></div>
description("Demonstrates that when typing in a textarea, not all of the InlineTextBoxes need to be updated for every character pressed.");
if (window.accessibilityController) {
function findAllDescendantsWithRole(axObject, role) {
if (axObject.role == role)
return [axObject];
var result = [];
for (var i = 0; i < axObject.childrenCount; i++)
result = result.concat(findAllDescendantsWithRole(axObject.childAtIndex(i), role));
return result;
var axTextarea = accessibilityController.accessibleElementById('textarea');
var inlineTextBoxesBefore = findAllDescendantsWithRole(axTextarea, 'AXRole: AXInlineTextBox');
var firstInlineTextBoxBefore = inlineTextBoxesBefore[0];
var lastInlineTextBoxBefore = inlineTextBoxesBefore[inlineTextBoxesBefore.length - 1];
document.getElementById("textarea").setSelectionRange(45, 45);
// Insert a character in the first paragraph.
document.execCommand("InsertText", false, 'x');
// The inline text boxes in the first paragraph change, but the
// inline text boxes in the last paragraph are reused.
var inlineTextBoxesAfter = findAllDescendantsWithRole(axTextarea, 'AXRole: AXInlineTextBox');
var firstInlineTextBoxAfter = inlineTextBoxesAfter[0];
var lastInlineTextBoxAfter = inlineTextBoxesAfter[inlineTextBoxesAfter.length - 1];
shouldBe("firstInlineTextBoxBefore.isEqual(firstInlineTextBoxAfter)", "false");
shouldBe("lastInlineTextBoxBefore.isEqual(lastInlineTextBoxAfter)", "true");