<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta charset="utf-8"> 
<script src="../../resources/js-test-pre.js"></script>
</head>
<style>
.userselect { user-select: none; -webkit-user-select: none; }
</style>
<body id="body">

<div id="text1" tabindex="0">
para<span>graph</span>
test
</div>

<div id="text2">
Test Content<span contenteditable="true">editable is working.</span>
</div>

<div id="text3">
c <img src="#" aria-label="blah" style="background-color: #aaaaaa; width: 100px; height: 100px;">d
</div>

<div id="text4">
test audio <audio controls><source src="test.mp3" type="audio/mpeg"></audio>file
</div>

<div class="" id="text5">can't select</div>

<div id="text6">
巧克力
是食物吗?
</div>

<div id="text6a">
كيف حالك؟
</div>

<pre id="text7">
both   spaces
line breaks
</pre>

<div id="text8">
some<br>text
</div>

<div id="text9">this is my first paragraph. Of text. it has some text.<br><br><br>
this is my second paragraph. Of text. it has some text.<br>
this is my third paragraph. Of text. it has some text.<br><br>
</div>

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

<script>

    description("This tests that paragraph navigation is working correctly.");
    
    if (window.accessibilityController) {
        
        // Check that we can get the paragraph range with span tag.
        var text = accessibilityController.accessibleElementById("text1");
        var textMarkerRange = text.textMarkerRangeForElement(text);
        var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        var currentMarker = advanceAndVerify(startMarker, 1, text);
        
        // Check with contenteditable.
        text = accessibilityController.accessibleElementById("text2");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        
        // Check with replaced elements.
        text = accessibilityController.accessibleElementById("text3");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        currentMarker = advanceAndVerify(currentMarker, 3, text);
        // Audio tag.
        text = accessibilityController.accessibleElementById("text4");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        
        // Check with user-select:none.
        text = accessibilityController.accessibleElementById("text5");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        
        // Multi-languages.
        text = accessibilityController.accessibleElementById("text6");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        
        text = accessibilityController.accessibleElementById("text6a");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        
        // Check the case with pre tag.
        text = accessibilityController.accessibleElementById("text7");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        currentMarker = advanceAndVerify(currentMarker, 15, text);
        
        // Check the case with br tag.
        text = accessibilityController.accessibleElementById("text8");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        currentMarker = advanceAndVerify(startMarker, 1, text);
        currentMarker = advanceAndVerify(currentMarker, 5, text);
        
        // Check getting the correct paragraphs
        text = accessibilityController.accessibleElementById("text9");
        textMarkerRange = text.textMarkerRangeForElement(text);
        startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
        startMarker = text.nextTextMarker(startMarker);
        var endMarker = text.endTextMarkerForTextMarkerRange(textMarkerRange);
        verifyParagraphs(text, startMarker, 5);
        
        // Check the paragraph marker runs from start to end, and backwards.
        // Make sure it won't hang.
        verifyDocument(text);
        
        
        function advanceAndVerify(currentMarker, offset, obj) {
            var previousMarker = currentMarker;
            for (var i = 0; i < offset; i++) {
                previousMarker = currentMarker;
                currentMarker = obj.nextTextMarker(previousMarker);
            }
            verifyParagraphRangeForTextMarker(previousMarker, currentMarker, obj);
            return currentMarker;
        }
        
        function replaceAttachmentInString(str) {
            str =  str.replace(String.fromCharCode(65532), "[ATTACHMENT]");
            return str;
        }
        
        function verifyParagraphRangeForTextMarker(preMarker, textMarker, obj) {
            var markerRange = obj.textMarkerRangeForMarkers(preMarker, textMarker);
            var currentCharacter = replaceAttachmentInString(obj.stringForTextMarkerRange(markerRange));
            debug("Current character is: " + currentCharacter);
            
            var paragraphRange = obj.paragraphTextMarkerRangeForTextMarker(textMarker);
            var paragraph = replaceAttachmentInString(obj.stringForTextMarkerRange(paragraphRange));
            debug("Current paragraph is: " + paragraph);
            
            var preStart = obj.previousParagraphStartTextMarkerForTextMarker(textMarker);
            var nextEnd = obj.nextParagraphEndTextMarkerForTextMarker(textMarker);
            var preAndNextParagraphRange = obj.textMarkerRangeForMarkers(preStart, nextEnd);
            var preAndNextParagraph = replaceAttachmentInString(obj.stringForTextMarkerRange(preAndNextParagraphRange));
            debug("Pre paragraph start to next paragraph end: " + preAndNextParagraph + "\n");
        }
        
        function verifyParagraphs(obj, startMarker, paragraphCount) {
            var current = startMarker;
            var i = 0;
            while(i < paragraphCount) {
                current = obj.nextParagraphEndTextMarkerForTextMarker(current);
                var currRange = obj.paragraphTextMarkerRangeForTextMarker(current);
                var currParagraph = obj.stringForTextMarkerRange(currRange);
                debug("Paragraph: " + currParagraph);
                i++;
            }
            
            // Backwards.
            i = 0;
            while(i < paragraphCount) {
                current = obj.previousParagraphStartTextMarkerForTextMarker(current);
                var currRange = obj.paragraphTextMarkerRangeForTextMarker(current);
                var currParagraph = obj.stringForTextMarkerRange(currRange);
                debug("Paragraph: " + currParagraph);
                i++;
            }
        }
        
        function verifyDocument(obj) {
            var start = obj.startTextMarker;
            
            // Going forward.
            debug("Test going forward.");
            var current = start;
            var end = "text";
            var currParagraph = "";
            while(currParagraph != end) {
                var currRange = obj.paragraphTextMarkerRangeForTextMarker(current);
                currParagraph = obj.stringForTextMarkerRange(currRange);
                current = obj.nextParagraphEndTextMarkerForTextMarker(current);
            }
            debug("End paragraph: " + replaceAttachmentInString(currParagraph));
            
            // Going backwards.
            debug("\nTest going backwards.");
            var start = "paragraph test";
            currParagraph = ""; 
            while(currParagraph != start) {
                var currentRange = obj.paragraphTextMarkerRangeForTextMarker(current);
                currParagraph = obj.stringForTextMarkerRange(currentRange);
                current = obj.previousParagraphStartTextMarkerForTextMarker(current);
            }
            debug("Start paragraph: " + replaceAttachmentInString(currParagraph));
        }
    }

</script>

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