blob: 0d2fea5aa52d4544a11f2468105ce4837fb436aa [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function handleButton1Click(event) {
TestPage.dispatchEventToFrontend("TestPageButton1Click");
}
function handleButton2Click(event) {
TestPage.dispatchEventToFrontend("TestPageButton2Click");
}
function clickButton1() {
document.getElementById("button1").click();
}
function clickButton2() {
document.getElementById("button2").click();
}
function test() {
let button1Node = null;
let button2Node = null;
function awaitGetClickEventListener(nodeId) {
return DOMAgent.getEventListenersForNode(nodeId)
.then(({listeners}) => listeners.find((eventListener) => eventListener.type === "click"));
}
let suite = InspectorTest.createAsyncSuite("DOM.BreakpointForEventListener");
suite.addTestCase({
name: "DOM.setBreakpointForEventListener",
description: "Check that the debugger pauses for this event.",
test(resolve, reject) {
let paused = false;
let clickingButton1 = false;
let listener = WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Paused, (event) => {
if (clickingButton1)
InspectorTest.pass("Should pause before button1 event handler is run.");
else
InspectorTest.fail("Should not pause before button2 event handler is run.");
paused = true;
let targetData = WI.debuggerManager.dataForTarget(WI.debuggerManager.activeCallFrame.target);
InspectorTest.expectEqual(targetData.pauseReason, WI.DebuggerManager.PauseReason.Listener, `Pause reason should be Listener.`);
InspectorTest.expectEqual(targetData.pauseData.eventName, "click", `Pause data eventName should be "click".`);
awaitGetClickEventListener(button1Node.id)
.then((clickEventListener) => {
InspectorTest.assert(targetData.pauseData.eventListenerId === clickEventListener.eventListenerId, `Pause data eventListenerId should be "${clickEventListener.eventListenerId}".`);
InspectorTest.assert(clickEventListener.hasBreakpoint, "Click event listener for button1 should have a breakpoint.");
WI.debuggerManager.resume();
});
});
InspectorTest.singleFireEventListener("TestPageButton1Click", (event) => {
if (!paused) {
WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.Paused, listener);
InspectorTest.fail("Should pause before button1 event handler is run.");
}
resolve();
});
InspectorTest.singleFireEventListener("TestPageButton2Click", (event) => {
if (!paused)
InspectorTest.pass("Should not pause before button2 event handler is run.");
InspectorTest.log("Clicking button1...");
clickingButton1 = true;
InspectorTest.evaluateInPage(`clickButton1()`);
});
awaitGetClickEventListener(button1Node.id)
.then((clickEventListener) => {
InspectorTest.assert(!clickEventListener.hasBreakpoint, "Click event listener for button1 should not have a breakpoint.");
InspectorTest.log("Adding breakpoint for event listener...");
return DOMAgent.setBreakpointForEventListener(clickEventListener.eventListenerId);
})
.then(() => {
InspectorTest.log("Clicking button2...");
return InspectorTest.evaluateInPage(`clickButton2()`);
})
.catch(reject);
}
});
suite.addTestCase({
name: "DOM.removeBreakpointForEventListener",
description: "Check that the debugger does the not pause for this event.",
test(resolve, reject) {
let paused = false;
let clickingButton1 = false;
let listener = WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Paused, (event) => {
if (clickingButton1)
InspectorTest.fail("Should not pause before button1 event handler is run.");
else
InspectorTest.fail("Should not pause before button2 event handler is run.");
paused = true;
let targetData = WI.debuggerManager.dataForTarget(WI.debuggerManager.activeCallFrame.target);
InspectorTest.assert(targetData.pauseReason, WI.DebuggerManager.PauseReason.Listener, `Pause reason should be Listener.`);
InspectorTest.assert(targetData.pauseData.eventName, "click", `Pause data eventName should be "click".`);
awaitGetClickEventListener(button1Node.id)
.then((clickEventListener) => {
InspectorTest.assert(targetData.pauseData.eventListenerId === clickEventListener.eventListenerId, `Pause data eventListenerId should be "${clickEventListener.eventListenerId}".`);
InspectorTest.assert(clickEventListener.hasBreakpoint, "Click event listener for button1 should have a breakpoint.");
WI.debuggerManager.resume();
});
});
InspectorTest.singleFireEventListener("TestPageButton1Click", (event) => {
if (!paused) {
WI.debuggerManager.removeEventListener(WI.DebuggerManager.Event.Paused, listener);
InspectorTest.pass("Should not pause before button1 event handler is run.");
}
resolve();
});
InspectorTest.singleFireEventListener("TestPageButton2Click", (event) => {
if (!paused)
InspectorTest.pass("Should not pause before button2 event handler is run.");
InspectorTest.log("Clicking button1...");
clickingButton1 = true;
InspectorTest.evaluateInPage(`clickButton1()`);
});
awaitGetClickEventListener(button1Node.id)
.then((clickEventListener) => {
InspectorTest.assert(clickEventListener.hasBreakpoint, "Click event listener for button1 should have a breakpoint.");
InspectorTest.log("Removing breakpoint for event listener...");
return DOMAgent.removeBreakpointForEventListener(clickEventListener.eventListenerId);
})
.then(() => {
InspectorTest.log("Clicking button2...");
return InspectorTest.evaluateInPage(`clickButton2()`);
})
.catch(reject);
}
});
suite.addTestCase({
name: "DOM.setBreakpointForEventListener.Invalid",
description: "Invalid event listener identifiers should cause an error.",
test(resolve, reject) {
const invalidEventListenerId = 9999999;
DOMAgent.setBreakpointForEventListener(invalidEventListenerId, (error) => {
InspectorTest.expectThat(error, "Should produce an error.");
InspectorTest.log("Error: " + error);
resolve();
});
}
});
suite.addTestCase({
name: "DOM.removeBreakpointForEventListener.Invalid",
description: "Invalid event listener identifiers should cause an error.",
test(resolve, reject) {
const invalidEventListenerId = 9999999;
DOMAgent.removeBreakpointForEventListener(invalidEventListenerId, (error) => {
InspectorTest.expectThat(error, "Should produce an error.");
InspectorTest.log("Error: " + error);
resolve();
});
}
});
WI.domManager.requestDocument((documentNode) => {
Promise.all([
documentNode.querySelector("#button1"),
documentNode.querySelector("#button2"),
])
.then(([button1Id, button2Id]) => {
button1Node = WI.domManager.nodeForId(button1Id);
button2Node = WI.domManager.nodeForId(button2Id);
suite.runTestCasesAndFinish();
})
.catch(() => {
InspectorTest.fail("Unable to retrieve nodes.");
InspectorTest.completeTest();
});
});
}
</script>
</head>
<body onload="runTest()">
<p>Testing DOMAgent.setBreakpointForEventListener and DOMAgent.removeBreakpointForEventListener.</p>
<button id="button1"></button>
<button id="button2"></button>
<script>
document.getElementById("button1").addEventListener("click", handleButton1Click);
document.getElementById("button2").addEventListener("click", handleButton2Click);
</script>
</body>
</html>