<p>
    Test that moving the caret with line granularity within the highest
    editable root works across non-editable content.
</p>
<pre id="console"></pre>
<div contenteditable="true">
    <div contenteditable="false">
        <span id="pie" contenteditable="true">apple pie</span>
    </div>
    <div contenteditable="false">
        pineapple
    </div>
    <div contenteditable="false">
        <span id="juice" contenteditable="true">apple juice</span>
    </div>
</div>
<script>
    function log(message)
    {
        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
    }

    if (window.testRunner)
        testRunner.dumpAsText();

    var fail = false;
    var pie = document.getElementById("pie");
    var juice = document.getElementById("juice");

    var sel = getSelection();
    sel.collapse(pie.firstChild, 3);
    sel.modify("move", "forward", "line");

    if (sel.anchorNode !== juice.firstChild || sel.anchorOffset != 3) {
        log("FAIL: Did not move to the next line");
        fail = true;
    }

    sel.collapse(juice.firstChild, 3);
    sel.modify("move", "backward", "line");

    if (sel.anchorNode !== pie.firstChild || sel.anchorOffset != 3) {
        log("FAIL: Did not move to the previous line");
        fail = true;
    }

    if (!fail)
        log("PASS");
</script>
