<!DOCTYPE html>
<html>
    <head>
        <title id='desc'> TextEvent: inputMode with DOM_INPUT_METHOD_DROP </title>
        <script type="text/javascript">
            var PassTest = function()
            {
                document.getElementById("testresult").firstChild.data = "PASS";
            }

            var FailTest = function()
            {
                document.getElementById("testresult").firstChild.data = "FAIL";
            }

            var EVENT = "textInput";
            var TARGET;

            function TestEvent(evt)
            {
                TARGET.removeEventListener(EVENT, TestEvent, true);

                if ((0x03 == evt.inputMode) && ("Hello World" == evt.data))
                {
                    PassTest();
                }
                else
                {
                    FailTest();
                }
            }

            window.onload = function()
            {
                try
                {
                    TARGET = document.getElementById("target");
                    TARGET.addEventListener(EVENT, TestEvent, true);
                }
                catch(ex)
                {
                    FailTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: TextEvent.inputMode is DOM_INPUT_METHOD_DROP (0x03)
            when the text string was inserted as part of a drag-and-drop operation.
        </h4>

        <span id="parent">
            <div contenteditable="true" style="border:solid 1px green; width:150px; height:20px">Hello World</div>
            <br/>
            <input id="target" type="text" />
        </span>

        <p id="manualsteps">
            Steps:
            <ol>
                <li> Select "Hello World" inside the green editbox
                <li> Drag-and-drop it ("Hello World") to the textbox below the green editbox
            </ol>
        </p>
        <p>Test passes if the word "PASS" appears below after following the above steps.</p>
        <div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>