| // 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. |
| |
| // TODO(kozyatinskiy): fix or remove it later. |
| let {session, contextGroup, Protocol} = InspectorTest.start('Tests how async promise chains behave when reaching the limit of stacks'); |
| |
| (async function test(){ |
| InspectorTest.log('Checks correctness of promise chains when limit hit'); |
| await Protocol.Runtime.enable(); |
| await Protocol.Debugger.enable(); |
| Protocol.Debugger.setAsyncCallStackDepth({maxDepth: 128}); |
| |
| await setMaxAsyncTaskStacks(3); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| await setMaxAsyncTaskStacks(4); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| await setMaxAsyncTaskStacks(5); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| await setMaxAsyncTaskStacks(6); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| await setMaxAsyncTaskStacks(7); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| await setMaxAsyncTaskStacks(8); |
| runWithAsyncChainPromise(3, 'console.trace()'); |
| InspectorTest.logMessage(await Protocol.Runtime.onceConsoleAPICalled()); |
| |
| InspectorTest.completeTest(); |
| })(); |
| |
| function runWithAsyncChainPromise(len, source) { |
| InspectorTest.log(`Run expression '${source}' with async chain len: ${len}`); |
| let asyncCall = `(function asyncCall(num) { |
| if (num === 0) { |
| ${source}; |
| return; |
| } |
| Promise.resolve().then(() => asyncCall(num - 1)); |
| })(${len})`; |
| Protocol.Runtime.evaluate({expression: asyncCall}); |
| } |
| |
| async function setMaxAsyncTaskStacks(max) { |
| let expression = `inspector.setMaxAsyncTaskStacks(${max})`; |
| InspectorTest.log(expression); |
| await Protocol.Runtime.evaluate({expression}); |
| } |