<!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>
<p id="borked">This
                          paragraph
                                                      is
                                                                                                                                                                                                                                                                                                                                                                            borked!</p>

<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.testRunner && window.internals) {
    internals.settings.setCaretBrowsingEnabled(true);
    testRunner.dumpAsText();
}

if (window.accessibilityController) {
    accessibilityController.addNotificationListener(globalListener);
    borked = accessibilityController.accessibleElementById('borked');
    prefix = 'AXValue: '
    shouldBeTrueQuiet('borked.stringValue.substring(0, 9) == "' + prefix + '"');
    borkedTextLength = borked.stringValue.length - prefix.length
    shouldBe('borkedTextLength', '25');
    resetCaretOffsetForObject(borked, borkedTextLength - 1);
    shouldBeEqualToString('caretMovedData', 'Paragraph|24');
    resetCaretOffsetForObject(borked, borkedTextLength);
    shouldBeEqualToString('caretMovedData', 'Paragraph|25');
}

description("This test is replicated from old file testatk.c and tests text length, setting caret offset and receiving text-caret-moved signal on a paragraph with lots of whitespace.");

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
