<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> compositionstart Event and keydown Event </title>
        <script type="text/javascript">
            var PassTest = function()
            {
                document.getElementById("testresult").firstChild.data = "PASS";
            }

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

            var TARGET;
            var ExpectResult = ["keydown", "compositionstart", "keyup"];
            var ActualResult = [];

            window.onload = function(e)
            {
                try
                {
                    TARGET = document.getElementById("target");
                    TARGET.addEventListener("compositionstart", TestEvent, true);
                    TARGET.addEventListener("keydown", TestEvent, true);
                    TARGET.addEventListener("keyup", TestEvent, true);
                }
                catch(ex)
                {
                    FailTest();
                }
            }

            function TestEvent(evt)
            {
                ActualResult.push(evt.type);

                if (evt.type == "keyup")
                {
                    if (ExpectResult.toString() == ActualResult.toString())
                    {
                        PassTest();
                    }
                    else
                    {
                        FailTest();
                    }
                    TARGET.removeEventListener("compositionstart", TestEvent, true);
                    TARGET.removeEventListener("keydown", TestEvent, true);
                    TARGET.removeEventListener("keyup", TestEvent, true);
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: When a keyboard is used to feed an input method editor,
            compositionstart event type is generated after a keydown event.
        </h4>

        <pre>
            <input id="target" value=""/>

            Steps:
            1) Open Japanese Microsoft IME and select Hiragana input method
            2) Type 'a' in the above textbox using keyboard
            3) <a href="compositionstart.keydown.html">Click here</a> to test again if not following the steps exactly
        </pre>

        <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>