// 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 then = '.then(() => 1)'; let pause = `.then(() => { ${source} })`; Protocol.Runtime.evaluate({ expression: `Promise.resolve()${then.repeat(len - 1)}${pause}` }); } async function setMaxAsyncTaskStacks(max) { let expression = `inspector.setMaxAsyncTaskStacks(${max})`; InspectorTest.log(expression); await Protocol.Runtime.evaluate({expression}); }