Index: test/inspector/debugger/continue-to-location-strategy.js |
diff --git a/test/inspector/debugger/continue-to-location-strategy.js b/test/inspector/debugger/continue-to-location-strategy.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..735d945db639d7bf045d3da0f5a40a0b00d0c9cd |
--- /dev/null |
+++ b/test/inspector/debugger/continue-to-location-strategy.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 testAwaitDefault() { |
+ 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, strategy: 'default'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testAwaitInCurrentFrame() { |
+ 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, strategy: 'inCurrentFrame'}); |
+ await pausedAndDumpStack(); |
+ await Protocol.Debugger.resume(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testDefault() { |
+ 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, strategy: 'default'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testInCurrentFrame() { |
+ 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, strategy: 'inCurrentFrame'}); |
+ await pausedAndDumpStack(); |
+ await Protocol.Debugger.resume(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testTopLevelDefault() { |
+ 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, strategy: 'default'}); |
+ await pausedAndDumpStack(); |
+ Protocol.Debugger.disable(); |
+ }, |
+ |
+ async function testTopLevelInCurrentFrame() { |
+ 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, strategy: 'inCurrentFrame'}); |
+ 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; |
+} |