<html>
<head>
<style>
body { margin: 10; padding: 0 }
</style>
</head>
<body contenteditable>12<b>3<i>4</i></b>
<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("Testing styled text (12<b>3<i>456</i></b>)");
            window.getSelection().setPosition(document.body, 4);
            textInputController.setMarkedText("56", 0, 1);

            log("(0, 0): " + textInputController.attributedSubstringFromRange(0, 0).string());
            log("(0, 2): " + textInputController.attributedSubstringFromRange(0, 2).string());
            log("(0, 3): " + textInputController.attributedSubstringFromRange(0, 3).string());
            log("(0, 6): " + textInputController.attributedSubstringFromRange(0, 6).string());
            log("(0, 7): " + textInputController.attributedSubstringFromRange(0, 7).string());
            log("(0, 100): " + textInputController.attributedSubstringFromRange(0, 100).string());
            log("(5, 1): " + textInputController.attributedSubstringFromRange(5, 1).string());
            log("(5, 2): " + textInputController.attributedSubstringFromRange(5, 2).string());
            log("(100, 0): " + textInputController.attributedSubstringFromRange(100, 0)); // should be empty
            log("(100, 100): " + textInputController.attributedSubstringFromRange(100, 100)); // should be empty
            
            log("\nTesting proper space runs (1._2.__3.___4_5)");
            document.body.innerHTML = "1 &nbsp;2 &nbsp;&nbsp;3 &nbsp;&nbsp;&nbsp;4&nbsp;5";
            window.getSelection().setPosition(document.body, 0);

            log("total length: " + textInputController.attributedSubstringFromRange(0, 100).length());
            log("one space: \"" + textInputController.attributedSubstringFromRange(1, 1).string() + "\"");
            log("two spaces: \"" + textInputController.attributedSubstringFromRange(1, 2).string() + "\"");
            log("three spaces: \"" + textInputController.attributedSubstringFromRange(4, 3).string() + "\"");
            log("four spaces: \"" + textInputController.attributedSubstringFromRange(8, 4).string() + "\"");
            
            log("\nTesting space-only runs (1..2...3....4.5)");
            document.body.innerHTML = "1  2   3    4 5";
            window.getSelection().setPosition(document.body, 0);

            log("total length: " + textInputController.attributedSubstringFromRange(0, 100).length());
            log("(0, 100): " + textInputController.attributedSubstringFromRange(0, 100).string());

            document.body.innerHTML = "";

        } catch (ex) {
            log("Exception: " + ex.description);
        }
        
        var console = document.createElement("pre");
        console.appendChild(console_messages);
        document.body.appendChild(console);
        
    } else {
        document.write("This testcase is buggy: 9337.  (cannot run interactively)");
    }
</script>
</body>
</html>
