<html>
<head>
    <script>
    function log(s)
    {
        document.getElementById('console').appendChild(document.createTextNode(s + "\n"));
    }

    var inputBlurFired = false;
    var buttonBlurFired = false;

    function test() {
        if (window.layoutTestController)
            layoutTestController.dumpAsText();

        // hit enter
        var bt = document.getElementById('i_bt');
        bt.focus();
        var enterEvent = document.createEvent("KeyboardEvents");
        enterEvent.initKeyboardEvent("keypress", true, false, window, "Enter", 0, false, false, false, false, false);
        bt.dispatchEvent(enterEvent);

        if (inputBlurFired)
            log('Test 1 Failed.  Blur fired when hitting ENTER for input type=button element');
        else
            log('Test 1 Passed.');

        bt = document.getElementById('b_bt');
        bt.focus();
        var enterEvent2 = document.createEvent("KeyboardEvents");
        enterEvent2.initKeyboardEvent("keypress", true, false, window, "Enter", 0, false, false, false, false, false);

        bt.dispatchEvent(enterEvent2);

        if (buttonBlurFired)
            log('Test 2 Failed.  Blur fired when hitting ENTER for button element');
        else
            log('Test 2 Passed.');
    }
    </script>
</head>
<body onload="test()">
    <p>This test verifies that the ENTER key does not fire the blur event for input type="button" and button elements.</p>
    <hr>
    <input id="i_bt" type="button" name="InputButtonElement" onblur="inputBlurFired = true;"></input>
    <button id="b_bt" type="button" name="ButtonElement" onblur="buttonBlurFired = true;"></button>

    <pre id="console"></pre>
</body>
</html>
