Chromium Code Reviews| Index: LayoutTests/inspector/debugger/skip-pauses-until-reload.html |
| diff --git a/LayoutTests/inspector/debugger/skip-pauses-until-reload.html b/LayoutTests/inspector/debugger/skip-pauses-until-reload.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3638ceaa898f86945f6e6ef4aa3e4f4d30c54b5e |
| --- /dev/null |
| +++ b/LayoutTests/inspector/debugger/skip-pauses-until-reload.html |
| @@ -0,0 +1,139 @@ |
| +<html> |
| +<head> |
| +<script src="../../http/tests/inspector/inspector-test.js"></script> |
| +<script src="../../http/tests/inspector/elements-test.js"></script> |
| +<script src="../../http/tests/inspector/debugger-test.js"></script> |
| +<script> |
| + |
| +function testFunction() |
| +{ |
| + console.log("Begin"); |
| + debugger; // Reload follows, nothing below should break. |
| + console.log("Middle: Breakpoint 1"); // Breakpoint |
| + console.log("Middle: Breakpoint 2"); // Breakpoint |
| + console.assert(false, "Assertion failed!"); |
| + console.error("Some console.error message"); |
| + debugger; // Should skip this also. |
| + var element = document.getElementById("element"); |
| + var parent = element.parentElement; |
| + var child = document.createElement("span"); |
| + element.setAttribute("foo", "bar"); // DOM breakpoint: AttributeModified |
| + element.appendChild(child); // DOM breakpoint: SubtreeModified |
| + parent.removeChild(element); // DOM breakpoint: NodeRemoved |
| + parent.appendChild(element); |
| + element.click(); // Event breakpoint |
| + console.log("End"); |
| + // Should be last. |
| + eval("throwException()"); |
| +} |
| + |
| +function throwException() |
| +{ |
| + function inner() |
| + { |
| + try { |
| + if (window.foo === 1) |
| + throw new Error("error message"); |
| + } finally { |
| + ++window.foo; |
| + } |
| + } |
| + try { |
| + window.foo = 1; |
| + inner(); |
| + } finally { |
| + ++window.foo; |
| + } |
| +} |
| + |
| +function test() |
| +{ |
| + InspectorTest.startDebuggerTest(step1); |
| + |
| + function step1() |
| + { |
| + InspectorTest.showScriptSource("skip-pauses-until-reload.html", didShowScriptSource); |
| + } |
| + |
| + function didShowScriptSource(sourceFrame) |
| + { |
| + InspectorTest.addResult("Script source was shown."); |
| + InspectorTest.addResult("Set up breakpoints."); |
| + InspectorTest.setBreakpoint(sourceFrame, 11, "", true); |
| + InspectorTest.setBreakpoint(sourceFrame, 12, "", true); |
| + InspectorTest.addResult("Set up to pause on all exceptions."); |
| + // FIXME: Test is flaky with PauseOnAllExceptions due to races in debugger. |
|
yurys
2013/11/08 06:38:26
Wouldn't it flake with PauseOnUncaughExceptions, w
aandrey
2013/11/08 09:10:39
Maybe. Let me put DontPauseOnExceptions for now.
yurys
2013/11/13 12:26:01
How come didCommitLoad and didClearWindowObjectInW
aandrey
2013/11/13 13:06:08
I did not know either. As I said it should be inve
|
| + DebuggerAgent.setPauseOnExceptions(WebInspector.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); |
| + InspectorTest.nodeWithId("element", didResolveNode); |
| + } |
| + |
| + function didResolveNode(node) |
| + { |
| + WebInspector.showPanel("elements"); |
| + var pane = WebInspector.domBreakpointsSidebarPane; |
| + InspectorTest.addResult("Set up DOM breakpoints."); |
| + pane._setBreakpoint(node, pane._breakpointTypes.SubtreeModified, true); |
| + pane._setBreakpoint(node, pane._breakpointTypes.AttributeModified, true); |
| + pane._setBreakpoint(node, pane._breakpointTypes.NodeRemoved, true); |
| + setUpEventBreakpoints(); |
| + } |
| + |
| + function setUpEventBreakpoints() |
| + { |
| + WebInspector.showPanel("sources"); |
| + var pane = WebInspector.panels.sources.sidebarPanes.eventListenerBreakpoints; |
| + InspectorTest.addResult("Set up Event breakpoints."); |
| + pane._setBreakpoint("listener:click"); |
| + InspectorTest.runAfterPendingDispatches(didSetUp); |
|
yurys
2013/11/08 06:38:26
Can we listen to the setBreakpoint callback instea
aandrey
2013/11/08 09:10:39
why? this works like a charm and more stable than
|
| + } |
| + |
| + function didSetUp() |
| + { |
| + InspectorTest.addResult("Did set up."); |
| + InspectorTest.runTestFunctionAndWaitUntilPaused(didPause); |
| + } |
| + |
| + function didPause(callFrames) |
| + { |
| + InspectorTest.captureStackTrace(callFrames); |
| + DebuggerAgent.setSkipAllPauses(true, true, didSetSkipAllPauses); |
| + } |
| + |
| + function didSetSkipAllPauses() |
| + { |
| + InspectorTest.addResult("Set up to skip all pauses."); |
| + doReloadPage(); |
| + } |
| + |
| + function doReloadPage() |
| + { |
| + InspectorTest.addResult("Reloading the page..."); |
| + InspectorTest.waitUntilPaused(didPauseAfterReload, true); |
|
yurys
2013/11/08 06:38:26
I wonder why we need this force argument passed to
aandrey
2013/11/08 09:10:39
- we are paused at this point, thus waitUntilPause
yurys
2013/11/13 12:26:01
I was wondering why not simply resume execution if
|
| + InspectorTest.reloadPage(didPageReloaded); |
| + } |
| + function didPageReloaded() |
|
yurys
2013/11/08 06:38:26
didReloadPage
aandrey
2013/11/08 09:10:39
Done.
|
| + { |
| + InspectorTest.addResult("PASS: Reloaded without hitting breakpoints."); |
| + InspectorTest.completeDebuggerTest(); |
| + } |
| + |
| + function didPauseAfterReload(callFrames) |
| + { |
| + InspectorTest.addResult("FAIL: Should not pause while reloading the page!"); |
| + InspectorTest.captureStackTrace(callFrames); |
| + InspectorTest.waitUntilPaused(didPauseAfterReload, true); |
| + InspectorTest.resumeExecution(); |
| + } |
| +}; |
| + |
| +</script> |
| + |
| +</head> |
| + |
| +<body onload="runTest()"> |
| +<p>Tests that 'skip all pauses' mode blocks breakpoint and gets cancelled right at page reload. |
| +</p> |
| + |
| +<div id="element" onclick="return 0;"></div> |
| +</body> |
| +</html> |