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