Index: test/inspector/debugger/continue-to-location-target-call-frames.js |
diff --git a/test/inspector/debugger/continue-to-location-target-call-frames.js b/test/inspector/debugger/continue-to-location-target-call-frames.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6f5d8b5f00ed0b464357e09f34d68b9339694ec7 |
--- /dev/null |
+++ b/test/inspector/debugger/continue-to-location-target-call-frames.js |
@@ -0,0 +1,139 @@ |
+// Copyright 2017 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+InspectorTest.log('Check that continue-to-location works with different strategies.'); |
+ |
+InspectorTest.addScript(` |
+async function asyncFact(n) { |
+ if (n == 0) return 1; |
+ let r = n * await asyncFact(n - 1); |
+ console.log(r); |
+ return r; |
+} |
+ |
+function fact(n) { |
+ if (n == 0) return 1; |
+ let r = n * fact(n - 1); |
+ console.log(r); |
+ return r; |
+} |
+ |
+function topLevel() { |
+ eval(` + '`' + ` |
+ var a = 1; |
+ var b = 2; |
+ fact(3); |
+ console.log(a + b); |
+ ` + '`' + `); |
+} |
+ |
+//# sourceURL=test.js`, 7, 26); |
+ |
+InspectorTest.setupScriptMap(); |
+InspectorTest.runAsyncTestSuite([ |
+ async function testAwaitAny() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'asyncFact(4)//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 11; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'any'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testAwaitCurrent() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'asyncFact(4)//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 11; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'current'}); |
+ await pausedAndDumpStack(); |
+ await Protocol.Debugger.resume(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testAny() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'fact(4)//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 18; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'any'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testCurrent() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'fact(4)//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 18; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'current'}); |
+ await pausedAndDumpStack(); |
+ await Protocol.Debugger.resume(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testTopLevelAny() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'topLevel()//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 4; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'any'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testTopLevelCurrent() { |
+ Protocol.Debugger.enable(); |
+ Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ Protocol.Debugger.pause(); |
+ Protocol.Runtime.evaluate({expression: 'topLevel()//# sourceURL=expr.js'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.stepInto(); |
+ let message = await pausedAndDumpStack(); |
+ let location = message.params.callFrames[0].location; |
+ location.lineNumber = 4; |
+ Protocol.Debugger.continueToLocation({location, targetCallFrames: 'current'}); |
+ await pausedAndDumpStack(); |
+ await Protocol.Debugger.resume(); |
+ Protocol.Debugger.disable(); |
+ } |
+]); |
+ |
+async function pausedAndDumpStack() { |
+ let message = await Protocol.Debugger.oncePaused(); |
+ InspectorTest.logCallFrames(message.params.callFrames); |
+ InspectorTest.logAsyncStackTrace(message.params.asyncStackTrace); |
+ InspectorTest.log(''); |
+ return message; |
+} |