<html>
<head>
<style>
.editing { 
    margin: 10; padding: 0; 
}
</style>
<script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>

<script>

function editingTest() {
    typeCharacterCommand('1');
    typeCharacterCommand('2');
    boldCommand();
    typeCharacterCommand('3');
    italicCommand();
    typeCharacterCommand('4');
    typeCharacterCommand('5');
    typeCharacterCommand('6');
    italicCommand();
    boldCommand();
    insertParagraphCommand();
    typeCharacterCommand('l');
    typeCharacterCommand('i');
    typeCharacterCommand('n');
    typeCharacterCommand('e');
    typeCharacterCommand(' ');
    typeCharacterCommand('t');
    typeCharacterCommand('w');
    typeCharacterCommand('o');
    insertLineBreakCommand();
    insertLineBreakCommand();
    typeCharacterCommand('a');
    typeCharacterCommand('n');
    typeCharacterCommand('d');
    typeCharacterCommand(' ');
    fontSizeCommand("6");
    underlineCommand();
    typeCharacterCommand('t');
    typeCharacterCommand('h');
    typeCharacterCommand('r');
    typeCharacterCommand('e');
    typeCharacterCommand('e');
    typeCharacterCommand(' ');
    typeCharacterCommand(' ');
    typeCharacterCommand(' ');
    underlineCommand();
    insertLineBreakCommand();
}

</script>

<title>Attributed String Test</title> 
</head>
<body contenteditable id="root">
<div id="wrapper">
<div class="editing" id="test"></div>
</div>

<script>
runEditingTest();
</script>

<script type="text/javascript">

    var console_messages = document.createElement("ol");
    
    function log(message)
    {
        var item = document.createElement("li");
        item.appendChild(document.createTextNode(String(message).replace(/0x[0-9a-fA-F]{8}/g, "0xXXXXXXXX")));
        console_messages.appendChild(item);
    }
    
    if (window.testRunner) {
        
        try {
        
            testRunner.dumpAsText();
        
            log("Actual HTML:");
            log("<pre>" + document.getElementById("wrapper").innerHTML + "</pre>");
            window.getSelection().setPosition(document.body, 0);

            log("(0, 0): " + textInputController.attributedSubstringFromRange(0, 0));
            log("(0, 0) length: " + textInputController.attributedSubstringFromRange(0, 0).length());
            log("(0, 2): " + textInputController.attributedSubstringFromRange(0, 2));
            log("(0, 2) length: " + textInputController.attributedSubstringFromRange(0, 2).length());
            log("(1, 2): " + textInputController.attributedSubstringFromRange(1, 2));
            log("(1, 2) length: " + textInputController.attributedSubstringFromRange(1, 2).length());
            log("(0, 3): " + textInputController.attributedSubstringFromRange(0, 3));
            log("(0, 3) length: " + textInputController.attributedSubstringFromRange(0, 3).length());
            log("(0, 6): " + textInputController.attributedSubstringFromRange(0, 6));
            log("(0, 6) length: " + textInputController.attributedSubstringFromRange(0, 6).length());
            log("(0, 7): " + textInputController.attributedSubstringFromRange(0, 7));
            log("(0, 7) length: " + textInputController.attributedSubstringFromRange(0, 7).length()); // should be 7 characters!
            log("(0, 31): " + textInputController.attributedSubstringFromRange(0, 31));
            log("(0, 31) length: " + textInputController.attributedSubstringFromRange(0, 31).length()); // actual length IS 31
            log("(0, 100): " + textInputController.attributedSubstringFromRange(0, 100));
            log("(0, 100) length: " + textInputController.attributedSubstringFromRange(0, 100).length()); // should be 31 characters!
            log("(1, 100): " + textInputController.attributedSubstringFromRange(1, 100));
            log("(1, 100) length: " + textInputController.attributedSubstringFromRange(1, 100).length()); // should be 30 characters!
            log("(2, 3): " + textInputController.attributedSubstringFromRange(2, 3));
            log("(2, 3) length: " + textInputController.attributedSubstringFromRange(2, 3).length());
            log("(5, 1): " + textInputController.attributedSubstringFromRange(5, 1));
            log("(5, 1) length: " + textInputController.attributedSubstringFromRange(5, 1).length());
            log("(5, 2): " + textInputController.attributedSubstringFromRange(5, 2));
            log("(5, 2) length: " + textInputController.attributedSubstringFromRange(5, 2).length());
            log("(5, 5): " + textInputController.attributedSubstringFromRange(5, 5));
            log("(5, 5) length: " + textInputController.attributedSubstringFromRange(5, 5).length());
            log("(15, 14): " + textInputController.attributedSubstringFromRange(15, 14));
            log("(15, 14) length: " + textInputController.attributedSubstringFromRange(15, 14).length()); // should be 14 characters!
            log("(100, 0): " + textInputController.attributedSubstringFromRange(100, 0)); // should be undefined
            log("(100, 100): " + textInputController.attributedSubstringFromRange(100, 100)); // should be undefined
            
        } catch (ex) {
            log("Exception: " + ex.description);
        }
        
        var console = document.createElement("p");
        console.appendChild(console_messages);
        document.body.appendChild(console);
        
    } else {
        document.write("(cannot run interactively)");
    }
</script>
</body>
</html>
