126 lines
4.7 KiB
HTML
126 lines
4.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/atk-helpers.js"></script>
|
|
</head>
|
|
|
|
<body id="body">
|
|
<h1 id='firstChild'>A text header</h1>
|
|
|
|
<p>A paragraph <a href='http://foo.bar.baz/'>with a link</a> in the middle</p>
|
|
|
|
<ol>
|
|
<li>A list item</li>
|
|
<li><span style='display:block;'>Block span in a list item</span><span>Inline span in a list item</span></li>
|
|
<li><a href='foo'><span style='display:block;'>Block span in a link in a list item</span><span>Inline span in a link in a list item</span></a></li>
|
|
</ol>
|
|
|
|
<select><option selected value='foo'>An option in a combo box</option></select>
|
|
|
|
<input type='text' name='foo' value='foo bar baz' />
|
|
|
|
<table border=1>
|
|
<tr>
|
|
<td>a table cell</td>
|
|
<td></td>
|
|
<td><a href='foo'><span style='display:block;'>Block span in a link in a table cell</span><span>Inline span in a link in a table cell</span></a></td>
|
|
<td><span style='display:block;'>Block span in a table cell</span><span>Inline span in a table cell</span></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
var caretMovedData;
|
|
|
|
function globalListener(object, name, offset)
|
|
{
|
|
var role = object.role.replace('AXRole: AX', '');
|
|
if (name == 'AXTextCaretMoved') {
|
|
caretMovedData += role + '|' + offset;
|
|
}
|
|
}
|
|
|
|
function resetCaretOffsetForObject(object, offset)
|
|
{
|
|
caretMovedData = '';
|
|
setCaretOffset(object, offset);
|
|
}
|
|
|
|
if (window.internals)
|
|
internals.settings.setCaretBrowsingEnabled(true);
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
if (window.accessibilityController) {
|
|
window.jsTestIsAsync = true;
|
|
|
|
accessibilityController.addNotificationListener(globalListener);
|
|
root = accessibilityController.accessibleElementById('firstChild').parentElement();
|
|
shouldBe('root.childrenCount', '5');
|
|
|
|
/* It should be possible to place the caret inside a header. */
|
|
h1 = root.childAtIndex(0);
|
|
caretMovedData = '';
|
|
shouldBeTrue('setCaretOffset(h1, 5)');
|
|
shouldBeEqualToString('caretMovedData', 'Heading|5');
|
|
|
|
/* It should be possible to place the caret inside a paragraph and a link. */
|
|
p1 = root.childAtIndex(1);
|
|
resetCaretOffsetForObject(p1, 5);
|
|
shouldBeEqualToString('caretMovedData', 'Paragraph|5');
|
|
resetCaretOffsetForObject(p1, 20);
|
|
shouldBeEqualToString('caretMovedData', 'Paragraph|20');
|
|
resetCaretOffsetForObject(p1, 30);
|
|
shouldBecomeEqualToString('caretMovedData', 'Paragraph|30', function () {
|
|
caretMovedData = '';
|
|
link = p1.childAtIndex(0);
|
|
shouldBeTrue('setCaretOffset(link, 5)');
|
|
/* Positions inside links are reported relative to the paragraph. */
|
|
shouldBeEqualToString('caretMovedData', 'Paragraph|17');
|
|
|
|
list = root.childAtIndex(2);
|
|
shouldBeEqualToString('list.role', 'AXRole: AXList');
|
|
shouldBe('list.childrenCount', '3');
|
|
listItem = list.childAtIndex(2);
|
|
/* It's not possible to place the caret inside an item's marker. */
|
|
shouldBe('setCaretOffset(listItem, 1)', 'false');
|
|
/* It should be possible to place the caret inside an item's text. */
|
|
caretMovedData = '';
|
|
shouldBe('setCaretOffset(listItem, 5)', 'true');
|
|
shouldBeEqualToString('caretMovedData', 'ListItem|5');
|
|
|
|
panel = root.childAtIndex(3);
|
|
comboBox = panel.childAtIndex(0);
|
|
shouldBeEqualToString('comboBox.role', 'AXRole: AXComboBox');
|
|
menuPopup = comboBox.childAtIndex(0);
|
|
shouldBeEqualToString('menuPopup.role', 'AXRole: AXMenu');
|
|
comboBoxOption = menuPopup.childAtIndex(0);
|
|
shouldBeEqualToString('comboBoxOption.role', 'AXRole: AXMenuItem');
|
|
/* It's not possible to place the caret inside an option for a combobox. */
|
|
shouldBe('setCaretOffset(comboBoxOption, 1)', 'false');
|
|
textEntry = panel.childAtIndex(1);
|
|
shouldBeEqualToString('textEntry.role', 'AXRole: AXTextField');
|
|
resetCaretOffsetForObject(textEntry, 5);
|
|
shouldBeEqualToString('caretMovedData', 'TextField|5');
|
|
|
|
table = root.childAtIndex(4);
|
|
shouldBeEqualToString('table.role', 'AXRole: AXTable');
|
|
shouldBe('table.childrenCount', '1');
|
|
row = table.childAtIndex(0);
|
|
shouldBeEqualToString('row.role', 'AXRole: AXRow');
|
|
tableCell = row.childAtIndex(0);
|
|
shouldBeEqualToString('tableCell.role', 'AXRole: AXCell');
|
|
resetCaretOffsetForObject(tableCell, 2);
|
|
shouldBecomeEqualToString('caretMovedData', 'Cell|2', finishJSTest);
|
|
});
|
|
}
|
|
|
|
description("This test is replicated from old file testatk.c and tests various scenarios of caret movement: setting caret offset and receiving text-caret-moved signal.");
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|