<html> 
<head>

<style>
.editing { 
    border: 2px solid red; 
    padding: 12px; 
    font-size: 24px; 
}
</style>
<script src="../../resources/js-test-pre.js"></script>
<script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>

<script>

jsTestIsAsync = true;

if (window.internals) {
    internals.settings.setUnifiedTextCheckerEnabled(true);
    internals.settings.setAsynchronousSpellCheckingEnabled(true);
}

function editingTest() {

    var elem = document.getElementById("test");
    var selection = window.getSelection();
    selection.setPosition(elem, 6);

    typeCharacterCommand('z');
    typeCharacterCommand('z');
    typeCharacterCommand(' ');
    typeCharacterCommand('a');
    typeCharacterCommand(' ');
    typeCharacterCommand('a');
    moveSelectionBackwardByWordCommand();
    insertLineBreakCommand();

    if (window.testRunner) {
        selection.setPosition(elem, 0);
        shouldBecomeEqual("internals.hasSpellingMarker(6, 2)", "true", function() {
            document.getElementById("root").style.display = "none";
            finishJSTest();
        });
    }

}

</script>

<title>Editing Test</title> 
</head> 
<body>
<script>
description("Misspellings should be preserved when a line-break command "
    + "splits a text node. You should see 'Hello,zz a' on the first line below, "
    + "and 'a' on the second line. "
    + "This test succeeds when 'zz' (and only 'zz') is marked as misspelled.");
</script>
<div contenteditable id="root" class="editing">
<!-- wee need leading "Hello," to preserve the marker even after setPosition() -->
<span id="test">Hello,</span>
</div>
<script>
editingTest();
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
