<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>
<script>

function testFunction()
{
    var div = document.getElementById("myDiv");
    function fooEventHandler1() {
        div.textContent += "Recieved foo event(1)!\n";
    }
    div.addEventListener("foo", fooEventHandler1);

    function fooEventHandler2() {
        div.textContent += "Recieved foo event(2)!\n";
    }
    div.addEventListener("foo", fooEventHandler2);

    var e = new CustomEvent('foo');
    debugger;
    div.dispatchEvent(e);
}

var test = function()
{
    InspectorTest.startDebuggerTest(step1, true);

    function step1()
    {
        InspectorTest.runTestFunctionAndWaitUntilPaused(step2);
    }


    function checkTopFrameFunction(callFrames, expectedName)
    {
        var topFunctionName = callFrames[0].functionName;
        if (expectedName === topFunctionName)
            InspectorTest.addResult("SUCCESS: Did step into event listener(" + expectedName + ").");
        else
            InspectorTest.addResult("FAIL: Unexpected top function: expected " + expectedName + ", found " + topFunctionName);
    }

    var stepCount = 0;
    function step2(callFrames)
    {
        if (stepCount === 2)
            checkTopFrameFunction(callFrames, "fooEventHandler1");
        else if (stepCount === 5)
            checkTopFrameFunction(callFrames, "fooEventHandler2");

        if (stepCount < 5) {
            InspectorTest.addResult("Stepping into...");
            document.getElementById("scripts-step-into").click();
            InspectorTest.waitUntilResumed(InspectorTest.waitUntilPaused.bind(InspectorTest, step2));
        } else
            InspectorTest.completeDebuggerTest();
        stepCount++;
    }
}

</script>
</head>

<body onload="runTest()">
<p>
Tests that stepping into dispatchEvent() method will lead to a pause in the first event listener.
</p>
<div id="myDiv"></div>

</body>
</html>
