<!DOCTYPE HTML>
<html>
    <head>
        <title id='desc'> Composition Event Types: compositionstart, compositionupdate, compositionend </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 = ["compositionstart", "compositionupdate", "compositionend"];
            var ActualResult = [];
            var count = 0

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

            function TestEvent(evt)
            {
                ActualResult.push(evt.type);
                TARGET.removeEventListener(evt.type, TestEvent, true);

                if (ExpectResult.toString() == ActualResult.toString())
                {
                    PassTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: The composition events occur in a set order relative to one another:
            1. compositionstart, 2. compositionupdate (multiple events), 3. compositionend.
        </h4>

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

            Steps:
            1) Open Japanese Microsoft IME and select Hiragana input method
            2) Click at the above textbox and then type 'a' using keyboard
            3) Press the '{Enter}' key to complete the IME composition
            4) <a href="CompositionEvent.html">Click here</a> to test again if not following the steps exactly
        </pre>

        <p>Test passes if the word "PASS" appears below and nothing is typed to the textbox after following the above steps.</p>
        <div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>