<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/async-stack-trace-test.js"></script>
<script>
function triggerEventListener() {
    document.body.addEventListener("click", function handleClick() {
        document.body.removeEventListener("click", handleClick);
        debugger;
    });

    document.body.click();
}

function triggerAttributeEventListener() {
    let previousListener = document.body.onclick;

    function handleClick() {
        document.body.onclick = previousListener;
        debugger;
    }

    document.body.onclick = handleClick;
    document.body.click();
}

function replaceAttributeEventListener() {
    let previousListener = document.body.onclick;

    function handleClick1() {}

    function handleClick2() {
        document.body.onclick = previousListener;
        debugger;
    }

    document.body.onclick = handleClick1;
    document.body.addEventListener("click", handleClick1, {once: true});
    document.body.onclick = handleClick2;
    document.body.click();
}

function test()
{
    let suite = InspectorTest.createAsyncSuite("AsyncStackTrace.EventListener");

    addAsyncStackTraceTestCase(suite, {
        name: "AsyncStackTrace.EventListener.AddEventListener",
        description: "Pause in an event listener handler.",
        expression: "triggerEventListener()"
    });

    // FIXME: <https://webkit.org/b/183236> Web Inspector: Async stack trace for an on-event handler doesn't include a boundary frame.
    // Update test results once this has been addressed.
    addAsyncStackTraceTestCase(suite, {
        name: "AsyncStackTrace.EventListener.AddAttributeEventListener",
        description: "Pause in an attribute event listener handler.",
        expression: "triggerAttributeEventListener()"
    });

    // Test for <https://webkit.org/b/181580> Web Inspector: ASSERT_NOT_REACHED in PageDebuggerAgent::didAddEventListener when page adds attribute event listener.
    addAsyncStackTraceTestCase(suite, {
        name: "AsyncStackTrace.EventListener.ReplaceAttributeEventListener",
        description: "Replace an attribute event listener after calling addEventListener on the same target.",
        expression: "replaceAttributeEventListener()"
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for event listener async stack traces.</p>
</body>
</html>
