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

<div id="content">
<div id="textcontrol" contenteditable="true">some<div>hello world</div><div>test</div></div>
<textarea id="textarea" cols='60' rows='8'>hello test
world</textarea>
</div>
<div id="textcontrol2" contenteditable="true">abc<div><br></div<div><br></div><div><br></div><div>def</div></div>

<div id="textcontrol3" contenteditable="true">
<p>ab</p>
<p>cd ef</p>
</div>

<div id="textcontrol4" contenteditable="true">
<pre>
Text in a pre element
is displayed in a fixed-width
font
</pre>
</div>

<div role="group" id="console"></div>

<script>

    description("This tests that when there are newline characters within text controls, we can get the correct text range from index and length.");

    // Test contenteditable with newlines.
    var textControl = accessibilityController.accessibleElementById("textcontrol");
    var textSome = textControl.stringForRange(0, 4);
    shouldBe("textSome", "'some'");
    
    var textHello = textControl.stringForRange(5, 5);
    shouldBe("textHello", "'hello'");
    
    var textWorld = textControl.stringForRange(11, 5);
    shouldBe("textWorld", "'world'");
    
    var textTest = textControl.stringForRange(17, 4);
    shouldBe("textTest", "'test'");
    
    // Test <textarea> with newlines.
    var textarea = accessibilityController.accessibleElementById("textarea");
    var textareaTextHello = textarea.stringForRange(0, 5);
    var textareaTextWorld = textarea.stringForRange(11, 5);
    shouldBe("textareaTextHello", "'hello'");
    shouldBe("textareaTextWorld", "'world'");
    
    // Test multiple <br> in contenteditable
    var textControl2 = accessibilityController.accessibleElementById("textcontrol2");
    var textDEF = textControl2.stringForRange(7, 3);
    shouldBe("textDEF", "'def'");
    
    // Test line ranges in contenteditable
    var textControl3 = accessibilityController.accessibleElementById("textcontrol3");
    var rangeValue = textControl3.stringForRange(2, 4);
    // Replace the newline characters, and make sure it has two of them
    rangeValue = rangeValue.replace(/(?:\r\n|\r|\n)/g, '[newline]'); 
    shouldBe("rangeValue", "'[newline][newline]cd'");
    
    // pre tag in contenteditable
    var textControl4 = accessibilityController.accessibleElementById("textcontrol4");
    rangeForLine = textControl4.rangeForLine(1);
    shouldBe("rangeForLine", "'{22, 30}'");
    textLine = textControl4.stringForRange(22, 30);
    shouldBe("textLine", "'is displayed in a fixed-width\\n'");
    firstLine = textControl4.lineForIndex(21);
    secondLine = textControl4.lineForIndex(51);
    shouldBe("firstLine", "0");
    shouldBe("secondLine", "1");

</script>

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