<!DOCTYPE html>
<html>
    <head>
        <title id='desc'> MutationEvent.initMutationEvent() and Event.trusted </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 = "foo";
            var TARGET;
            var ExpectResult = [];
            var ActualResult = [];
            var TestResult = true;

            window.onload = function()
            {
                try
                {
                    TARGET = document.getElementById("target");
                    TARGET.addEventListener(EVENT, TestEvent, true);

                    var evt = document.createEvent("MutationEvent");
                    evt.initMutationEvent(EVENT,   /* type */
                                          true,    /* bubbles */
                                          true,    /* cancelable */
                                          null,    /* relatedNode */
                                          "hello", /* prevValue */
                                          "world", /* newValue */
                                          "bar",   /* attrName */
                                          1        /* attrChange*/ );

                    TARGET.dispatchEvent(evt);
                }
                catch(ex)
                {
                    FailTest();
                }

            }

            function TestEvent(evt)
            {
                if ((EVENT == evt.type) && (false == evt.trusted))
                {
                    PassTest();
                }
                else
                {
                    FailTest();
                }
            }
        </script>
    </head>
    <body>
        <h3>DOM Events</h3>
        <h4>
            Test Description: initMutationEvent initializes attributes of a MutationEvent object.
        </h4>

        <input id="target" type="hidden" />
        <p>Test passes if the word "PASS" appears below.</p>
        <div>Test result: </div>
        <div id='testresult'>FAIL</div>
    </body>
</html>