<!DOCTYPE html>
<html>
<head>
<title> MouseEvent: Default action and synthetic click event </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id=log></div>

<div style="display: none">
    <input type="checkbox" id="target">
    <button id="button"> Click Here </button>
</div>

<script>
    setup({explicit_done:true});
    var EVENT = "click";
    var TARGET = document.getElementById("target");
    var BUTTON = document.getElementById("button");
    var state;

    var description = "Test Description: " +
                      "MouseEvent: Default action is performed when a synthetic click event is dispatched on a checkbox element";

    BUTTON.addEventListener(EVENT, TestEvent, true);
    TARGET.addEventListener(EVENT, TestEvent, true);

    window.onload = function()
    {
        state = TARGET.checked;
        BUTTON.click();
    }

    function TestEvent(evt)
    {
        if (BUTTON == evt.target)
        {
            var e;
            test(function()
            {
                BUTTON.removeEventListener(EVENT, TestEvent, true);

                e = document.createEvent("MouseEvent");
                e.initMouseEvent(EVENT,  /* type */
                                 false,  /* bubbles */
                                 true,   /* cancelable */
                                 window, /* view */
                                 1,      /* detail */
                                 0,      /* screenX */
                                 0,      /* screenY */
                                 0,      /* clientX */
                                 0,      /* clientY */
                                 false,  /* ctrlKey */
                                 false,  /* altKey */
                                 false,  /* shiftKey */
                                 false,  /* metaKey */
                                 0,      /* button */
                                 null    /* relatedTarget */);

                assert_array_equals([TARGET.checked, e.type, e.bubbles], [state, EVENT, false]);

            }, "Checkbox state is unchanged before the synthetic click event is dispatched");

            TARGET.dispatchEvent(e);
        }
        else if (TARGET == evt.target)
        {
            test(function()
            {
                assert_array_equals([TARGET.checked, evt.type, evt.bubbles], [!state, EVENT, false]);

            }, description);

            done();
        }
    }
</script>
</body>
</html>
