blob: c70a23565273b53f83c476dede99fbca0e56cbbf [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="./resources/pause-reasons.js"></script>
<script>
TestPage.allowUncaughtExceptions = true;
TestPage.needToSanitizeUncaughtExceptionURLs = true;
function test()
{
WI.debuggerManager.allExceptionsBreakpoint.disabled = false;
WI.debuggerManager.assertionsBreakpoint.disabled = false;
for (let script of WI.debuggerManager.dataForTarget(WI.mainTarget).scripts) {
if (!/pause-reasons\.js$/.test(script.url))
continue;
let sourceCodeLocation = script.createSourceCodeLocation(3, 0);
let breakpoint = new WI.Breakpoint(sourceCodeLocation);
WI.debuggerManager.addBreakpoint(breakpoint);
break;
}
function sanitizePauseData(data) {
if (data.description)
return {description: data.description};
if (data.breakpointId)
return {breakpointId: data.breakpointId.substring(data.breakpointId.indexOf("pause-reasons.js"))};
return data;
}
let suite = InspectorTest.createAsyncSuite("Debugger.PauseReason");
let pauses = 0;
function addTestCase({name, description, expression, setup}) {
suite.addTestCase({
name, description,
test(resolve, reject) {
if (setup)
setup();
expression += `;setTimeout(() => { TestPage.dispatchEventToFrontend("AfterTestFunction"); })`;
InspectorTest.evaluateInPage(expression);
WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Paused, (event) => {
let targetData = WI.debuggerManager.dataForTarget(WI.debuggerManager.activeCallFrame.target);
InspectorTest.log("PAUSE #" + (++pauses));
InspectorTest.log(" REASON: " + targetData.pauseReason);
if (targetData.pauseData)
InspectorTest.log(" DATA: " + JSON.stringify(sanitizePauseData(targetData.pauseData)));
else
InspectorTest.log(" NO DATA");
WI.debuggerManager.resume().catch(reject);
InspectorTest.singleFireEventListener("AfterTestFunction", resolve);
});
WI.debuggerManager.singleFireEventListener(WI.DebuggerManager.Event.Resumed, function(event) {
InspectorTest.log("RESUMED");
});
}
});
}
addTestCase({
name: "Debugger.PauseReason.Exception",
description: "Pause for exception should have expected pause reason.",
expression: `setTimeout(triggerException)`,
});
addTestCase({
name: "Debugger.PauseReason.DebuggerStatement",
description: "Pause for debugger statement should have expected pause reason.",
expression: "setTimeout(triggerDebuggerStatement)",
});
addTestCase({
name: "Debugger.PauseReason.Assertion",
description: "Pause for assertion should have expected pause reason.",
expression: "setTimeout(triggerAssert)",
});
addTestCase({
name: "Debugger.PauseReason.Breakpoint",
description: "Pause for breakpoint should have expected pause reason.",
expression: "setTimeout(triggerBreakpoint)",
});
addTestCase({
name: "Debugger.PauseReason.PauseImmediately",
description: "Pause for Debugger.pause command should have expected pause reason.",
expression: "setTimeout(() => { 1 + 1 })",
setup() { WI.debuggerManager.pause(); },
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test that pausing in different ways triggers different pause reasons.</p>
</body>
</html>