<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="../editing.js" language="javascript" type="text/javascript" ></script>
        <script language="javascript" type="text/javascript">
        function log(str) {
            var li = document.createElement("li");
            li.appendChild(document.createTextNode(str));
            var console = document.getElementById("console");
            console.appendChild(li);
        }
        function sendBackwardDeleteKey() {
            if (window.eventSender)
                eventSender.keyDown(String.fromCharCode(0x0008), null);
        }
        function editingTest() {
            if (window.testRunner)
                window.testRunner.dumpAsText();
            var textarea = document.getElementById("test");
            textarea.focus();
            typeCharacterCommand(String.fromCharCode(0x0E27));
            typeCharacterCommand(String.fromCharCode(0x0E31));
            sendBackwardDeleteKey();
            if (textarea.value == "\u0E27")
                log("Succeeded.");
            else
                log("Failed. Actual: \"" + textarea.value + "\", Expected: \"\u0E27\"");
        }
        </script>
        <title>Editing Test (Deleting a ligature)</title> 
    </head> 
    <body>
        <p>This test tests whether the BackSpace key deletes only the last character of a ligature "&#x0E27;&#x0E31;".</p>
        <p>If this test succeeds, you can see "&#x0E27;" (U+0E27) and a string "succeeded" below.</p>
        <textarea id="test" rows="1" cols="40"></textarea>
        <ul id="console"></ul>
        <script language="javascript" type="text/javascript">
        runEditingTest();
        </script>
    </body>
</html>
