<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta charset="utf-8"> 
<script src="../../resources/js-test-pre.js"></script>
</head>
<body id="body">

<div id="text">
Test1



Test2   Test3
</div>

<p id="description"></p>
<div id="console"></div>

<script>

    description("This tests that word navigation is working correctly with collapsed whitespaces.");
    
    if (window.accessibilityController) {
        
        var text = accessibilityController.accessibleElementById("text");
        // Get the actual text node.
        text = text.childAtIndex(0);
        
        // Check that we can get the second word "Test2"
        var textMarkerRange = text.textMarkerRangeForElement(text);
        var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        var currentMarker = advanceAndVerify(startMarker, 5, text);
        currentMarker = advanceAndVerify(currentMarker, 1, text);
        
        // Check that we can get the third word "Test3"
        currentMarker = advanceAndVerify(currentMarker, 5, text);
        currentMarker = advanceAndVerify(currentMarker, 1, text);
        
        function advanceAndVerify(currentMarker, offset, obj) {
            var previousMarker = currentMarker;
            for (var i = 0; i < offset; i++) {
                previousMarker = currentMarker;
                currentMarker = obj.nextTextMarker(previousMarker);
            }
            verifyWordRangeForTextMarker(previousMarker, currentMarker, obj);
            return currentMarker;
        }
        
        function replaceAttachmentInString(str) {
            var newline = '\n';
            str =  str.replace(String.fromCharCode(65532), "[ATTACHMENT]");
            str = str.replace(newline, "'line break'");
            return str;
        }
        
        function verifyWordRangeForTextMarker(preMarker, textMarker, obj) {
            var markerRange = obj.textMarkerRangeForMarkers(preMarker, textMarker);
            var currentCharacter = obj.stringForTextMarkerRange(markerRange);
            debug("Current character is: " + currentCharacter);
            
            var previousWordRange = obj.leftWordTextMarkerRangeForTextMarker(textMarker);
            var nextWordRange = obj.rightWordTextMarkerRangeForTextMarker(textMarker);
            var preWord = obj.stringForTextMarkerRange(previousWordRange);
            var nextWord = obj.stringForTextMarkerRange(nextWordRange);
            debug("Left word is: " + preWord);
            debug("Right word is: " + nextWord);
            
            var preWordStart = obj.previousWordStartTextMarkerForTextMarker(textMarker);
            var nextWordEnd = obj.nextWordEndTextMarkerForTextMarker(textMarker);
            var preAndNextWordRange = obj.textMarkerRangeForMarkers(preWordStart, nextWordEnd);
            var preAndNextWord = obj.stringForTextMarkerRange(preAndNextWordRange);
            debug("Pre word start to next word end: " + preAndNextWord + "\n");
        }
    }

</script>

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