<html>
<script src="../fast/js/resources/js-test-pre.js"></script>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();
</script>
<body>
    <div id="console"></div>
    <textarea name="area1" id="area1" rows="5" cols="40">
line 1
line 2
line 3
    </textarea>

    <textarea name="area2" id="area2" rows="5" cols="40"></textarea>


    <div id="contenteditable-div" role="textbox" contenteditable="true" tabindex="0">
      <div id="contenteditable-line1">Line1</div>
      <textarea id="contenteditable-line2" rows="1" cols="40">Line2</textarea>
      <div id="contenteditable-line3">Line3</div>
    </div>
    <script>
        description("This tests that lineNumberForPosition is reported correctly for textarea and contenteditable elements.");

        if (window.accessibilityController) {
            var console = document.getElementById("console");

            var area1 = document.getElementById("area1");
            area1.focus();
            var area1AXUIElement = accessibilityController.focusedElement;
            var lineNumber = -2;

            for (var currentLine = 0; currentLine < 3; currentLine++ ) {
                shouldBe("area1.selectionStart = (" + (currentLine * 7) + "); " +
                         "area1.selectionEnd = (" + (currentLine * 7) +"); " +
                         "area1AXUIElement.insertionPointLineNumber;", "currentLine");
            }

            var area2 = document.getElementById("area2");
            shouldBe("area2.focus(); area1AXUIElement.insertionPointLineNumber;", "-1");

            var contenteditableDiv = document.getElementById("contenteditable-div");
            contenteditableDiv.focus();
            var contenteditableAXUIElement = accessibilityController.focusedElement;

            var contenteditableLine1 = document.getElementById("contenteditable-line1");
            shouldBe("window.getSelection().setBaseAndExtent(contenteditableLine1, 1, contenteditableLine1, 1); " +
                     "contenteditableAXUIElement.insertionPointLineNumber;", "0");

            var contenteditableLine2 = document.getElementById("contenteditable-line2");
            shouldBe("contenteditableLine2.selectionStart = 1; contenteditableLine2.selectionEnd = 1;" +
                     "contenteditableAXUIElement.insertionPointLineNumber;", "-1");

            var contenteditableLine3 = document.getElementById("contenteditable-line3");
            shouldBe("window.getSelection().setBaseAndExtent(contenteditableLine3, 1, contenteditableLine3, 1); " +
                     "contenteditableAXUIElement.insertionPointLineNumber;", "2");

            contenteditableLine2.focus();
            var textareaAXUIElement = accessibilityController.focusedElement;
            shouldBe("textareaAXUIElement.insertionPointLineNumber", "0");
        }
    </script>
<script src="../fast/js/resources/js-test-post.js"></script>
</body>
</html>
